基于物理的着色
Physically Based Shading
基于物理的着色从光与物质交互的物理出发,用 BRDF 和反射方程计算表面沿视线方向射出的辐射亮度:镜面项来自微表面理论与菲涅耳反射,漫反射项来自局部次表面散射,布料、波动光学与分层材质再作扩展。本页是 RTR4 第 9 章的总览,并收录该章第 9.13 节的材质混合与材质过滤(镜面抗锯齿)。
章节结构
第 9 章依次讲:光的物理(9.1)→ 相机(9.2)→ BRDF(9.3)→ 光照(9.4)→ 构建模块:菲涅耳反射(9.5)、微几何(9.6)、微表面理论(9.7)→ 具体模型:表面反射(9.8)、次表面散射(9.9)、布料(9.10)、波动光学(9.11)、分层材质(9.12)→ 材质混合与过滤(9.13)。
下图展示各页之间的依赖:物理现象决定 BRDF 的拆分方式,菲涅耳和微表面理论构成镜面项,次表面散射构成漫反射项,其余为特殊材质的扩展。
flowchart TD A["光与物质的交互 9.1"] --> B["BRDF 与反射方程 9.3-9.4"] B --> C["菲涅耳反射 9.5"] B --> D["微表面理论 9.6-9.8"] C --> D B --> E["漫反射与次表面 BRDF 9.9"] D --> F["布料 9.10"] B --> G["薄膜干涉与分层材质 9.11-9.12"] D --> H["材质混合与过滤 9.13"]
基本框架
- 无参与介质时,进入相机的辐射亮度等于最近表面朝相机方向射出的辐射亮度:;本章只讨论局部反射现象(表面反射与局部次表面散射),不含透明和全局次表面散射。见双向反射分布函数。
- 光照限定为方向光和精确光源,此时反射方程化为求和:。式中 与 BRDF 常见的 抵消,因此从论文移植 BRDF 时通常要先乘以 。
- 完整 BRDF 通常是镜面项 (微表面理论)加漫反射项 (漫反射与次表面 BRDF)。一个最基本的组合是:
金属度参数化
| 参数 | 含义 |
|---|---|
| 表面颜色 | RGB 颜色 |
| 金属度 (metallic / metalness) | :, 为黑;: 取电介质值(常数或由额外参数控制), |
- 依据:金属没有漫反射颜色,电介质的 取值范围有限。最早出现在 Brown 大学的早期着色模型中,现在的形式最早由 Pixar 用于《机器人总动员》;Disney 原则着色模型增加标量 "specular" 参数在有限范围内控制电介质 ,Unreal 使用这种形式,Frostbite 的电介质 范围更大。
- 好处是方便美术、节省纹理或 G-buffer 存储;缺点是不能表达某些材质(如 带颜色的涂层电介质),且金属与电介质交界处可能出现瑕疵。细节见菲涅耳反射。
- 粗糙度通常以 的形式暴露给用户(Burley),见微表面理论。
材质混合 (RTR4 9.13)
- 材质混合是把多种材质的 BRDF 参数(、、粗糙度 )按遮罩组合,例如用遮罩纹理在锈和金属间混合。可离线"烘焙"成新纹理,也可在着色器中实时进行;法线贴图通常也一起混合。
- 《教团:1886》允许任意深度的材质堆叠,大部分离线完成,部分合成留到运行时(多用于环境,给平铺纹理加变化);Substance Painter/Designer、Mari 采用类似思路。游戏中的用途包括动态损伤、装备与服装自定义、增加角色和环境的多样性。
- 严格做法是对每种材质分别着色再混合结果,但混合参数后只着色一次快得多。对与最终颜色近似线性的参数(漫反射色、镜面色)几乎没有误差;即使是高度非线性的粗糙度,遮罩边界上的误差通常也不明显。
- 法线贴图混合需要特殊处理:常可当作派生它们的高度图来混合;叠加细节法线贴图时更适合其他混合方式。
材质过滤与镜面抗锯齿 (RTR4 9.13.1)
- 双线性过滤和 mipmap 假设被过滤的量与最终颜色呈线性关系;对法线贴图和粗糙度等非线性参数这并不成立,会产生镜面锯齿(闪烁高光)或随距离变化的光泽/亮度改变,前者更明显。缓解方法统称镜面抗锯齿。
- 尺度划分:宏观几何用三角形,中观用纹理(法线贴图),小于像素的微观用 BRDF(NDF)。相机远离时,原先覆盖多个像素的凸起退化到亚像素,从法线贴图的范畴进入 NDF 的范畴,这一转变与 mipmap 链密切相关。
- 理想做法是对法线分布本身取平均。若分别平均法线和粗糙度,平均法线正确但分布过窄:表面显得过于光滑,还会引起闪烁。可为每个理想分布拟合一个方向和宽度最接近的 Beckmann 波瓣,把方向存进法线贴图、宽度存进粗糙度贴图,此时法线贴图与粗糙度贴图在几何表面切线空间中共同定义一个倾斜的 NDF。
| 方法 | 原理 | 优点 | 局限 |
|---|---|---|---|
| 早期数值拟合 | 用数值优化把一个或多个 NDF 波瓣拟合到平均分布 | — | 鲁棒性和速度差,现已少用 |
| Toksvig | 平均后不重新归一化,法线长度越短分布越宽,据此修改粗糙度 | 计入 GPU 纹理过滤;支持简单线性 mipmap,适合水波纹等动态法线贴图 | 与依赖单位长度法线的压缩方式不兼容,可能只能不压缩;存短法线有精度问题 |
| LEAN | 映射法线分布的协方差矩阵 | 支持 GPU 过滤、线性 mipmap 和各向异性 | 静态法线需要大量存储 |
| CLEAN | LEAN 的简化版 | 存储更少 | 失去各向异性 |
| LEADR | 扩展 LEAN | 计入置换贴图的可见性效果 | — |
| 方差映射 | 生成 mipmap 时计算平均丢失的方差,通常并入粗糙度贴图 | 适合占多数的静态法线贴图 | 不计 GPU 过滤引入的方差 |
- Toksvig 原式针对 Blinn-Phong:, 为平均法线长度。借助 可用于 Beckmann。GGX 的方差无定义,用于 GGX 理论依据不足,但用 套用在实践中效果尚可。
- Hill 指出 Toksvig、LEAN、CLEAN 的公式都可以用来预计算方差,从而去掉它们原始形式的许多缺点。《使命召唤:黑色行动》把粗糙度转换为方差、加上法线贴图的方差再转回粗糙度;《教团:1886》用 Han 的方法把法线贴图 NDF 与镜面 NDF 卷积后转为粗糙度。
- 补充做法:在纹理空间 x、y 方向分别计算方差存成各向异性粗糙度贴图(只支持轴对齐各向异性,再多存一个值可支持任意方向);对顶层 mip 用小滤波核卷积以弥补 GPU 过滤引入的方差;组合细节法线贴图时要正确合并方差。
- 高曲率几何也会引入法线方差:若有唯一的纹理映射(角色常见),可把曲率烘焙进粗糙度贴图;也可用像素着色器导数指令实时估计(渲染几何时或基于法线缓冲的后处理)。法线方差对 的影响也会影响漫反射。
- 闪烁 (glint):方差映射把分布近似为光滑的高斯波瓣,只有每像素覆盖几十万个凸起时才合理;只覆盖几百到几千个时,动画中会出现时隐时现的闪点。影视常靠大量超采样解决,实时不可行。实时方案有 Wang 与 Bowles(《迪士尼无限 3.0》的闪亮雪,追求合理观感而非模拟特定 NDF,适合稀疏闪点)和 Zirr 与 Kaplanyan(多尺度模拟法线分布,时空稳定,外观更多样)。
GEA 的视角:为什么要"基于物理的光照"(卷 II 12.1.1)
- 过去受硬件限制的实时引擎用粗糙的运行时近似加更精确的离线计算来解决光照问题,暴露给美术和灯光团队的参数是经验性的"凑数因子",不对应任何真实物理量,而且彼此以不直观的方式相互依赖:场景光照一变,材质参数可能就得跟着调。这让动态时间(昼夜变化)之类的功能很难做(卷 II 12.1.1)。
- 硬件追上之后,引擎转向基于物理的光照,美术和灯光师用真实单位的直观参数工作。光源属性与材质属性完全解耦(和现实中一样),光照条件改变时不必重新调材质,因此昼夜变化之类的功能容易支持得多。
- GEA 第 12 章后续都以构建基于物理的渲染引擎为目标;但它在 12.4 节先介绍的 Lambert、Phong、Blinn-Phong 并不物理准确,只是入门,见 着色方程与经典光照模型。本页 RTR4 的微表面 BRDF、金属度参数化等内容 GEA 没有展开。
PBRT 的视角:离线渲染器的反射模型体系(PBRT 4e 第 9 章)
- PBRT 把反射模型按来源分为实测、唯象、微结构模拟、波动光学、几何光学五类,第 9 章实现的是:Lambert、光滑/粗糙导体(复折射率 + Trowbridge–Reitz 微表面)、光滑/粗糙电介质、薄电介质、测量 BRDF 和发丝 BSDF;分层材质在第 14 章。
- 与上文"金属度参数化"的分歧:RTR4 与多数引擎用 base color + metalness,导体用 RGB 与 Schlick 近似;PBRT 不用金属度,导体直接给出逐波长的 与吸收系数 ,用完整菲涅耳方程计算(见 菲涅耳反射)。前者便于美术制作和纹理压缩,后者在光谱渲染下更准确,代价是参数不直观。
- 粗糙度:两者都用 GGX/Trowbridge–Reitz 与高度相关 Smith 遮蔽,PBRT 另外用可见法线采样并完整处理粗糙透射(见 微表面理论)。
- 能量损失:PBRT 承认单次散射微表面模型在高粗糙度下偏暗而不做补偿;上文与 微表面理论 记录了实时管线常用的多次散射补偿。
LearnOpenGL 的视角:Cook-Torrance 金属度工作流与直接光实现(PBR / Theory · Lighting)
来源:Theory、Lighting;摘录 PBR — Theory、PBR — Lighting。Disney/Epic 金属度路线;与 RTR4/微表面页对照,此处抓 方程选型与 GLSL 结构。
理论要点
物理向着色需:微表面、能量守恒、物理 BRDF。粗糙度统计微平面相对半向量的对齐;镜面区变大时需变暗以守恒。金属吸收折射 → 无漫反射;kD = 1 - kS(金属再把漫反射置零)。反射方程对半球积分辐亮度 × BRDF × 。
Cook-Torrance:(F 已含 )。Epic 选用:D=Trowbridge-Reitz GGX;G=Smith Schlick-GGX(,IBL 用 );F=Schlick,。贴图:Albedo(无阴影)、Normal、Metallic、Roughness、AO。
直接光 shader
对点光循环:算半向量与 DFG;辐射率用颜色 × 衰减 × ;累加后再 HDR 曝光 tone map + gamma(输入须线性,见 Gamma 章)。纹理化即用采样值替换常量 roughness/metal/albedo。链 微表面理论、菲涅耳反射、双向反射分布函数、Substrate 材质。
出处
- realtime_rendering_4ed.pdf 第 9 章 Physically Based Shading
- Game_Engine_Architecture_4th_Edtion_Volume_2_-_Jason_Gregory.pdf
- Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 12 章 12.1.1 节
- PBRT 4e source excerpt: chapter 09 (Reflection Models)
- Pharr, Jakob, Humphreys《Physically Based Rendering: From Theory to Implementation》第 4 版(MIT Press, 2023)第 9 章 9.1–9.9 节,pbr-book.org/4ed/Reflection_Models
- PBR — Theory
- PBR — Lighting
- learnopengl.com/PBR/Theory
- learnopengl.com/PBR/Lighting