Physically Based Shading
"没有什么是丑陋的;我一生中从未见过丑陋的东西,因为不管一个物体的形状如何,光、影和透视总是会使它变得美丽。" —— 约翰·康斯太勃尔
本章的核心是建立一套基于真实物理原理的光照和材质模型。我们将从最基础的光的物理性质开始,逐步构建起一套用于实时渲染的、效果逼真且参数可控的着色理论。
一、 光的物理学 (The Physics of Light)
要做出逼真的渲染,首先要理解光是什么以及它如何与世界互动。这一节是整个PBR(Physically Based Rendering)理论的基石。
核心观点: 光的本质是电磁波,它与物质的交互(主要是散射)决定了我们看到的一切。渲染中的着色模型,本质上是在模拟这些复杂的物理交互。
1. 光的波动性与干涉
- 基本属性: 光是一种电磁波,拥有波长(Wavelength, )、相位等属性。人眼感知到的颜色与光的波长直接相关。我们通常处理的是非偏振光(unpolarized light)。
- 能量: 光的能量流强度(渲染中称为辐照度, Irradiance, )与波的**振幅(amplitude)**的平方成正比。
- 核心现象:干涉 (Interference)
- 当多束光波叠加时,它们的能量不是简单相加。
- 相长干涉 (Constructive Interference): 如果波峰对波峰,波谷对波谷(同相位),能量会急剧增强。束波可以产生倍的能量。
- 相消干涉 (Destructive Interference): 如果波峰对波谷(反相位),能量会相互抵消,甚至变为0。
- 不相干叠加 (Incoherent Addition): 如果相位完全随机,总能量才是各个波能量的简单线性相加。
- 关键理解: 干涉现象不违反能量守恒,它只是将能量在空间中进行了重新分布。
 
2. 粒子散射 (Particle Scattering)
当光遇到物质中的微小粒子(分子或分子团簇)时,会向四周散射。
- 核心机制: 入射光波的电场使物质中的电荷振荡,振荡的电荷会发射出新的光波,这个过程就是散射 (Scattering)。
- 散射强度与粒子聚集度:
- 独立粒子 (如气体): 粒子间距随机,散射波不相干,总散射能量与粒子数成正比。
- 聚集粒子 (如云、雾): 当粒子聚集在比波长还小的范围内,散射波会发生相长干涉,总散射能量与粒子数的平方成正比。这就是为什么云和雾看起来那么“浓”的原因。
 
- 散射类型与粒子尺寸:
- 瑞利散射 (Rayleigh Scattering): 当粒子远小于光的波长。散射强度与波长高度相关(短波长散射更强)。这是天空呈现蓝色的原因。
- 米氏散射 (Mie Scattering): 当粒子尺寸接近或大于光的波长。散射与波长关系不大,且更多地朝前向散射。这是云和雾呈现白色的原因。
 
3. 介质 (Media)
光在物体内部(介质)传播时的行为。
- 均匀介质 (Homogeneous Medium):
- 在理想的均匀介质(如纯净水、玻璃)中,来自各个分子的散射波会因相消干涉而在除前进方向外的所有方向上抵消。
- 宏观效果: 光在其中只是速度变慢并且可能被吸收,但不会发生可见的散射。
- 关键参数:
- 折射率 (Index of Refraction, IOR, ): 光在介质中速度变化的度量。。
- 衰减率 (Attenuation Index, ): 光在介质中能量被吸收(转化为热能)的速率。
- 这两个参数共同构成了复折射率 (Complex IOR, ),它完整定义了介质的光学特性。
 
 
- 非均匀介质 (Inhomogeneous Medium):
- 可以看作是在均匀的“背景”介质中嵌入了许多微小的散射粒子(例如,牛奶是水中的脂肪和蛋白质颗粒)。
- 物体的颜色和外观: 通常由吸收和散射共同决定。
- 吸收决定了光的颜色(吸收了什么颜色的光,就呈现剩余光的颜色)。
- 散射决定了物体的不透明度或“浑浊度”。
- 白色 = 高散射 + 低吸收。
 
 
4. 表面 (Surfaces)
当光从一种介质进入另一种介质时,在它们的交界处——也就是表面——发生的事情。
- 
光学定义: 表面是两个具有不同折射率(, )的介质之间的二维界面。 
- 
核心现象: 在一个光滑的平面上,光会分裂成两部分: - 反射 (Reflection): 光被弹回原来的介质。反射角等于入射角。
- 折射 (Transmission): 光进入新的介质,并且方向发生偏折。方向变化遵循斯涅尔定律 (Snell's Law)。 其中 是入射角, 是折射角。
 
- 
几何光学 (Geometrical Optics) 的假设: - 在实时渲染中,我们通常采用几何光学的近似,忽略光的波动性(如衍射),将光建模为光线 (Ray)。
- 这个假设成立的条件是:表面的不规则起伏要么远大于波长,要么远小于波长。
 
- 
微观几何 (Microgeometry) 与粗糙度 (Roughness): - 核心观点: 现实世界中的表面在微观尺度上都不是完美光滑的。这些小于一个像素、无法直接建模的微小凹凸就是微观几何,也称为微表面 (Microfacets)。
- 对外观的影响: 宏观上“粗糙”的表面,可以看作是由无数个朝向各异的微小镜面组成的。
- 光滑表面: 微表面法线方向基本一致,产生镜面反射(sharp reflection)。
- 粗糙表面: 微表面法线方向混乱,将光线散射到不同方向,产生模糊、磨砂质感的反射(blurry/diffuse reflection)。
 
- 关键术语: 粗糙度 (Roughness) 是对微观几何法线分布混乱程度的统计学描述。它是PBR材质模型中最重要的参数之一。
 
5. 次表面散射 (Subsurface Scattering, SSS)
光线折射进入物体内部后,经过多次散射和吸收,最终从表面其他位置射出的现象。这是非金属材质(尤其是电介质)颜色和质感的主要来源。
- 现象: 想想光照在皮肤、玉石、牛奶上的效果,光线似乎“滲透”了进去,让物体看起来很“软”。
- 尺度决定模型: SSS的处理方式取决于光线在物体内部的**行进距离 (entry-exit distance)与着色尺度 (shading scale, e.g., 像素大小)**的相对关系。
- 局部次表面散射 (Local SSS):
- 当行进距离远小于一个像素时。
- 简化处理: 我们可以认为光线从入射点原地射出。
- 在PBR中的体现: 这就是我们通常所说的漫反射 (Diffuse) 项。它模拟的是光线进入物体、被随机散射后返回的宏观效果。
 
- 全局次表面散射 (Global SSS):
- 当行进距离大于或等于一个像素时。
- 现象: 光线会从A点进入,明显地从B点射出,产生光的“渗透”和“模糊”效果(例如耳朵被光照透的红色)。
- 处理方式: 需要更复杂的、非局部的渲染技术来模拟光能在表面的传递。
 
 
- 局部次表面散射 (Local SSS):
- 核心要点: 一个材质是应该用简单的漫反射模型还是复杂的SSS模型,不仅取决于材质本身(皮肤的散射距离远大于塑料),也取决于观察尺度(远看时,皮肤的散射也可能小于一个像素,可以用漫反射近似)。
二、 相机 (Camera)
在深入研究材质如何反射光线之前,我们先要明确渲染的目标:计算光线如何进入我们的“虚拟眼睛”——相机。
核心观点: 传统渲染使用的针孔相机模型是一个理想化的简化。理解更真实的物理镜头模型有助于我们处理一些渲染中的疑难杂症,并为高级效果(如景深)打下基础。
- 渲染的目标: 计算从场景表面某点,沿着观察方向,最终进入相机的辐射率(Radiance)。
1. 针孔相机模型 (Pinhole Camera Model)
- 定义: 这是图形学中最基础、最常用的相机模型。它假设相机是一个没有体积的数学点,光线通过这个点投射到成像平面上。
- 特点:
- 结构简单,易于用透视变换(Projection Matrix)来表达。
- 在模型中,每一个着色采样点(可以理解为像素的一个子采样)都只对应一条独一无二的观察光线。
- 缺点: 它无法模拟真实世界相机的一些物理现象,例如景深。
 
2. 物理镜头模型 (Physical Lens Model)
- 定义: 一个更符合物理现实的模型,它承认相机拥有一个带镜头的、有实际大小的光圈(Aperture)。
- 核心区别:
- 由于光圈有面积,传感器上的任何一个点接收到的不再是一条光线,而是一个圆锥范围内的光线(a cone of light)。
- 这带来了**景深(Depth of Field)**效果:只有处于焦平面上的物体是清晰的,过近或过远的物体会变得模糊。
 
- 对渲染工程师的核心启示:
- 当你遇到一些因为“视线是无限细的光线”而导致的数学奇点或视觉瑕疵时(例如,一个无限薄的平面在掠射角下可能出现问题),回想一下物理相机模型。真实世界的光线总是有一定的范围和分布,这个思想能帮你找到解决方案。
 
三、 BRDF (The Bidirectional Reflectance Distribution Function)
这是基于物理着色的核心概念。它是一个数学函数,精确描述了光线与物体表面发生局部反射作用的规律。
核心观点: BRDF 是一个函数 ,它回答了这样一个问题:“对于从 方向射入的光线,有多少比例的能量会反射到 方向?”。它是一切局部光照计算的基石。
1. 定义与目标
- 全称: 双向反射分布函数 (Bidirectional Reflectance Distribution Function, BRDF)。
- 作用域: 描述局部反射现象,即光线从哪里进入,就从哪里射出。这包括了表面反射(镜面反射)和局部次表面散射(漫反射)。
- 参数:
- : 指向光源的入射光方向 (light)。
- : 指向相机的观察方向 (view)。
- 通常还依赖于表面法线 和粗糙度等材质属性。
 
- 分类:
- 各向同性 (Isotropic): 材质没有方向性(如塑料、陶瓷)。围绕法线 旋转材质,其外观不变。BRDF只需要关心 和 的相对角度。
- 各向异性 (Anisotropic): 材质具有特定方向(如拉丝金属、木纹)。外观会随着旋转而改变。
 
2. 反射方程 (The Reflectance Equation)
这是使用BRDF计算最终出射光线辐射率的积分公式。它是所有PBR光照计算的理论基础。
- 公式解读:
- : 我们要求解的目标——沿 方向的出射辐射率。
- : 对以表面点为中心、法线朝上的**整个半球()**的所有入射光方向进行积分。
- : BRDF,决定了光的反射分布。
- : 从 方向入射的辐射率(即环境光或光源的亮度)。
- : 余弦项。它表示表面接收到的光量会随着入射角的增大而衰减(光的投影面积变小)。
 
3. 物理约束 (Physical Constraints)
一个物理上可信的BRDF必须遵循两条定律:
- 
亥姆霍兹互易性 (Helmholtz Reciprocity): - 含义: 交换入射光方向和观察方向,BRDF的值不变。即光路是可逆的。
- 公式:
 
- 
能量守恒 (Energy Conservation): - 含义: 反射出去的总能量不能超过入射的总能量。
- 衡量标准: 通过定向半球反射率 (Directional-Hemispherical Reflectance) 来检验。它表示对于某个方向的入射光,反射到整个半球的总能量比例。
- 约束条件: 对任意入射方向 ,其值必须在 范围内。
- 重要提示: BRDF本身的值可以大于1(例如在高光中心),但它在整个半球上的积分结果必须小于等于1。
 
4. Lambertian BRDF: 一个基础范例
这是最简单的BRDF模型,用于描述理想的、完美的漫反射表面。
- 核心特征: 它向所有方向均匀地反射光线,因此其BRDF是一个常数。
- BRDF 公式:
- 关键参数:
- : 次表面反照率 (subsurface albedo),也常被称为漫反射颜色(diffuse color)。它代表了材质的总反射率,其值范围为 。
 
- 为何要除以  ?
- 这是一个归一化因子 (normalization factor)。为了满足能量守恒,对这个恒定的BRDF在整个半球上进行积分,结果必须等于 。而 ,因此必须除以 来抵消掉这个积分项,从而确保能量守恒。
 
这一节是连接上一节复杂理论(反射积分方程)和下一节具体材质模型(BRDF实现)的关键桥梁。它解释了在实时渲染中,我们是如何用简化的、可计算的光源模型来实际求解光照的。
四、 光照 (Illumination) - 从积分到求和
上一节我们学习了宏伟的反射方程,它是一个积分,理论上需要计算来自整个半球的所有光线。但在实时渲染中,逐像素计算积分是不可行的。本节将告诉我们如何将这个复杂的积分简化为一个简单的求和运算。
核心观点: 在局部光照 (Local Illumination) 模型中,我们放弃计算全局光线反弹,只考虑从明确指定的光源直接照射到物体表面的光。这使得我们可以将反射方程的积分,简化为对每个光源进行一次BRDF计算的求和。
1. 局部光照 vs. 全局光照 (Local vs. Global Illumination)
这是理解现代渲染管线的关键分水岭。
- 
全局光照 (Global Illumination, GI): - 目标: 精确计算反射方程中的入射光 ,模拟光线在场景中的所有反弹。
- 效果: 能产生极为真实的效果,如颜色溢出(color bleeding)、软阴影、间接光照等。
- 代价: 计算量巨大,是离线渲染(如电影特效)的标配,实时渲染中则需要大量近似技术(详见第11章)。
 
- 
局部光照 (Local Illumination): - 目标: 只考虑直接光照,即光从光源发出,照射到表面,然后进入相机。
- 简化: 我们假设入射光 仅从几个离散的光源方向射来,在其他所有方向上都为零。
- 应用: 这是传统实时渲染(如Forward Rendering)的基础,也是本章后续讨论的前提。
 
2. 简化光源模型 (Simplifying the Light Model)
现实世界的光源都有体积(面光源, Area Lights),但在局部光照模型中,我们通常使用数学上的抽象来简化它们。
- 
抽象光源: - 方向光 (Directional Light): 可被视为一个尺寸无限小但距离无限远的面光源。
- 精确光源 (Punctual Lights): 如点光源,可被视为一个尺寸无限小的邻近面光源。
 
- 
光源颜色 ()的物理定义: - 为了让光源强度有一个物理上的锚点,书中给出了一个直观的定义: 的值等于“一个正对着该光源的、纯白色、完美漫反射表面所反射出的Radiance”。
- 这个定义将抽象的光源颜色与其实际的视觉效果联系了起来。
 
3. 简化的反射方程 (The Simplified Reflectance Equation)
有了简化的光源模型,原本的反射积分方程就可以奇迹般地“坍缩”成一个简单的乘法和加法运算。
- 
对于单个光源: - 我们不再需要积分,只需对该光源方向 计算一次BRDF即可。
- 公式:
- 解读:
- : 最终的出射光。
- : 材质的BRDF。
- : 光源的颜色/强度。
- : 标准的dot(n, l),并通过max(0, ...)操作进行了截断,防止光从物体背面穿透。
 
 
- 
对于多个光源: - 光的贡献是线性叠加的,所以我们只需对每个光源重复上面的计算,然后将结果相加。
- 最终公式 (多光源):
- 核心启示: 这个公式就是你在着色器(Shader)中写的光照循环 (Lighting Loop) 的物理学原理!它将抽象的计算机图形学光照模型,与坚实的物理学基础(反射方程、BRDF)完美地联系在了一起。
 
4. 关键实现细节:恼人的 (Key Implementation Detail: The Pesky )
你可能已经注意到了公式中多出来的 。
- 来源: 这个 是从“将面光源亮度转换为方向光亮度”的物理推导中自然产生的。
- 作用: 它非常方便地抵消了许多BRDF(尤其是漫反射项,如Lambertian的 )中作为归一化因子的 。
- 给工程师的警告:
- 当你从学术论文或研究报告中借鉴一个BRDF模型时,需要特别留意它的定义。如果该BRDF已经包含了 归一化因子,而你的光照方程又是基于上面这个简化的形式,那么在使用该BRDF之前,你需要先将其乘以 。
- 这是一个非常常见的实现陷阱,会导致光照结果偏暗。
 
关于 的精确解释
这个 的出现,并非源于光源类型的转换,而是源于我们为光源颜色 所选择的“单位”或“定义”。
问题的核心在于区分两个物理量:
- 辐照度 (Irradiance, ): 这是物理上光线投射到表面时的能量密度(单位:瓦特/平方米)。对于方向光,这是一个更基础的物理量。
- 辐射率 (Radiance, ): 这是我们最终在屏幕上看到的亮度(单位:瓦特/平方米/球面度)。
Punctual Light Sources 推导过程
s2013_pbs_physics_math_notes.pdf
基本概念
点光源(punctual light sources )常用于计算机图形学中,用来近似面积光源。 它们是无限小且无限亮的理想化光源(如点光源、方向光源、聚光灯),虽然不真实,但计算简便。
点光源由两个量定义:
- 光的颜色 :
- 光的方向 :
其中, 常被定义为从理想的 100% Lambertian 表面 (法线与光方向平行)反射的辐射率。
基本条件
点光源的主要特点是简化反射方程。设光源被限制在一个圆锥内,半角为 ,则:
光源颜色的定义
在给定表面点处,点光源的颜色定义为:
这是在假设表面是 Lambertian 且法线与光方向一致 ( ) 的条件下。
取极限过程
当 时,光方向与 重合,即 。于是:
由此得到:
推广到一般 BRDF
考虑一般的 BRDF ,出射辐射率为:
当 时, ,于是:
代入式 (11) 得:
结论
最终的 点光源反射方程 为:
这说明点光源贡献的出射辐射率,可以通过 BRDF、光源颜色和几何项 直接计算。
五、 菲涅尔反射 (Fresnel Reflectance) - 视角决定反光强度
这是构建 PBR 模型的第一块核心积木。它描述了一个基础但至关重要的物理现象。
核心观点: 一个光滑表面反射光线的比例不是一个常数,它取决于你的观察角度。当视线垂直于表面时,反射最弱;当视线与表面接近平行(掠射角)时,任何光滑表面都会趋向于变成一块完美的镜子,反射率为100%。这种现象被称为菲涅尔效应 (Fresnel Effect)。
1. 外反射 (External Reflection)
这是最常见的情况,指光线从空气(或折射率较低的介质)射向物体表面(折射率较高的介质)。
- 关键行为:
- 法线入射 (Normal Incidence, ): 当你正视一个表面时,反射率最低。这个最低反射率值是一个重要的材质属性,我们称之为 。
- 掠射角 (Grazing Angles, ): 当你从一个很小的角度斜视物体边缘时,反射率会急剧增加,并最终在 时达到 1.0(即100%反射,呈现为白色)。
 
-  (F-Zero): 材质的指纹
- 是该材质在法线入射下的镜面反射率(specular reflectance),也可以理解为它的基础镜面颜色。这是控制菲涅尔效应的核心参数。
- 它可以由材质的折射率 (IOR, ) 计算得出:
 
2. Schlick 近似 (The Schlick Approximation)
完整的菲涅尔方程非常复杂,不适合在实时渲染中直接计算。Schlick 提出的近似公式在性能和精度上达到了完美的平衡,是实时PBR的标准实践。
- 核心思想: 将菲涅尔曲线近似为在基础反射率 和掠射角的100%反射率之间进行插值。
- 公式:
- 解读:
- 该公式本质上是一个 lerp(F₀, 1.0, term)的过程。
- 是我们定义的材质基础镜面色。
- 是法线与光线方向的点积( clamped to 0),代表了入射角的余弦。
- 次方让曲线的形状更贴近真实的菲涅尔曲线——在大部分角度变化缓慢,在接近掠射角时迅速拉升。
 
- 该公式本质上是一个 
3. 材质分类与典型 值
基于 的特性,我们可以将真实世界的材质分为两大类:
a. 电介质 (Dielectrics) / 绝缘体 / 非金属
- 涵盖: 玻璃、皮肤、木材、水、塑料、石头等我们日常接触的大部分非金属物质。
-  特性:
-  值很低,通常在 0.0到0.08之间。
- 是无色的(灰度值)。因为它们的折射率在可见光谱上变化很小。
 
-  值很低,通常在 
- 对渲染的启示:
- 非金属的镜面反射是无色的。它们的颜色来自于次表面散射(即漫反射部分)。
- 对于绝大多数非金属,可以统一使用一个默认的 值:0.04。这对应 IOR 为 1.5,与许多常见材质的物理属性相符。
 
b. 金属 (Metals) / 导体
- 涵盖: 铁、铜、金、铝、银等。
-  特性:
-  值很高,通常在 0.5到1.0之间。
- 可以是彩色的。例如黄金的 偏向黄色,铜的 偏向红色。
 
-  值很高,通常在 
- 对渲染的启示:
- 金属没有漫反射颜色。光线无法透入其内部发生散射,而是被立即吸收或反射。
- 金属的视觉颜色完全由其彩色的 值(镜面反射)定义。
 
c. 半导体 (Semiconductors)
- 它们的 值介于金属和非金属之间(如硅,约为0.37)。在常规渲染中很少遇到,通常可以避免使用该范围内的 值,以保持材质的物理可信度。
4. “金属度”工作流 (The "Metalness" Workflow)
这是一种非常流行且对美术师友好的PBR参数化方案。
- 核心思想: 用一个**金属度(metalness)**参数(0.0 到 1.0 的标量)来控制材质是金属还是非金属,而不是直接让美术师去编辑 和漫反射颜色。
- 工作方式:
- 提供一个**基础颜色(Base Color)纹理和一个金属度(Metalness)**纹理/值。
- 如果 metalness = 0(非金属):-  被设为固定值(如 0.04)。
- 基础颜色被用作漫反射颜色 ()。
 
-  被设为固定值(如 
- 如果 metalness = 1(金属):- 基础颜色被用作 。
- 漫反射颜色被设为黑色(因为金属没有漫反射)。
 
 
- 优点: 直观、节省纹理空间(将两个RGB纹理合并为一个RGB和一个单通道)。
- 缺点: 无法表达某些特殊材质(如带有透明涂层的金属)。
5. 内反射 (Internal Reflection)
- 场景: 光线在透明物体内部传播,并试图从内部射出到空气中时发生的反射。
- 核心现象: 全内反射 (Total Internal Reflection)。
- 当入射角大于某个**临界角()**时,光线将无法逃逸出物体,100%被反射回物体内部。
- 这就是为什么从水下向上看水面,在某些角度会看到水面像镜子一样的原因。
 
- 应用: 主要用于渲染透明或半透明材质,如水、玻璃、宝石等。
上一节我们学习了菲涅尔效应,它像是 PBR 的“皮肤”。现在,我们将深入研究 PBR 的“骨架”——微观几何。它解释了为什么有些物体是光滑的镜面,而另一些则是粗糙的磨砂质感。
六、 微观几何 (Microgeometry) - 粗糙度的物理内涵
宏观上看起来平坦的表面,在微观尺度上其实是凹凸不平的。由于这些细节比像素还小,我们无法直接渲染它们,只能通过统计学的方式来模拟它们的集体效应。
核心观点: 物体的粗糙度(Roughness),在物理上对应的是其表面微观几何法线(microsurface normal)的混乱程度。一个 PBR 模型的核心任务之一,就是用统计分布来描述这种混乱程度,并计算其对光线的集体影响。
1. 核心概念:法线分布 (The Normal Distribution)
- 微表面 (Microfacets): 宏观表面的任何一个点,都可以看作是由无数个微小的、具有各自法线的镜面所组成的集合。
- 粗糙度 (Roughness) 的作用: 这个参数直接控制了微表面法线分布的“胖瘦”。
- 光滑表面 (Smooth Surface, Roughness ≈ 0): 微表面的法线方向高度一致,几乎都与宏观法线相同。法线分布曲线是一个高瘦的尖峰。
- 宏观效果: 产生清晰、镜面般的反射。
 
- 粗糙表面 (Rough Surface, Roughness ≈ 1): 微表面的法线方向非常混乱,朝向各个方向。法线分布曲线是一个矮胖的土堆。
- 宏观效果: 产生模糊、范围更广但更暗的反射。更暗的原因是能量守恒——同样多的入射光能被分散到了一个更大的立体角范围内,因此每个方向上的能量就变弱了。
 
 
- 光滑表面 (Smooth Surface, Roughness ≈ 0): 微表面的法线方向高度一致,几乎都与宏观法线相同。法线分布曲线是一个高瘦的尖峰。
图示解读: 书中的这组图完美展示了从宏观凹凸到微观粗糙度的过渡。当无数微小的高光(来自每个微表面)在统计上融为一体时,就形成了我们最终看到的那个宏观的、模糊的高光。
2. 各向同性 vs. 各向异性 (Isotropic vs. Anisotropic)
法线分布的形状决定了高光的形状。
- 各向同性 (Isotropic):
- 微观结构在所有方向上都是随机的,没有特定的“纹理”或“方向”。
- 法线分布是径向对称的(像一个圆形的土堆)。
- 宏观效果: 产生圆形或均匀模糊的高光(例如:塑料、陶瓷)。
 
- 各向异性 (Anisotropic):
- 微观结构具有明确的拉伸或凹槽方向。
- 法线分布是被拉伸的(像一个椭圆形的土堆)。
- 宏观效果: 产生被拉伸的、有方向性的高光(例如:拉丝金属、CD盘面、头发)。
 
3. 微观几何的自遮挡 (Self-Occlusion in Microgeometry)
微观尺度的凹凸会自己遮挡自己,这对光照结果有重要影响,尤其是在掠射角下。
- 遮蔽 (Shadowing): 部分微表面因为被其他微表面遮挡,而接收不到入射光。
- 遮挡 (Masking): 部分被照亮的微表面因为被其他微表面遮挡,而无法被相机看到。
- 核心影响:
- 随着视角越来越接近掠射角,Shadowing 和 Masking 现象会急剧增强。
- 这会衰减掠射角下的反射强度,修正了菲涅尔效应导致的物体边缘过度增亮的问题,使渲染结果更加真实。
- 在后续的微表面BRDF模型中,这一项被称为几何项 (Geometry Term, G)。
 
4. 其他重要效应 (Other Important Effects)
a. 微观相互反射 (Micro-Interreflection)
- 现象: 光线在离开表面之前,在微观几何的“沟壑”之间多次反弹。
- 对材质的影响:
- 电介质(非金属): 每次反弹光能衰减严重,影响较小,通常可以忽略。
- 金属: 每次反弹反射率很高。**这是粗糙金属“漫反射”外观的来源!**一个粗糙的金色表面看起来像黄色的磨砂漆,就是因为光线在内部多次反弹,混合了多次的颜色后,向随机方向射出,形成了类似漫反射的效果。
 
b. 逆反射 (Retroreflection)
- 影响对象: 主要影响漫反射(次表面)分量,而不是镜面反射。
- 现象: 当光源和视线方向接近时,表面会显得更亮。
- 原因: 此时,我们能看到的微表面区域,恰好也是被光照亮最多的区域。反之,当光源和视线角度很大时,我们看到的区域大多处于微观阴影中。
- 宏观效果: 使得粗糙的漫反射表面看起来更“平”,缺乏立体感。一个经典的例子就是满月,由于逆反射,它看起来像一个均匀亮的圆盘,而不是一个有明暗过渡的球体。
我们现在进入了PBR理论的核心腹地——微表面理论。这部分内容数学性较强,但它正是将前面所有概念(菲涅尔、微观几何)粘合在一起的“胶水”,形成了我们最终在代码中实现的BRDF模型的理论基础。
七、 微表面理论 (Microfacet Theory) - 搭建PBR的核心框架
微表面理论提供了一套强大的数学框架,用于描述粗糙表面的反射行为。它不是一个具体的BRDF模型,而是一个推导和构建各种BRDF模型的“配方”。
核心观点: 该理论将粗糙表面建模为由无数个微小、平坦的镜面(微表面, microfacets)所构成的集合。宏观表面的最终BRDF,是所有有效的(即被光照亮且能被相机看到的)微表面反射光线的统计性总和。
1. 微表面BRDF的三大基石 (The Three Pillars of a Microfacet BRDF)
一个完整的微表面BRDF模型,通常由三个核心函数相乘构成。在代码实现中,你会经常看到它们的身影,通常被缩写为 D、F、G。
a. 法线分布函数 (Normal Distribution Function, NDF),
- 作用: 描述表面“有多糙”。
- 物理意义: 这是一个统计学函数,回答了核心问题:“朝向任意方向 的微表面,在整个微观几何中所占的面积比例是多少?”。
- 与粗糙度的关系:
- roughness参数直接控制了NDF的形状。
- 低粗糙度 ➡ NDF呈高瘦尖峰状,意味着绝大多数微表面法线都紧密聚集在宏观法线 周围。
- 高粗糙度 ➡ NDF呈矮胖弥散状,意味着微表面法线朝向非常分散。
 
- 归一化约束: NDF必须是归一化的。用通俗的话讲,所有微表面在宏观表面方向上的投影面积之和,必须等于宏观表面自身的面积。
b. 几何函数 (Geometry Function),
- 作用: 描述微观“自遮挡”。
- 物理意义: 并非所有微表面都能对最终着色做出贡献。该函数计算的是既没被其他微表面遮挡光线(Shadowing),也没被其他微表面遮挡视线(Masking)的“有效”微表面的比例。
- 关键模型: Smith模型 (The Smith Model)
- 这是目前业界公认的、在数学上最合理且效果最准确的几何函数模型。
- 它有两种主要形式:
- 可分离形式 (Separable): 。假设Shadowing和Masking是两个独立事件。这种形式不够准确,会导致结果偏暗。
- 高度相关形式 (Height-Correlated): 这是当前推荐使用的形式。它更准确地模拟了现实,因为它考虑到微观几何中的低洼区域同时被遮蔽和遮挡的概率更高。
 
 
c. 菲涅尔项 (Fresnel Term),
- 作用: 描述“反射多少光”。
- 物理意义: 就是我们在第五节中详细讨论过的菲涅尔效应。它决定了对于一个给定的入射角,有多少比例的光能被反射,多少被折射。
- 关键区别: 在微表面模型中,菲涅尔项计算的是光线与有效微表面之间的作用,而不是与宏观表面的作用。因此,它的输入通常是入射光方向与微表面法线 (或半向量 ) 之间的夹角,而非与宏观法线 的夹角。
2. 通用微表面BRDF积分形式 (The General Microfacet BRDF Integral Form)
将以上三个基石组合起来,我们就得到了一个通用的、但非常复杂的微表面BRDF积分方程:
给工程师的说明 (Note for Engineers):
- 不要被这个积分吓到! 在实时渲染中,我们永远不会去逐像素计算这个积分。
- 这个公式的真正价值在于,它是一个理论基础和**“母版”**。
- 具体的、我们能在Shader中直接使用的BRDF模型(如下一节将要讲到的Cook-Torrance模型),都是基于这个积分,通过一系列的数学假设和简化(例如,假设微表面是完美的菲涅尔镜面),最终推导出的一个封闭形式的解析解(Closed-form Solution)。
- 理解这个积分的构成(D, G, F的作用),能让你更深刻地理解最终简化版BRDF公式中每一项的物理意义。
9.7 微表面理论 (Microfacet Theory)
核心摘要
微表面理论是构建现代PBR中镜面反射BRDF模型的基石。它不再将物体表面看作是光滑的,而是将其建模为一个由无数微小的、理想平坦的镜面(即微表面 (microfacet))组成的集合。宏观上我们观察到的粗糙表面的反射效果,正是这些朝向各异的微表面反射光线的统计学结果。
这个理论的核心就是通过几个关键的数学函数来描述微观层面的几何与光学特性,最终推导出宏观表面的BRDF。
一、理论基础与核心思想
1.1 基本假设
- 宏观表面 (Macrosurface): 我们在几何上看到的、拥有一个宏观法线 的表面。
- 微观表面 (Microsurface): 宏观表面在微观尺度下是由大量具有各自微观法线 的平坦小镜面组成的。
- 光线反射:
- 入射光线首先与微表面集合交互。
- 每个微表面自身遵循一个简单的反射模型,称为 micro-BRDF ()。
- 在实时渲染中,我们通常假设每个微表面都是一个完美的菲涅尔镜面,即它们只产生纯粹的镜面反射。
- 宏观表面的最终BRDF,是对所有有效微表面(即朝向正确且未被遮挡)反射结果的积分。
 
1.2 微表面BRDF三大核心组件
一个完整的微表面BRDF模型主要由以下三个函数(或其思想)构成:
- 法线分布函数 (NDF): 描述微表面法线的朝向分布。
- 几何遮蔽函数 (Geometry Function): 描述微表面之间的自遮挡和自阴影。
- 菲涅尔方程 (Fresnel Equation): 描述每个微表面自身的反射率。(注:本节内容未详述,但它是完整BRDF不可或缺的一部分)
二、法线分布函数 (Normal Distribution Function, NDF)
NDF,记作 ,是微表面理论中最核心的部分。
- 
核心观点: NDF从统计学上回答了这样一个问题:“在表面上任意一点,有多少比例的微表面法线 指向了某个特定的方向?” - 可以将其直观地理解为一个微观法线的直方图。
- 对于一个粗糙的表面,其法线分布会比较分散;而对于一个光滑的表面,其法线分布会高度集中在宏观法线 附近。
 
- 
关键属性与约束: NDF并不是一个任意的函数,它必须满足严格的数学约束以保证其物理有效性。 - 投影面积归一化: 将所有微表面沿宏观法线 方向投影到宏观平面上,其总面积必须等于1。这保证了微观总面积与宏观面积的一致性。
- 投影面积守恒: 从任意方向  观察,所有微表面的总投影面积,应等于宏观表面在该方向上的投影面积。
注意: 上述两个积分是在整个球体 上进行的,并且点积结果可以是负数。负值部分(来自背面的微表面)的投影会与正面微表面的投影相互抵消,从而维持等式成立。 
 
三、几何遮蔽函数 (Geometry Attenuation / Masking-Shadowing Function)
在真实的粗糙表面上,一些微表面会被其他的微表面挡住,导致光线无法到达(阴影 Shadowing)或者反射光无法进入相机(遮挡 Masking)。几何函数 G 项就是为了描述这种能量损失。
3.1 遮挡函数 (Masking Function)
- 
核心观点: 定义了法线朝向为 的微表面中,有多少比例是能够被观察方向 看到的(即未被遮挡)。 
- 
关键约束: 所有可见微表面在垂直于观察方向平面上的投影面积之和,必须等于宏观表面在该方向的投影面积。 注意: 这里的点积 被限制为正数(clamped to 0),因为我们只关心朝向相机的可见微表面。 
- 
实践中的最佳选择:Smith模型: - 经过大量研究(特别是Heitz的论文),Smith遮挡函数被证明是目前在数学上最合法、且最接近随机表面真实情况的模型。
- 其通用形式为: 其中, 是一个正指示函数(当 时为1,否则为0),而 (Lambda) 函数则依赖于具体的NDF模型。
 
3.2 联合遮挡-阴影函数 (Joint Masking-Shadowing Function)
- 
核心观点: 在BRDF计算中,我们需要考虑一个微表面同时对光源可见(不被shadowing)且对相机可见(不被masking) 的概率。这个联合概率由 描述。 
- 
的不同形式: - 
可分离形式 (Separable Form): - 假设: 遮挡和阴影是两个不相关的独立事件。
- 缺点: 这个假设在现实中不成立,尤其当视线和光线方向接近时,相关性很强。这会导致BRDF结果偏暗,能量损失过大。
 
- 
高度相关的Smith形式 (Height-Correlated Smith Form): - 核心思想: 遮挡和阴影都与微表面在高度场中的相对高度有关,它们是强相关的。此模型精确地解释了这种相关性。
- 公式:
- 结论: Heitz推荐使用此形式。它的计算开销与可分离形式相近,但准确度更高,是目前工业界和学术界最广泛使用的形式。
 
 
- 
四、完整的微表面BRDF积分方程
综合以上组件,我们可以得到宏观表面的BRDF积分形式:
- 
方程解读: - : 单个微表面的反射行为。
- : 权重项,描述了具有法线 的微表面有多少。
- : 权重项,描述了这些微表面有多少是“有效”的(同时对光和相机可见)。
- 分母中的 和 是从微观投影面积到宏观投影面积的转换因子。
 
- 
实践应用: 在实时渲染中,我们不会直接计算这个积分。而是基于特定的NDF、G函数以及菲涅尔项,预先推导出一个解析解(或近似解),形成我们最终在着色器中使用的BRDF模型(例如Cook-Torrance模型)。 
- 
重要局限性: - 此框架推导出的所有BRDF模型都忽略了微表面之间的相互反射 (interreflection)。
- 这意味着光线在微观“沟壑”中多次反弹的情况被忽略了。
- 这会导致模型在高粗糙度下显得比真实情况更暗,尤其是在金属材质上。后续章节会讨论如何补偿这部分丢失的能量。
 
这一节是微表面理论在实践中的具体应用,讲解了如何从上一节的积分理论推导出我们实际在着色器中使用的镜面BRDF公式,并深入探讨了其中最关键的组件——法线分布函数 (NDF)。
9.8 表面反射的BRDF模型
核心摘要
本节的核心任务是将上一节复杂的微表面积分理论,转化为一个可以直接用于渲染的、高效的解析公式。这个转变的关键在于引入了半向量 (half vector) 的概念。基于此,我们得到了著名的 Cook-Torrance 风格的镜面BRDF方程。随后,本节深入剖析了该方程中对高光形状起决定性作用的法线分布函数 (NDF),详细对比了包括 Beckmann、Blinn-Phong 和当今业界主流的 GGX 在内的多种模型,并探讨了如何将它们扩展到各向异性表面,最后提出了一个补偿微表面间多次光线反弹能量损失的实用方案。
一、从积分到解析解:镜面反射BRDF的核心简化
1.1 关键概念:半向量 (Half Vector)
- 核心观点: 在镜面反射模型中,我们假设每个微表面都是一个完美的微型镜子。对于给定的入射光方向 和观察方向 ,只有那些法线 恰好等于 和 的角平分线方向的微表面,才能将光线反射到观察者眼中。这个特殊的角平分线方向就是半向量 (half vector),记作 。
- 计算公式:
1.2 Cook-Torrance 镜面BRDF方程
- 核心思想: 由于只有法线为 的微表面有贡献,上一节(9.7)中的复杂积分可以被简化为在 这一点上的求值。这极大地降低了计算复杂度,得到了实时渲染中广泛使用的镜面BRDF解析形式:
- 公式直观解读:
- : 法线分布函数。评估有多少微表面的法线恰好对齐到了半向量 。这是决定高光形状和大小的核心。
- : 几何遮蔽函数。评估那些对齐到半向量 的微表面中,有多少比例是同时对光源和相机都可见的。
- : 菲涅尔函数。评估每个有效的微表面反射了多少比例的光能。注意,这里是用半向量 来计算菲涅尔项。
- 分母 : 归一化因子。这是一个校正项,用于补偿从微观几何到宏观几何投影过程中的能量密度变化。
 
二、法线分布函数 (NDF) 详解
NDF 直接控制了高光的形状、大小和边缘的锐利程度,是决定材质“粗糙感”的关键。
2.1 各向同性 (Isotropic) NDF
这类NDF的形状关于宏观法线 旋转对称,其粗糙度在所有方向上都是一致的。
- 
Beckmann 分布: - 特点: 历史悠久,源于光学界,是Cook-Torrance最初使用的NDF。其高光衰减比较快,边缘较为锐利。
- 关键属性: 它是形状不变的 (shape-invariant)。这意味着改变其粗糙度参数,等效于在几何上拉伸或缩放微表面,这个优良特性使得推导其函数和各向异性版本变得简单。
 
- 
Blinn-Phong 分布: - 特点: 是对经典Phong光照模型的物理化改造,计算非常廉价,适用于移动端等算力受限的平台。
- 缺点: 物理精度不如其他模型,且不是形状不变的。
 
- 
GGX (Trowbridge-Reitz) 分布: - 特点: 这是当前电影和游戏行业中最主流、最常用的NDF。它的关键优势在于其更长的“拖尾” (long tail)。相比Beckmann,GGX的峰值更尖锐,但向外的衰减更缓慢,这能在高光核心周围产生一层非常自然的微光 (glow) 或朦胧感 (haze),更符合真实世界中许多材质的表现。
- 公式: 其中 是粗糙度参数,通常由一个范围在 [0, 1] 的用户参数 通过 映射而来,以获得更线性的感知变化。
- 关键属性: GGX同样是形状不变的。
- 实践优化: 由于GGX与Smith 函数的组合非常普遍,已经有许多高效的近似公式(如方程9.45)被提出,以进一步降低着色器的计算开销。
 
- 
更高级的NDF: - GTR (Generalized Trowbridge-Reitz): 引入额外参数来控制拖尾的形状,提供更强的艺术控制力,但推导和计算更复杂。
- 多波瓣NDF (Multi-Lobe NDF): 通过混合两个或多个NDF(如两个GGX波瓣),可以更精确地匹配某些复杂材质的测量数据。
 
2.2 各向异性 (Anisotropic) NDF
用于模拟那些在不同方向上具有不同粗糙度的材质,例如拉丝金属、木纹、头发丝等。
- 核心思想: 将各向同性的粗糙度参数 拆分为沿着切线 (tangent) 和副切线 (bitangent) 方向的两个独立粗糙度参数 和 。
- 实现方法:
- 需要一个定义了各向异性方向的切线空间 (Tangent Space)。当与法线贴图结合使用时,必须确保切线和副切线也随法线一起被正确地变换(例如使用Gram-Schmidt正交化)。
- 对于形状不变的各向同性NDF,存在一个通用方法可以将其轻松扩展为各向异性版本。例如,各向异性GGX的公式为:
 
三、补偿能量损失:多次反弹的表面反射
- 
问题: 标准的微表面BRDF模型忽略了光线在微表面之间多次反射(interreflection)的情况。这种简化会导致能量损失,使得粗糙的金属看起来比真实情况更暗、饱和度更低。 
- 
解决方案: Imageworks 提出了一种实用的补偿方法,即在原BRDF的基础上,额外增加一个模拟多次反弹的项 。 - 核心思想: 这个附加项 是一个基于材质定向反照率 (directional albedo) 和平均菲涅尔项的解析模型。
- 实现: 该方法依赖于预计算。将定向反照率(一个依赖于粗糙度和视线角度的函数)的结果存储在一个小型的二维查找纹理 (2D LUT) 中。在运行时,通过查表和一些简单的计算来获得 的值,并将其加到最终的着色结果上。
- 效果: 这种方法能有效地补偿损失的能量,让粗糙金属看起来更亮、颜色更饱和,显著提升了真实感,而增加的性能开销很小。
 
这一节内容非常关键,它探讨的是 PBR 中与镜面反射(Specular)相对应的另一半——漫反射(Diffuse),或者更物理地说,是次表面散射(Subsurface Scattering)。我将为你梳理其核心概念、关键模型以及在实践中如何选择和应用它们。
9.9 次表面散射的BRDF模型
核心摘要
本节聚焦于不透明电介质(dielectrics)材质的局部次表面散射现象,也就是我们常说的漫反射(diffuse reflection)。核心内容包括:
- 次表面反照率 ():即“漫反射颜色”,它的物理含义、合理的取值范围以及与“镜面颜色”() 的区别。
- 一个关键的判定准则:何时应该使用“光滑表面”的漫反射模型,何时又该用“粗糙表面”的模型?答案取决于表面微观几何尺度与光线次表面散射距离的相对大小。
- 两大类漫反射模型:分别介绍了适用于两种不同情况的光滑表面模型(如 Lambertian 及其能量守恒改进版)和粗糙表面模型(如著名的 Disney Diffuse 和基于微表面理论的 Oren-Nayar 等)。
一、漫反射的“颜色”:次表面反照率 ()
- 
核心观点: 漫反射颜色,物理上称为次表面反照率 (subsurface albedo),描述的是进入物体内部的光线,经过内部散射和吸收后,最终有多少比例的能量能逃逸出表面。它是材质的固有属性。 
- 
关键术语与特性: - 漫反射颜色 vs. 镜面颜色:
- 漫反射颜色 (): 由光线在物体内部的散射和吸收共同决定。例如,红色塑料的是红色的,因为内部颜料吸收了其他颜色的光。
- 镜面颜色 (): 由光线在物体表面的菲涅尔反射决定。对于电介质,镜面反射光通常是无色的(白色)。这就是为什么我们能在红色塑料球上看到白色高光。
 
- 物理现象解读:
- 泡沫为何是白色?:搅动液体产生大量气泡,极大地增加了光线在内部的散射次数,使得大部分光在被吸收前就散射出来了,因此反照率很高,呈现亮白色。
- 物体湿了为何变暗?:水填充了多孔材质的空气缝隙。由于水的折射率比空气更接近材质本身,内部散射作用减弱,光线需要走更长的路才能出来,导致更多能量被吸收,反照率降低,颜色变暗。
 
- 实践中的常见误区:
- 误区: “真实感材质的漫反射颜色值不应低于某个下限(如 sRGB 的 30-50)”。
- 真相: 这个说法是错误的。它所依据的测量数据包含了镜面反射,因此偏高。物理上完全可能存在反照率极低的材质,例如某些黑色涂料的 可以低至 sRGB 的 11 左右。
 
- 艺术家指南: 在设置漫反射颜色时,应避免使用过于饱和且明亮的颜色。这些颜色在物理上通常是不可能的,不仅会降低真实感,还可能在全局光照计算中导致能量过度反射,产生“颜色溢出”问题。
 
- 漫反射颜色 vs. 镜面颜色:
二、关键问题:选择光滑还是粗糙的漫反射模型?
这是一个非常核心且容易被误解的概念。选择哪种模型,不直接取决于你为镜面反射设置的粗糙度,而是取决于一个更深层的物理关系。
- 
核心判定准则: 比较表面不规则性(微观几何)的尺度与光线在介质内部的次表面散射距离。 
- 
三种情况: - 
微观几何尺度 > 散射距离: - 物理图像: 光线进入表面后,很快就被散射出来,其路径被微观的几何结构显著影响。
- 现象: 会产生逆反射 (retro-reflection) 等与粗糙表面相关的效果(如满月时月亮整体非常亮)。
- 模型选择: 应使用粗糙表面的漫反射模型(如 Disney Diffuse, Oren-Nayar)。
 
- 
微观几何尺度 < 散射距离: - 物理图像: 光线进入表面后,传播了很长一段距离才出来,其路径早已“忘记”了表面的微小起伏。对于次表面散射过程而言,这个表面可以看作是平坦的。
- 模型选择: 应使用光滑表面的漫反射模型(如 Lambertian, Kelemen-Szirmay-Kalos)。
 
- 
混合尺度: - 物理图像: 表面同时存在大于和小于散射距离的两种尺度的粗糙度。
- 模型选择: 此时镜面反射和漫反射应该使用不同的粗糙度值。
- 镜面粗糙度: 使用描述所有微观几何的完整粗糙度值。
- 漫反射粗糙度: 使用一个更低的粗糙度值,因为它只受那些大于散射距离的宏观起伏影响。
 
 
 
- 
三、光滑表面的次表面模型
适用于微观几何尺度小于散射距离的材质。
3.1 Lambertian 模型 (基础)
- 核心观点: 最简单、最经典的模型。假设光线向所有方向均匀散射。
- 公式:
- 缺点: 不考虑能量守恒。它没有减去在表面被镜面反射掉的能量。
3.2 能量守恒的改进模型
- 核心观点: 为了保证物理正确性,必须在镜面反射和漫反射之间进行能量权衡。即:被镜面反射的能量,不能再参与次表面散射。
- 简单改进: 将 Lambertian 项乘以 ,其中 是菲涅尔项。
- Kelemen-Szirmay-Kalos 模型 (高级):
- 特点: 一个更精确的、满足亥姆霍兹互易性且能量守恒的耦合模型。
- 公式:
- 解读: 这里的 是完整镜面BRDF的定向反照率,它综合了粗糙度、菲涅尔值等所有影响。在实践中,通常通过预计算的查找表 (LUT) 来获取 的值。
 
四、粗糙表面的次表面模型
适用于微观几何尺度大于散射距离的材质。
- 
Disney 漫反射模型: - 特点: 业界广泛应用,是迪士尼原则性BRDF的一部分。它并非严格基于物理推导,而是一个效果出色、艺术可控的经验模型。
- 核心思想: 它混合了多个项,旨在模拟粗糙表面的视觉特征,例如在掠射角下边缘变亮,以及轻微的逆反射效果。
- 公式: (形式较为复杂,核心是混合了多个经验函数)
 
- 
基于微表面理论的模型: - Oren-Nayar 模型: 经典理论模型,它将微表面理论应用于漫反射,使用 Lambertian 作为 micro-BRDF,能够很好地模拟逆反射等现象。
- Hammon 模型: 一个更现代的模型,它将GGX NDF和Smith几何遮蔽函数应用于漫反射,并考虑了微表面间的相互反射,理论基础更扎实,与现代镜面模型框架统一。
 
最终总结与实践建议
- 尽管存在许多高级模型,但简单的 Lambertian 模型因其极低的计算成本和与预计算光照(如Lightmap)的良好兼容性,至今仍在许多实时渲染应用中被广泛使用。
- 对于追求高真实感的项目,从 Lambertian 升级到能量守恒的耦合模型(如 Kelemen-Szirmay-Kalos)或Disney Diffuse 是提升物理正确性和视觉效果的关键一步。
- 在选择模型时,理解尺度相对性的原则(9.9.2节)比盲目追求复杂模型更为重要。
这两节内容探讨的是 PBR 中更专门化和前沿的领域:如何模拟布料这种特殊材质,以及当物体表面结构小到光的波长尺度时,如何引入波动光学来解释更复杂的现象。我将为你提炼其中的精华。
9.10 & 9.11 特殊BRDF模型
核心摘要
这两节内容从常规的硬表面材质模型,转向了两种更特殊的物理现象。
- 
9.10 布料 (Cloth) BRDF: 探讨了为何布料需要专门的着色模型。其独特的编织微观结构和纤维形态导致了普通 PBR 模型难以捕捉的视觉效果,如天鹅绒般的边缘光和各向异性高光。本节介绍了三大类布料模型:经验模型、微表面模型和微圆柱体模型。 
- 
9.11 波动光学 (Wave Optics) BRDF: 突破了传统基于几何光学(光是射线)的局限,探讨了当表面结构进入纳米尺度 (nanogeometry) 时,光的波动性所引发的衍射 (diffraction) 和薄膜干涉 (thin-film interference) 现象。这些现象能产生彩虹色 (iridescence),并且不仅仅是特殊特效,它们为许多普通材质增添了微妙而关键的真实感。 
9.10 布料的BRDF模型
核心观点
布料的渲染之所以复杂,是因为其独特的微观结构(交错的纱线、突出的纤维)产生了独特的视觉现象,需要专门的BRDF来模拟。一个优秀的布料着色方案,通常是“特制BRDF + 高频细节纹理”的组合。
9.10.1 经验布料模型 (Empirical Models)
这类模型不严格追求物理推导,而是通过观察和经验构建公式来重现特定的视觉效果,通常计算成本较低。
- 核心思想: 直接用数学函数模拟布料的视觉特征,例如边缘变亮的效果。
- 关键模型:Disney 光泽项 (Sheen Term):
- 目标: 模拟布料边缘(特别是天鹅绒、丝绒类)由于微小纤维散射而产生的柔和、明亮的边缘光,也称为粗糙散射 (asperity scattering)。
- 实现: 它是一个附加的BRDF项,其亮度随着视角接近掠射角(grazing angles)而增强。
- 公式:
解读: 公式的核心是 。当视线和光线接近掠射角时,半向量 与光线 的夹角会变大,点积变小,导致整个项的值增大,从而在边缘产生更强的光泽效果。 
 
9.10.2 微表面布料模型 (Microfacet Models)
这类模型将标准的微表面理论进行改造,以适应布料的特性。
- 核心思想: 使用一种特殊的法线分布函数 (NDF) 来模拟布料的反射行为。
- 关键技术:逆NDF (Inverse NDFs):
- 标准NDF: 对于硬表面,其NDF在宏观法线方向()达到峰值,模拟的是平整表面的高光。
- 逆NDF: 用于模拟天鹅绒等材质时,其NDF的峰值出现在掠射角方向()。这物理上对应于大量纤维垂直于表面,它们在掠射角时更容易将光反射到相机中,从而形成明亮的轮廓光。
- 代表模型: 《教团:1886》和 Imageworks 都使用了基于这种思想的布料/光泽模型。
 
9.10.3 微圆柱体布料模型 (Micro-cylinder Models)
这类模型从一个更符合布料物理形态的假设出发。
- 核心思想: 不再将表面看作是微小平面(microfacet)的集合,而是看作被无数根微小的**圆柱体(即纤维、纱线)**所覆盖。
- 关键联系:头发渲染: 这种建模方式与头发渲染的原理高度相似(如 Kajiya-Kay 模型)。因此,许多用于头发的着色模型也可以被迁移或改造用于布料渲染。
- 优点: 这种模型天然地适合模拟丝绸、缎面等由清晰纱线构成的织物所产生的各向异性高光。通过控制圆柱体的方向(例如使用切线图),可以创造出逼真的拉丝和编织效果。
9.11 波动光学的BRDF模型
核心观点
当表面细节的尺度小到可以与光的波长(约400-700纳米)相比拟时,基于“光是直线传播”的几何光学便会失效。此时必须引入波动光学 (Wave Optics) 来解释衍射和薄膜干涉等现象,这些现象为材质带来了微妙且真实的色彩变化。
9.11.1 衍射模型 (Diffraction Models)
- 核心原理:惠更斯-菲涅尔原理 (Huygens-Fresnel principle)
- 简单解读: 光波在传播时,波前的每一点都可以看作是一个新的子波源。当光波遇到障碍物(如纳米尺度的划痕边缘)时,它会**“绕过”障碍物的边缘**发生弯曲,而不是像射线一样被完全挡住。
 
- 视觉效果:
- 色散 (Dispersion): 衍射的程度与光的波长有关,不同颜色的光会向不同角度弯曲,从而产生彩虹色。
- 应用: 最典型的例子是 CD/DVD 光盘表面的彩虹色,这是光在光盘密集的轨道上发生衍射造成的。
 
- 关键启示: 衍射并非只存在于CD这样的特殊物体上。最新研究表明,许多普通材质的表面都存在显著的衍射效应,这也是为什么标准微表面模型有时难以完美匹配测量数据的原因之一。
9.11.2 薄膜干涉模型 (Thin-film Interference Models)
- 
核心原理: 当光线照射到一个极薄的透明薄膜上时(如肥皂泡、水面上的油渍),光会分别从薄膜的顶层表面和底层表面反射。这两束反射光由于光程差,会发生干涉。 
- 
视觉效果: - 相长干涉与相消干涉: 对于某些波长(颜色),两束光波峰对波峰,能量增强(相长干涉);对于另一些波长,波峰对波谷,能量抵消(相消干涉)。
- 动态彩虹色: 干涉效果取决于薄膜厚度、观察角度和光的波长,因此会产生随视角变化的、流动的彩虹色。
 
- 
关键启示与实践: - 为何要“薄”膜?: 这种现象依赖于光的相干长度 (coherence length)。对于普通白光,这个长度大约只有1微米。只有当薄膜厚度在这个量级或更薄时,才能观察到明显的干涉。
- 不仅仅是特效: 像衍射一样,薄膜干涉也普遍存在于许多常见材质中(如昆虫翅膀、某些金属氧化层、甚至皮革表面的涂层),它为高光增添了微妙的色彩变化,是提升渲染真实感的重要手段。
- 实时渲染: 可以通过预计算的查找表 (LUT) 来高效地模拟薄膜干涉,这使得在游戏中实现此类效果成为可能。
 
这两节内容涵盖了在实际游戏和电影制作中极为重要的工程实践:如何组合和处理材质以应对复杂的表面和渲染中的常见问题。我将为你提炼出其中的核心知识点。
9.12 & 9.13 材质的组合与处理
核心摘要
这两节内容从单一材质模型转向了更贴近现实制作流程的复杂场景。
- 
9.12 分层材质 (Layered Materials): 探讨了如何模拟由多层不同材质堆叠而成的表面,例如涂了清漆的木材或覆冰的岩石。核心是透明涂层 (Clear Coat) 模型,它能模拟出具有深度感的二次反射效果。 
- 
9.13 混合与过滤材质 (Blending and Filtering): 解决了两个关键的工程问题。 - 材质混合: 如何在同一个表面上组合多种材质(如金属和铁锈)。
- 材质过滤: 如何正确地对包含复杂PBR参数(特别是法线和粗糙度)的纹理进行 mipmapping,以避免高光锯齿 (specular aliasing) 等严重视觉瑕疵。方差映射 (Variance Mapping) 是解决此问题的关键技术。
 
9.12 分层材质 (Layered Materials)
核心观点
现实世界中的表面 rarely are monolithic. 它们常常是多层材质的叠加。在 PBR 中模拟这种分层结构,尤其是透明涂层,可以极大地提升材质的质感和真实感。
9.12.1 透明涂层 (Clear Coat) 模型
这是分层材质中最常见也最重要的一种。想象一下汽车漆、上了清漆的木吉他或碳纤维部件。
- 关键视觉效果: 二次反射 (Secondary Reflection)。光线不仅会从顶部的透明涂层反射,还会穿透涂层,从下方的基底材质反射回来,再穿透涂层进入相机。这就创造了两层独立的高光,赋予材质丰富的层次感和深度。
- 实现要点:
- 两层反射: BRDF需要计算两次镜面反射。一次是来自顶层涂层的(通常是光滑、无色的电介质反射),另一次是来自基底材质的(可以是金属或任何其他材质)。
- 能量衰减: 从基底反射的光线在进出涂层时会发生能量衰减(菲涅尔透射)。
 
- 高级特性:
- 带色涂层 (Colored Coats): 如果涂层本身有颜色,光线穿过的路径越长(例如在掠射角下),吸收就越多,颜色就越深。这符合比尔-朗伯定律 (Beer-Lambert Law)。
- 逐层独立法线 (Separate Normals per Layer): 允许顶层和基底拥有不同的法线贴图。例如,模拟一层光滑的冰覆盖在崎岖的岩石上,或者皱巴巴的保鲜膜包裹着一个盒子。
- 层间多次反弹 (Inter-layer Bounces): 更精确的模型会考虑光线在涂层和基底之间多次来回反射,但这在实时渲染中通常过于昂贵。
 
- 业界标杆: 游戏《使命召唤:无限战争》中的分层材质系统是一个强大的实时实现范例,它支持多层叠加、逐层法线、折射和散射等高级特性。
9.13 混合和过滤材质 (Blending and Filtering)
9.13.1 材质混合 (Material Blending)
- 核心观点: 通过蒙版纹理(Mask Texture)在空间上组合多种材质的 PBR 参数(如反照率、金属度、粗糙度、法线等)。
- 关键权衡:性能 vs. 精度:
- 精确方法(慢): 分别计算每种材质的最终着色结果,然后根据蒙版混合这些颜色值。
- 近似方法(快): 先根据蒙版混合各种材质参数(如粗糙度、颜色),然后只执行一次着色计算。
 
- 实践: 对于漫反射颜色这类线性参数,快速方法几乎没有误差。但对于像粗糙度这样的高度非线性参数,混合参数会导致不正确的结果。然而,在过渡区域的微小瑕疵通常在视觉上可以接受,因此这种快速方法在业界被广泛采用。
9.13.2 材质过滤 (Material Filtering) 与高光抗锯齿
这是实时渲染中一个至关重要且极其技术性的问题。
- 
核心问题: 当我们为纹理生成 mipmap 时,GPU 会对纹素进行线性平均。这种做法对于颜色贴图是正确的,但对于法线 (Normal) 和粗糙度 (Roughness) 等非线性数据则是完全错误的,会导致严重的视觉瑕疵,最常见的就是高光锯齿 (Specular Aliasing) 或“闪烁高光 (shimmering highlights)”。 
- 
根本原因:尺度转换的物理学 - 核心思想: 随着观察距离增加,原本在屏幕上占据多个像素的几何细节(由法线贴图定义),应该平滑地过渡为亚像素的统计细节(由BRDF的粗糙度定义)。
- 错误的做法: 单独对法线和粗糙度进行 mipmapping。平均法线会使法线分布的方差 (variance) 减小,导致远处的物体看起来过于光滑和闪亮,丢失了原有的表面质感。
 
- 
正确的思路:过滤法线分布,而非参数本身 - 目标: 在生成低分辨率 mip 时,必须保持法线分布的总方差。
- 补偿原则: 因平均法线而丢失的方差,必须被补偿到低分辨率 mip 的粗糙度值中去。即:更模糊的法线贴图 mip 对应更高的粗糙度 mip。
 
- 
主流解决方案: - 
Toksvig 方法: - 原理: 通过计算平均后(未归一化)的法线向量的长度来估算法线分布的方差。平均后的法线越短,说明原始法线方向越分散(方差越大)。
- 公式示例 (Blinn-Phong):
- 优缺点: 适用于动态生成的法线(如水面),但与需要单位长度法线的法线贴图压缩算法不兼容。
 
- 
方差映射 (Variance Mapping): - 特点: 业界主流的静态纹理解决方案。
- 原理: 在预处理阶段(生成 mipmap 时),精确计算每个 mip level 因法线平均化而损失的方差。
- 实现: 将计算出的法线方差,与原始粗糙度贴图的方差相结合,生成一个新的、修正过的粗糙度值,并存储在粗糙度贴图的对应 mip level 中。
- 优点: 兼容法线贴图压缩,效果稳健,将复杂计算放在预处理阶段,运行时开销极小。
 
- 
其他技术: LEAN/CLEAN 映射是更通用的方法,但存储开销大。此外,还需要考虑物体本身的几何曲率对法线方差的贡献。 
 
- 
- 
进阶问题:“闪闪发光”的材质 (Sparkly Materials): 对于雪地或某些金属漆,其表面在亚像素级别并非平滑分布,而是由少数几个高光点组成。使用方差映射会将其模糊成一个平滑的高光,失去闪烁的细节。模拟这种现象需要更高级的、基于统计学或过程化噪声的技术。