基于图像的光照
Image-Based Lighting
用纹理数据(通常是相机拍摄的 360° HDR 全景)照明场景称为基于图像的光照。实时引擎常用预滤波的高光立方体贴图(配合 split-sum 近似)处理高光,用辐照度环境贴图或球谐系数处理漫反射。它们只依赖少量光照图元而不需要知道场景其他表面,因此仍属局部光照。
直接光与环境光的分工
反射方程本身不区分直接光和间接光,但直接光通常立体角小、辐亮度高,间接光以中低辐亮度弥漫半球其余部分,所以分开处理。典型引擎:少数重要光源用解析面光源加阴影贴图;远处光、天空、补光、表面反弹光用环境立方体(高光)加球面基(漫反射辐照度)。
高光 IBL:预滤波环境贴图
- 也叫高光光照探针、高光立方体贴图。把环境模糊即可模仿粗糙表面,但模糊必须是非线性的:纹素间角距与立体角不恒定,AMD CubeMapGen 等工具会跨面取样并考虑纹素角度范围。
- 单纯模糊与 BRDF 无关。按 BRDF 瓣过滤至少有 5 维输入(粗糙度 + 视线与法线各两个极角),不可能全存。实践把瓣限制为绕反射向量径向对称,只随粗糙度变化:按粗糙度预卷积多张图,存进立方体贴图的 mip 链(越高 mip 越粗糙),运行时用反射向量查、按粗糙度强制选 mip,三线性过滤插值中间粗糙度。宽滤波去掉高频、只需低分辨率,与 mip 结构天然契合。
- Phong 瓣本身绕反射向量对称,可几乎精确;Phong 反射向量项换成 Blinn-Phong 半向量时,指数除以 4 拟合较好。
- 地平线裁剪:真实瓣在掠射角会被表面地平线截掉,实时方法通常忽略,导致掠射角过亮。Lagarde 建议按粗糙度把取样向量从反射方向向法线偏,部分补偿。
- mip 选择要考虑像素足迹内法线与粗糙度的变化:Ashikhmin & Ghosh 建议比较硬件缩小级别与滤波宽度级别,取分辨率更低者;更准确的是换一个拟合足迹内平均瓣的新粗糙度——与 BRDF 抗锯齿问题相同(见基于物理的着色)。
- 平面(如地板)上径向对称滤波误差明显,曲面上通常看不出。
卷积的计算
被积式 是球面卷积,只能数值求:蒙特卡洛 ,写入贴图时还要按纹素立体角加权。
- 低粗糙度 mip 大多数样本 被浪费,用匹配瓣形的重要性采样;还可联合考虑环境辐亮度分布。点采样通常要数百样本,只适合离线。
- 用锥代替点:按锥的立体角取对应 mip 采样,有偏但样本少,GPU 上可交互。McGuire 等混合未滤波立方体的多个 mip 重建 Phong 瓣,Hensley 用求和面积表,Kautz 层次化生成抛物面图;Manson & Sloan 用二次 B 样条过滤 mip,实时结果与重要性采样参考解难以区分。
- 快速卷积使动态渲染的立方体贴图可每帧或隔几帧更新。替代方案:在静态预滤波图上叠加动态光的预滤波"斑点"(只适用远光);或几何静态而太阳移动时,存 G-buffer 环境贴图(位置、法线、材质)重新着色——《Call of Duty: Infinite Warfare》《巫师 3》《Far Cry 4》使用。
Split-Integral(Split Sum)近似
旧做法用 Phong 瓣再乘镜面菲涅耳 ,丢掉了 与 ;Lazarov 指出用 的误差比不用菲涅耳还大。Gotanda、Lazarov、Karis 各自推出:
- 并非拆成两个不相交项: 和 在两边都出现,凡绕反射向量对称的项都放进两个积分。
- 第一项只依赖粗糙度和 ,假设 ,存入立方体 mip。
- 第二项是高光的方向反照率 ,依赖仰角、粗糙度和 F0。Gotanda 存三维表;Karis 与 Lazarov 发现 F0 可分离出去,得到两个二维因子——Karis 存为双通道二维纹理,Lazarov 用拟合函数,Iwanicki & Pesce 给出更准确简单的近似。 也可用于改进漫反射模型,两处共用。
- 对常数环境精确;低频环境(户外常见)经验上也成立。最大误差来源是 的径向对称、不裁剪假设。
非对称与各向异性瓣
微表面瓣定义在半向量上,从不具备所需对称性;只有正视 () 时结果有保证。改进:Kautz & McCool 为当前视线找最佳单个瓣或多个瓣平均,并给能量修正;Iwanicki & Pesce 用 Nelder-Mead 为 GGX 拟合,并研究用硬件各向异性过滤加速;Revie 把单样本移到复杂 BRDF 峰值用于延迟着色下的毛发,McAuley 推广到所有表面;McAllister 利用 Lafortune BRDF(多个扰动的 Phong 瓣)实现各向异性和逆反射,Green 等用高斯瓣。
漫反射 IBL:辐照度环境贴图
- 以法线索引、存辐照度(高光图以反射向量索引、存辐亮度)。法线包含漫反射所需全部信息,不存在高光图的歧义;与钳制余弦卷积是精确的。极度模糊,可低分辨率存储,常直接用预滤波高光图的最低 mip 之一。
- 使用:辐照度乘漫反射率,高光图乘高光反射率;可加菲涅耳在掠射角增高光、减漫反射。
- 宽滤波难以实时采样生成;King 变换到频域在 2004 年硬件上超过 300 FPS。用 64×64 小立方体生成时面光源可能"落在纹素之间"闪烁,Wiley & Scheuermann 改用大卡片表示光源。Brennan:向辐照度图中直接渲染一个朝光方向的半球(余弦瓣)以加入动态光。
球谐辐照度
- Ramamoorthi & Hanrahan:前 9 个 SH 系数(RGB 共 27 个浮点数)表示辐照度误差约 1%;只存间接光时 4 个系数(常数 + 线性带)常已足够。重建只需算几个多项式,不必采样纹理。
- 辐照度是辐亮度与钳制余弦的球面卷积。钳制余弦绕 z 轴对称,每个频带只有一个非零系数(带谐函数);卷积结果系数 = 两者系数之积再乘 。
- 钳制余弦在 处突变,9 项近似在 到 间轻微振荡(振铃),极端光照下表现为色偏或背光面亮斑;只存间接光时一般不成问题,可加窗预滤波。
- 动态立方体投影:,再乘缩放后的余弦系数得辐照度系数;因子 只依赖纹素,可离线存成立方体贴图(每通道一个基)。
- 动态光:点、圆盘、球光的系数有解析式,以带谐给出后旋转(只需点积),直接加到已有系数上;复杂形状可画成图像后数值投影;Habel 给出 Preetham 天空光的 SH 展开。补光 (fill light) 常只算漫反射。反过来可从 SH 中提取方向光(Sloan,仅用线性带即可选近似最优方向,也可提取多个),用于光源合并;lightcuts 是聚合次要光源的系统方法。
- SH 也可做视角相关的光泽光照(Ramamoorthi & Hanrahan、Kautz),但占空间大或只适合低频。
其他辐照度表示
- 半球光照(Parker 等):上半球 、下半球 , 时 , 时两者互换。Baker & Boyd 的更快近似 ,轴为坐标轴时 就是法线的一个分量,多数应用更可取。
- Forsyth 的 trilight 涵盖方向、双向、半球和包裹光照;Valve 最早用环境立方体存辐照度。
- 要处理遮挡或光泽反射需要高频表示,即预计算辐射传输 (PRT) 与全频光照;Ng 等用 Haar 小波存环境与自阴影函数,可看作立方体贴图压缩。
下图概括一个典型引擎中环境光照的数据流:
flowchart TD A["HDR 环境 / 动态渲染的立方体贴图"] --> B["按粗糙度 GGX 预卷积到 mip 链"] A --> C["投影到 SH 或辐照度立方体"] D["二维 LUT:仰角 × 粗糙度"] --> E["高光 = 预滤波值 × R_spec"] B --> E C --> F["漫反射 = 辐照度 × 漫反射率"]
误差与取舍
- 环境光照假设无限远辐亮度源,现实中不存在;最难的是遮挡——环境光没有主方向,点光源的阴影技术用不上,漏光往往比缺光更显眼(遮蔽方法见第 11 章)。
- 预滤波立方体在特定(罕见)条件下对某 BRDF 精确,一般情况下有误差;不同光照表示之间的一致性比各自误差更重要。
PBRT 的视角:无穷远面光源与环境光重要性采样(PBRT 4e 12.5)
上文是实时 IBL 的预积分路线(预滤波、split sum、球谐);PBRT 走采样路线:把环境贴图当作包围场景的无穷远面光源,在路径追踪中直接对它重要性采样,结果无偏,可见性(遮挡)由阴影光线自动处理。
三种实现
UniformInfiniteLight:常数亮度。若调用方会做 BSDF 采样并用 MIS(allowIncompletePDF为真),它不生成样本、PDF 返回 0:此时被积函数为 ,BSDF 采样已足够好,而 MIS 在某一技术远优于其他时反而会增加方差(MIS 补偿,Karlík 等 2019)。否则均匀采样球面。ImageInfiniteLight:图像采用等面积八面体参数化(见 球面几何与方向参数化),用PiecewiseConstant2D按像素值采样,单位正方形到球面的换元因子为常数 。另建一份补偿分布:每个像素权重减去平均值(小于 0 则截为 0),allowIncompletePDF为真时使用,只在亮区采样,暗区交给 BSDF 采样。书中图 12.18(晨光天空,32 spp):按图像采样比均匀采样 MSE 低 38,000 多倍,补偿分布再好 1.52 倍,耗时几乎相同。功率 = 像素平均亮度 × × 场景包围球半径圆盘面积。PortalImageInfiniteLight(Bitterli 等 2015):室内场景只能通过窗户看到天空时,普通环境采样会把大量样本投向被墙挡住的太阳。用户指定一个四边形"门户",光源改用与门户边对齐的坐标系和整流 (rectified) 参数化 :从任一点看门户四角,相邻角只差一个坐标,所以可见区域在图像上永远是矩形,可以用WindowedPiecewiseConstant2D(附录 A.5.6)只在该窗口内采样。等距柱状、等面积映射乃至"归一化后取 "都破坏这一性质。构造时把等面积图双线性重采样成整流图(未做空间变化滤波,可能混叠);采样分布预乘每像素的换元因子,使样本权重更均匀。Le()对门户外的方向返回 0,防止几何漏洞造成漏光。书中图 12.19 水彩房间场景 MSE 降低 2.82 倍。多门户见 Ogaki 2020(门户 BVH)。
与上文(RTR4)的对照
| 方面 | RTR4 实时 IBL | PBRT 无穷远光源 |
|---|---|---|
| 积分方式 | 预滤波 / split sum / SH,查表 | 每帧蒙特卡洛重要性采样 |
| 遮挡 | 需要 AO、反射探针等另行近似 | 阴影光线精确 |
| 参数化 | 立方体贴图为主 | 等面积八面体;门户光源用整流参数化 |
| 偏差 | 有(split sum 等近似) | 无偏,有噪声 |
延伸阅读:Blinn–Newell 1976 提出环境贴图;Miller–Hoffman 1984 首次用任意环境图照明漫反射和光泽物体;Debevec 1998 拍摄真实环境;Unger 等 2003/2008 的入射光场把位置也纳入;Subr–Arvo 2007b 计入余弦并只在法线半球采样;Conty Estevez–Lecocq 2018 做 BSDF × 环境图乘积采样。
原书问题(12.5.3,已解码网页 SVG 并数值验证)
书中把门户参数化的换元因子写作
右边实际是 (单位 面积对应的立体角),左边应倒过来。推导:令 ,,,而 等,得 。笔者在 处用有限差分求得 ,与该式的 7.9858 一致。pbrt-v4 代码中变量名 duv_dw 沿用了这个错误的名称,但用法是 pdf = mapPDF / duv_dw,即 ,是正确的;正文"把 计入采样分布"同理应理解为每像素立体角。
- 第 12 章参考文献把 Bashford-Rogers 等 "Importance driven environment map sampling" 标为 2013 年、IEEE TVCG 20(6), 907–18。Crossref(DOI 10.1109/TVCG.2013.258)显示卷期页码正确,正式刊期为 2014 年 6 月;2013 是在线优先发表年份(DOI 中的 2013 即此),引用正式卷期时应写 2014。(已核实,原"存疑"撤销。)
LearnOpenGL 的视角:辐照度立方体与 Split Sum 镜面 IBL(PBR / IBL)
来源:Diffuse irradiance、Specular IBL;摘录 PBR — IBL Diffuse irradiance、PBR — IBL Specular。与上文 RTR split-sum / 预滤波立方体对照。
漫反射辐照度
环境 HDR(常 equirect)先转立方体;对每个法线方向半球卷积得 irradiance map,运行时 kD * albedo/π * irradiance(N)(再乘 AO)。需线性 + HDR 工作流。
镜面 Split Sum
Epic 把镜面积分拆成:① 按粗糙度预滤波环境立方体(mip ≈ roughness;重要性采样 GGX);② BRDF 积分查找表(NdotV × roughness → 缩放与偏置,与 F 组合)。运行时:prefilteredColor * (F*brdf.x + brdf.y)。注意 mip 选择、立方体无缝与能量。链 环境贴图、局部反射探针、蒙特卡洛积分与重要性采样。
GPU Gems 的视角:过滤重要性采样做动态光泽 IBL(GPU Gems 3 第 20 章)
来源:Colbert & Křivánek《GPU-Based Importance Sampling》;摘录 Chapter 20. GPU-Based Importance Sampling — Colbert, Křivánek。与上文 split-sum / 预滤波立方体对照:本章是运行时蒙特卡洛,材质与环境可贴图即时更换。
按 BRDF(如归一化 Phong)PDF 采方向,估计量用 加权。用 Hammersley 拟随机序列作常量(确定性→走样)。关键技巧按 PDF 选 mip:样本立体角 ,再换成环境图 mip 层级;PDF 小时模糊更大区域,PDF 大时取细节。环境图用双抛物面(缩放约 1.2)而非立方体,因立方体面各自做 mip 会出接缝。漫反射仍用球谐。实践:复杂几何约 24 样本、光滑球约 40 即可观感可接受。与预滤波 IBL 比:无需长时间预处理,适合材质/灯光设计工具;固定游戏场景仍常选 split-sum。
GPU Gems 的视角:实时动态辐照度环境图(GPU Gems 2 第 10 章)
来源:Gary King《Real-Time Computation of Dynamic Irradiance Environment Maps》;摘录 Chapter 10. Real-Time Computation of Dynamic Irradiance Environment Maps — Gary King。把环境图卷积成漫反射/镜面辐照度图搬到 GPU,动态灯光与物体也能驱动「近似全局光照」。
环境图可视作大量方向光;暴力漫反射卷积 (64³→32³ 立方体约 1.5 亿次)。漫反射辐照度随法线变化极慢,频域(球谐)把代价降到 : 仅 9 个系数就够漫反射,镜面约 。卷积定理:空间卷积 = 频域对应系数相乘;BRDF 的球谐系数可预计算。
PS 3.0 两遍:空间→频域用预计算 权重瓦片(VPOS 映射输出像素到瓦片);卷积+逆变换用 权重,按立方体面迭代。输入可用双抛物面图。演示在 6800 GT 上辐照度重建 >300 FPS。阴影难做——与 环境光遮蔽(同书 Ch14)搭配。球谐系数还可线性插值/相加,混合多套光照环境。与 Gems3 重要性采样 IBL 对照:本章是低频 SH 预滤波动态更新;后者是高光 BRDF 蒙特卡洛采样。
出处
- realtime_rendering_4ed.pdf 第 10 章 Local Illumination
- PBRT 4e source excerpt: chapter 12 (Light Sources)
- Pharr, Jakob, Humphreys《Physically Based Rendering: From Theory to Implementation》第 4 版(MIT Press, 2023)第 12 章 12.5 节、延伸阅读,pbr-book.org/4ed/Light_Sources
- Chapter 20. GPU-Based Importance Sampling — Colbert, Křivánek
- developer.nvidia.com/gpugems/gpugems3/part-iii-rendering/chapter-20-gpu-based-importance-sampling
- Chapter 10. Real-Time Computation of Dynamic Irradiance Environment Maps — Gary King
- developer.nvidia.com/gpugems/gpugems2/part-ii-shading-lighting-and-shadows/chapter-10-real-time-computation-dynamic
- PBR — IBL Diffuse irradiance
- PBR — IBL Specular
- learnopengl.com/PBR/IBL/Diffuse-irradiance
- learnopengl.com/PBR/IBL/Specular-IBL