微表面理论把小于像素的微几何建模为大量平坦微面元,用法线分布函数 (NDF) D ( m ) D(\mathbf{m}) D ( m ) 描述其朝向统计,用遮蔽函数 G 1 G_1 G 1 和遮蔽-阴影函数 G 2 G_2 G 2 描述可见性,并据此推导宏观 BRDF。镜面反射时每个微面元是完美菲涅耳镜,积分退化为在半向量处求值,得到 F G 2 D / ( 4 ∣ n ⋅ l ∣ ∣ n ⋅ v ∣ ) FG_2D/(4|\mathbf{n}\cdot\mathbf{l}||\mathbf{n}\cdot\mathbf{v}|) F G 2 D / ( 4∣ n ⋅ l ∣∣ n ⋅ v ∣ ) 。GGX 分布配合高度相关的 Smith G 2 G_2 G 2 是当今影视和游戏最常用的组合;该框架忽略微面元间的多次反射,可用补偿项弥补。本页对应 RTR4 9.6–9.8 节。
微几何的效应 (9.6)
微几何法线的分布通常连续,在宏观法线处有强峰;粗糙度越大分布越分散,反射的环境细节越模糊,小亮光源的高光越宽越暗(能量分散到更宽的方向锥)。
许多微小高光的统计规律最终变成聚合高光的形状细节(例如外围稀疏的小高光变成聚合高光边缘较暗)。
多数表面的微法线分布各向同性 ;拉丝金属等各向异性 表面会产生方向性模糊。织物(天鹅绒、缎)微结构高度规则,需专门模型(见布料着色 )。
阴影 (微几何遮挡光源)和遮蔽 (遮挡视线):若微几何高度与法线相关(如凸起处被磨光而低处粗糙),掠射时低处被遮挡,表面实际变得更光滑。入射角越大,不规则的可见尺寸越小,极端掠射时可小于波长而"消失";与菲涅耳效应共同使表面在接近 90° 时显得高反射、像镜子(卷纸筒实验)。
被遮挡的光会在微几何间相互反射 。电介质中因每次反弹被菲涅耳衰减而很弱;金属没有次表面散射,多次反弹是其任何可见漫反射的来源,且有色金属的多次反射颜色更深。
若微几何不规则大于次表面散射距离,阴影与遮蔽会造成逆反射 (光偏向原方向返回),使粗糙表面显得扁平(见漫反射与次表面 BRDF )。
法线分布函数与可见性 (9.7)
光学界最先提出,1977 年 Blinn、1981 年 Cook 与 Torrance 引入图形学。每个微面元有法线 m \mathbf{m} m ,按微 BRDF f μ ( l , v , m ) f_\mu(\mathbf{l},\mathbf{v},\mathbf{m}) f μ ( l , v , m ) 反射;通常取完美菲涅耳镜,也有漫反射微 BRDF(局部次表面模型)和衍射微 BRDF。
NDF 归一化:微表面投影到宏观平面的面积等于宏观面积(约定为 1),且向任意视线垂直平面的投影相等:
∫ m ∈ Θ D ( m ) ( n ⋅ m ) d m = 1 , ∫ m ∈ Θ D ( m ) ( v ⋅ m ) d m = v ⋅ n \int_{\mathbf{m}\in\Theta}D(\mathbf{m})(\mathbf{n}\cdot\mathbf{m})\,d\mathbf{m}=1,\qquad\int_{\mathbf{m}\in\Theta}D(\mathbf{m})(\mathbf{v}\cdot\mathbf{m})\,d\mathbf{m}=\mathbf{v}\cdot\mathbf{n} ∫ m ∈ Θ D ( m ) ( n ⋅ m ) d m = 1 , ∫ m ∈ Θ D ( m ) ( v ⋅ m ) d m = v ⋅ n
积分在整个球面 Θ \Theta Θ 上,点积不钳制(背向面元的负投影抵消重叠部分)。图形学中的微结构大多是高度场,Ω \Omega Ω 之外 D = 0 D=0 D = 0 。直观上 NDF 像微法线的直方图。
遮蔽函数 G 1 ( m , v ) G_1(\mathbf{m},\mathbf{v}) G 1 ( m , v ) :法线为 m \mathbf{m} m 的面元沿 v \mathbf{v} v 可见的比例。可见面元的投影面积之和等于宏观投影面积:∫ Θ G 1 ( m , v ) D ( m ) ( v ⋅ m ) + d m = v ⋅ n \int_{\Theta}G_1(\mathbf{m},\mathbf{v})D(\mathbf{m})(\mathbf{v}\cdot\mathbf{m})^+d\mathbf{m}=\mathbf{v}\cdot\mathbf{n} ∫ Θ G 1 ( m , v ) D ( m ) ( v ⋅ m ) + d m = v ⋅ n 。G 1 D G_1D G 1 D 称可见法线分布 。该约束不能唯一确定 G 1 G_1 G 1 ,因为 D D D 不描述面元的排列。
Heitz 证明文献中只有 Smith 函数和 Torrance-Sparrow "V 形腔"满足上述约束,且 Smith 更接近随机微表面;Smith 还是唯一同时满足约束并具有法线-遮蔽无关性 (面元不背向时 G 1 G_1 G 1 与 m \mathbf{m} m 的方向无关)的函数:
G 1 ( m , v ) = χ + ( m ⋅ v ) 1 + Λ ( v ) G_1(\mathbf{m},\mathbf{v})=\frac{\chi^+(\mathbf{m}\cdot\mathbf{v})}{1+\Lambda(\mathbf{v})} G 1 ( m , v ) = 1 + Λ ( v ) χ + ( m ⋅ v )
χ + ( x ) \chi^+(x) χ + ( x ) 在 x > 0 x>0 x > 0 时为 1,否则为 0;Λ \Lambda Λ 依 NDF 而定。Smith 的缺点:其要求与真实表面结构不一致,甚至可能物理上无法实现;对法线与遮蔽强相关、尤其有重复结构(如多数织物)的表面精度下降。但在更好的方案出现前,它是大多数渲染应用的最佳选择。
宏观 BRDF:
f ( l , v ) = ∫ m ∈ Ω f μ ( l , v , m ) G 2 ( l , v , m ) D ( m ) ( m ⋅ l ) + ∣ n ⋅ l ∣ ( m ⋅ v ) + ∣ n ⋅ v ∣ d m f(\mathbf{l},\mathbf{v})=\int_{\mathbf{m}\in\Omega}f_\mu(\mathbf{l},\mathbf{v},\mathbf{m})\,G_2(\mathbf{l},\mathbf{v},\mathbf{m})\,D(\mathbf{m})\frac{(\mathbf{m}\cdot\mathbf{l})^+}{|\mathbf{n}\cdot\mathbf{l}|}\frac{(\mathbf{m}\cdot\mathbf{v})^+}{|\mathbf{n}\cdot\mathbf{v}|}\,d\mathbf{m} f ( l , v ) = ∫ m ∈ Ω f μ ( l , v , m ) G 2 ( l , v , m ) D ( m ) ∣ n ⋅ l ∣ ( m ⋅ l ) + ∣ n ⋅ v ∣ ( m ⋅ v ) + d m
G 2 G_2 G 2 计入遮蔽与阴影,但不计面元间相互反射,因此所有由此导出的 BRDF 都偏暗。
遮蔽-阴影函数 G 2 G_2 G 2 的形式
形式 公式 / 思路 评价 可分离 G 2 = G 1 ( v , m ) G 1 ( l , m ) G_2=G_1(\mathbf{v},\mathbf{m})G_1(\mathbf{l},\mathbf{m}) G 2 = G 1 ( v , m ) G 1 ( l , m ) 假设遮蔽与阴影不相关,导致过暗;l = v \mathbf{l}=\mathbf{v} l = v 时应为 G 1 G_1 G 1 却得到 G 1 2 G_1^2 G 1 2 方向相关 λ ( ϕ ) G 1 G 1 + ( 1 − λ ( ϕ ) ) min ( G 1 ( v ) , G 1 ( l ) ) \lambda(\phi)G_1G_1+(1-\lambda(\phi))\min(G_1(\mathbf{v}),G_1(\mathbf{l})) λ ( ϕ ) G 1 G 1 + ( 1 − λ ( ϕ )) min ( G 1 ( v ) , G 1 ( l )) 高度场在相对方位角 ϕ = 0 \phi=0 ϕ = 0 时应取 min;Ashikhmin:λ = 1 − e − 7.3 ϕ 2 \lambda=1-e^{-7.3\phi^2} λ = 1 − e − 7.3 ϕ 2 ;van Ginneken:λ = 4.41 ϕ 4.41 ϕ + 1 \lambda=\frac{4.41\phi}{4.41\phi+1} λ = 4.41 ϕ + 1 4.41 ϕ 高度相关 Smith G 2 = χ + ( m ⋅ v ) χ + ( m ⋅ l ) 1 + Λ ( v ) + Λ ( l ) G_2=\dfrac{\chi^+(\mathbf{m}\cdot\mathbf{v})\chi^+(\mathbf{m}\cdot\mathbf{l})}{1+\Lambda(\mathbf{v})+\Lambda(\mathbf{l})} G 2 = 1 + Λ ( v ) + Λ ( l ) χ + ( m ⋅ v ) χ + ( m ⋅ l ) 低处的点更容易同时被遮蔽和阴影;Heitz 推荐,代价与可分离相近而更准确,实践中最常用 方向与高度相关 分母为 1 + max ( Λ ( v ) , Λ ( l ) ) + λ ( v , l ) min ( Λ ( v ) , Λ ( l ) ) 1+\max(\Lambda(\mathbf{v}),\Lambda(\mathbf{l}))+\lambda(\mathbf{v},\mathbf{l})\min(\Lambda(\mathbf{v}),\Lambda(\mathbf{l})) 1 + max ( Λ ( v ) , Λ ( l )) + λ ( v , l ) min ( Λ ( v ) , Λ ( l )) λ \lambda λ 可用经验函数或针对 NDF 推导
也有实践者使用可分离形式。
镜面微表面 BRDF (9.8)
完美镜面面元只在 m \mathbf{m} m 等于半向量 h = l + v ∥ l + v ∥ \mathbf{h}=\frac{\mathbf{l}+\mathbf{v}}{\|\mathbf{l}+\mathbf{v}\|} h = ∥ l + v ∥ l + v 时非零,积分退化为:
f spec ( l , v ) = F ( h , l ) G 2 ( l , v , h ) D ( h ) 4 ∣ n ⋅ l ∣ ∣ n ⋅ v ∣ f_{\text{spec}}(\mathbf{l},\mathbf{v})=\frac{F(\mathbf{h},\mathbf{l})\,G_2(\mathbf{l},\mathbf{v},\mathbf{h})\,D(\mathbf{h})}{4|\mathbf{n}\cdot\mathbf{l}||\mathbf{n}\cdot\mathbf{v}|} f spec ( l , v ) = 4∣ n ⋅ l ∣∣ n ⋅ v ∣ F ( h , l ) G 2 ( l , v , h ) D ( h )
直观理解:反射光取决于法线等于 h \mathbf{h} h 的面元浓度 D ( h ) D(\mathbf{h}) D ( h ) 、其中对光和视线都可见的比例 G 2 G_2 G 2 、以及每个面元的反射比例 F ( h , l ) F(\mathbf{h},\mathbf{l}) F ( h , l ) (菲涅耳中 h \mathbf{h} h 代替 n \mathbf{n} n )。用 h \mathbf{h} h 时角度不超过 90°,G G G 中的 χ + \chi^+ χ + 项可去掉。Hammon 给出不显式计算 h \mathbf{h} h 而求 n ⋅ h \mathbf{n}\cdot\mathbf{h} n ⋅ h 、l ⋅ h \mathbf{l}\cdot\mathbf{h} l ⋅ h 的优化。
NDF 决定镜面波瓣的宽度和形状,进而决定高光大小、形状、边缘是否清晰或带光晕。但波瓣不是 NDF 的简单拷贝,会随曲率和视角变形;平面在掠射角下尤其明显,微表面 BRDF 的高光被拉长,而 Phong 给出错误的圆形高光(球面上差异细微)。
各向同性 NDF
形状不变 (shape-invariant) 的 NDF 中粗糙度等价于拉伸微表面,可写成 D ( m ) = χ + ( n ⋅ m ) α 2 ( n ⋅ m ) 4 g ( 1 − ( n ⋅ m ) 2 α ( n ⋅ m ) ) D(\mathbf{m})=\frac{\chi^+(\mathbf{n}\cdot\mathbf{m})}{\alpha^2(\mathbf{n}\cdot\mathbf{m})^4}g\!\left(\frac{\sqrt{1-(\mathbf{n}\cdot\mathbf{m})^2}}{\alpha(\mathbf{n}\cdot\mathbf{m})}\right) D ( m ) = α 2 ( n ⋅ m ) 4 χ + ( n ⋅ m ) g ( α ( n ⋅ m ) 1 − ( n ⋅ m ) 2 ) 。此时 Λ \Lambda Λ 只依赖一个变量,便于拟合曲线或用一维表:
a = n ⋅ s α 1 − ( n ⋅ s ) 2 , s ∈ { v , l } a=\frac{\mathbf{n}\cdot\mathbf{s}}{\alpha\sqrt{1-(\mathbf{n}\cdot\mathbf{s})^2}},\quad\mathbf{s}\in\{\mathbf{v},\mathbf{l}\} a = α 1 − ( n ⋅ s ) 2 n ⋅ s , s ∈ { v , l }
NDF 公式 要点 Beckmann χ + ( n ⋅ m ) π α b 2 ( n ⋅ m ) 4 exp ( ( n ⋅ m ) 2 − 1 α b 2 ( n ⋅ m ) 2 ) \dfrac{\chi^+(\mathbf{n}\cdot\mathbf{m})}{\pi\alpha_b^2(\mathbf{n}\cdot\mathbf{m})^4}\exp\!\left(\dfrac{(\mathbf{n}\cdot\mathbf{m})^2-1}{\alpha_b^2(\mathbf{n}\cdot\mathbf{m})^2}\right) π α b 2 ( n ⋅ m ) 4 χ + ( n ⋅ m ) exp ( α b 2 ( n ⋅ m ) 2 ( n ⋅ m ) 2 − 1 ) 光学界最早使用,Cook-Torrance 所用;α b \alpha_b α b 正比于微几何 RMS 斜率;形状不变 Blinn-Phong χ + ( n ⋅ m ) α p + 2 2 π ( n ⋅ m ) α p \chi^+(\mathbf{n}\cdot\mathbf{m})\dfrac{\alpha_p+2}{2\pi}(\mathbf{n}\cdot\mathbf{m})^{\alpha_p} χ + ( n ⋅ m ) 2 π α p + 2 ( n ⋅ m ) α p 已基本被取代,但最便宜,计算紧张时(如移动端)仍用;非形状不变,Λ \Lambda Λ 无解析式 GGX (Trowbridge-Reitz) χ + ( n ⋅ m ) α g 2 π ( 1 + ( n ⋅ m ) 2 ( α g 2 − 1 ) ) 2 \dfrac{\chi^+(\mathbf{n}\cdot\mathbf{m})\,\alpha_g^2}{\pi\big(1+(\mathbf{n}\cdot\mathbf{m})^2(\alpha_g^2-1)\big)^2} π ( 1 + ( n ⋅ m ) 2 ( α g 2 − 1 ) ) 2 χ + ( n ⋅ m ) α g 2 影视和游戏最常用;形状不变
Beckmann 的 Λ ( a ) = erf ( a ) − 1 2 + 1 2 a π exp ( − a 2 ) \Lambda(a)=\frac{\text{erf}(a)-1}{2}+\frac{1}{2a\sqrt{\pi}}\exp(-a^2) Λ ( a ) = 2 erf ( a ) − 1 + 2 a π 1 exp ( − a 2 ) ,因 erf 昂贵常用近似:a < 1.6 a<1.6 a < 1.6 时 Λ ≈ 1 − 1.259 a + 0.396 a 2 3.535 a + 2.181 a 2 \Lambda\approx\frac{1-1.259a+0.396a^2}{3.535a+2.181a^2} Λ ≈ 3.535 a + 2.181 a 2 1 − 1.259 a + 0.396 a 2 ,否则为 0。
Blinn-Phong 的 α p \alpha_p α p 越大越光滑(镜面需 ∞ \infty ∞ ,0 为均匀分布),视觉影响极不均匀,常经非线性"界面映射",如 α p = m s \alpha_p=m^s α p = m s (s ∈ [ 0 , 1 ] s\in[0,1] s ∈ [ 0 , 1 ] ,《使命召唤:黑色行动》取 m = 8192 m=8192 m = 8192 )。与 Beckmann 的等价关系 α p = 2 α b − 2 − 2 \alpha_p=2\alpha_b^{-2}-2 α p = 2 α b − 2 − 2 ,此时两者很接近;Walter 等建议配合该关系使用 Beckmann 的 Λ \Lambda Λ 。
GGX 历史:Blinn 1977 年就推荐了 Trowbridge-Reitz 分布但未被重视,30 年后 Walter 等重新发现并命名为 GGX,随后迅速普及。Burley 在 Disney 原则模型中以 α g = r 2 \alpha_g=r^2 α g = r 2 暴露粗糙度(r ∈ [ 0 , 1 ] r\in[0,1] r ∈ [ 0 , 1 ] ),效果变化更线性,被大多数使用 GGX 的应用采用。GGX 的 Λ ( a ) = − 1 + 1 + 1 / a 2 2 \Lambda(a)=\frac{-1+\sqrt{1+1/a^2}}{2} Λ ( a ) = 2 − 1 + 1 + 1/ a 2 ,只含 a 2 a^2 a 2 ,可省去开方。
GGX 比 Beckmann 峰更窄、"尾部"更长,在高光核心周围形成光晕;许多真实材质的尾部甚至比 GGX 更长(如 MERL 中的铬),这推动了 GGX 的流行和对新分布的探索。
GGX + Smith 的优化
Lagarde:高度相关 Smith G 2 G_2 G 2 与 BRDF 分母可约简(μ i = ( n ⋅ l ) + \mu_i=(\mathbf{n}\cdot\mathbf{l})^+ μ i = ( n ⋅ l ) + ,μ o = ( n ⋅ v ) + \mu_o=(\mathbf{n}\cdot\mathbf{v})^+ μ o = ( n ⋅ v ) + ):
G 2 ( l , v ) 4 ∣ n ⋅ l ∣ ∣ n ⋅ v ∣ ⟹ 0.5 μ o α 2 + μ i ( μ i − α 2 μ i ) + μ i α 2 + μ o ( μ o − α 2 μ o ) \frac{G_2(\mathbf{l},\mathbf{v})}{4|\mathbf{n}\cdot\mathbf{l}||\mathbf{n}\cdot\mathbf{v}|}\Longrightarrow\frac{0.5}{\mu_o\sqrt{\alpha^2+\mu_i(\mu_i-\alpha^2\mu_i)}+\mu_i\sqrt{\alpha^2+\mu_o(\mu_o-\alpha^2\mu_o)}} 4∣ n ⋅ l ∣∣ n ⋅ v ∣ G 2 ( l , v ) ⟹ μ o α 2 + μ i ( μ i − α 2 μ i ) + μ i α 2 + μ o ( μ o − α 2 μ o ) 0.5
Karis 的 GGX G 1 G_1 G 1 近似:G 1 ( s ) ≈ 2 ( n ⋅ s ) ( n ⋅ s ) ( 2 − α ) + α G_1(\mathbf{s})\approx\frac{2(\mathbf{n}\cdot\mathbf{s})}{(\mathbf{n}\cdot\mathbf{s})(2-\alpha)+\alpha} G 1 ( s ) ≈ ( n ⋅ s ) ( 2 − α ) + α 2 ( n ⋅ s ) 。Hammon 由此得到组合项的高效近似:
G 2 ( l , v ) 4 ∣ n ⋅ l ∣ ∣ n ⋅ v ∣ ≈ 0.5 lerp ( 2 ∣ n ⋅ l ∣ ∣ n ⋅ v ∣ , ∣ n ⋅ l ∣ + ∣ n ⋅ v ∣ , α ) \frac{G_2(\mathbf{l},\mathbf{v})}{4|\mathbf{n}\cdot\mathbf{l}||\mathbf{n}\cdot\mathbf{v}|}\approx\frac{0.5}{\text{lerp}\big(2|\mathbf{n}\cdot\mathbf{l}||\mathbf{n}\cdot\mathbf{v}|,\;|\mathbf{n}\cdot\mathbf{l}|+|\mathbf{n}\cdot\mathbf{v}|,\;\alpha\big)} 4∣ n ⋅ l ∣∣ n ⋅ v ∣ G 2 ( l , v ) ≈ lerp ( 2∣ n ⋅ l ∣∣ n ⋅ v ∣ , ∣ n ⋅ l ∣ + ∣ n ⋅ v ∣ , α ) 0.5
其中 lerp ( x , y , s ) = x ( 1 − s ) + y s \text{lerp}(x,y,s)=x(1-s)+ys lerp ( x , y , s ) = x ( 1 − s ) + y s 。
更灵活的分布
GTR (Burley):把 GGX 分母的指数 2 换成 γ \gamma γ 并配归一化因子 k ( α , γ ) k(\alpha,\gamma) k ( α , γ ) (分段表达式较复杂,此处略)。γ = 2 \gamma=2 γ = 2 即 GGX,γ \gamma γ 越小尾部越长,越大越短,高值时近似 Beckmann。非形状不变,其 Smith G 2 G_2 G 2 三年后才发表且很复杂(部分 γ \gamma γ 有解析解表,中间值需插值);α \alpha α 、γ \gamma γ 对粗糙度和光晕的影响也不直观。
Student t 分布 (STD) 、指数幂分布 (EPD) :含形状参数且对粗糙度形状不变,写作时尚新,能否被采用不明。
多个镜面波瓣 :Cook-Torrance 提出,Ngan 实验证明许多材质加第二个波瓣显著改善拟合。PxrSurface 有完整的 "roughspecular" 波瓣;Imageworks 更精细,把两个 GGX 混合为扩展 NDF,只需额外的第二粗糙度和混合量。
各向异性 NDF
需要把 m \mathbf{m} m 变换到由 n \mathbf{n} n 、t \mathbf{t} t 、b \mathbf{b} b 定义的切线空间,实践中即计算 m ⋅ n \mathbf{m}\cdot\mathbf{n} m ⋅ n 、m ⋅ t \mathbf{m}\cdot\mathbf{t} m ⋅ t 、m ⋅ b \mathbf{m}\cdot\mathbf{b} m ⋅ b 。
与法线贴图结合时,法线贴图也要扰动切线和副切线,常用修正 Gram-Schmidt(n \mathbf{n} n 已归一化):
t ′ = t 0 − ( t 0 ⋅ n ) n , t = t ′ ∥ t ′ ∥ ; b ′ = b 0 − ( b 0 ⋅ n ) n , b ′ ′ = b ′ − ( b ′ ⋅ t ) t , b = b ′ ′ ∥ b ′ ′ ∥ \mathbf{t}'=\mathbf{t}_0-(\mathbf{t}_0\cdot\mathbf{n})\mathbf{n},\quad\mathbf{t}=\frac{\mathbf{t}'}{\|\mathbf{t}'\|};\qquad\mathbf{b}'=\mathbf{b}_0-(\mathbf{b}_0\cdot\mathbf{n})\mathbf{n},\;\mathbf{b}''=\mathbf{b}'-(\mathbf{b}'\cdot\mathbf{t})\mathbf{t},\quad\mathbf{b}=\frac{\mathbf{b}''}{\|\mathbf{b}''\|} t ′ = t 0 − ( t 0 ⋅ n ) n , t = ∥ t ′ ∥ t ′ ; b ′ = b 0 − ( b 0 ⋅ n ) n , b ′′ = b ′ − ( b ′ ⋅ t ) t , b = ∥ b ′′ ∥ b ′′
也可在第一步后用 n × t \mathbf{n}\times\mathbf{t} n × t 得到 b \mathbf{b} b 。
拉丝金属、卷发等需要逐像素切线,由切线贴图 提供:通常存切线在垂直于法线平面上的二维投影,过滤友好、可像法线贴图一样压缩;也有存标量旋转角的,更紧凑但在 360°→0° 回绕处易出过滤瑕疵。
任何形状不变的各向同性 NDF 都可推广:把 g g g 的参数换成 ( t ⋅ m ) 2 / α x 2 + ( b ⋅ m ) 2 / α y 2 n ⋅ m \frac{\sqrt{(\mathbf{t}\cdot\mathbf{m})^2/\alpha_x^2+(\mathbf{b}\cdot\mathbf{m})^2/\alpha_y^2}}{\mathbf{n}\cdot\mathbf{m}} n ⋅ m ( t ⋅ m ) 2 / α x 2 + ( b ⋅ m ) 2 / α y 2 ,前因子用 α x α y \alpha_x\alpha_y α x α y 。G 2 G_2 G 2 不变,只是 a = n ⋅ s α x 2 ( t ⋅ s ) 2 + α y 2 ( b ⋅ s ) 2 a=\frac{\mathbf{n}\cdot\mathbf{s}}{\sqrt{\alpha_x^2(\mathbf{t}\cdot\mathbf{s})^2+\alpha_y^2(\mathbf{b}\cdot\mathbf{s})^2}} a = α x 2 ( t ⋅ s ) 2 + α y 2 ( b ⋅ s ) 2 n ⋅ s 。各向异性 GGX:
D ( m ) = χ + ( n ⋅ m ) π α x α y ( ( t ⋅ m ) 2 α x 2 + ( b ⋅ m ) 2 α y 2 + ( n ⋅ m ) 2 ) 2 D(\mathbf{m})=\frac{\chi^+(\mathbf{n}\cdot\mathbf{m})}{\pi\alpha_x\alpha_y\left(\frac{(\mathbf{t}\cdot\mathbf{m})^2}{\alpha_x^2}+\frac{(\mathbf{b}\cdot\mathbf{m})^2}{\alpha_y^2}+(\mathbf{n}\cdot\mathbf{m})^2\right)^2} D ( m ) = π α x α y ( α x 2 ( t ⋅ m ) 2 + α y 2 ( b ⋅ m ) 2 + ( n ⋅ m ) 2 ) 2 χ + ( n ⋅ m )
Beckmann 也有对应的各向异性版本。
参数化:Disney 用 r r r 和 k aniso ∈ [ 0 , 1 ] k_{\text{aniso}}\in[0,1] k aniso ∈ [ 0 , 1 ] :k aspect = 1 − 0.9 k aniso k_{\text{aspect}}=\sqrt{1-0.9k_{\text{aniso}}} k aspect = 1 − 0.9 k aniso ,α x = r 2 / k aspect \alpha_x=r^2/k_{\text{aspect}} α x = r 2 / k aspect ,α y = r 2 k aspect \alpha_y=r^2k_{\text{aspect}} α y = r 2 k aspect ,0.9 把长宽比限制在 10:1。Imageworks 允许任意各向异性:α x = r 2 ( 1 + k aniso ) \alpha_x=r^2(1+k_{\text{aniso}}) α x = r 2 ( 1 + k aniso ) ,α y = r 2 ( 1 − k aniso ) \alpha_y=r^2(1-k_{\text{aniso}}) α y = r 2 ( 1 − k aniso ) 。
多次反射补偿
忽略多次反射造成能量损失和过暗,粗糙金属尤甚。Imageworks 结合前人工作加入一项:
f ms ( l , v ) = F ˉ R ˉ s F 1 π ( 1 − R ˉ s F 1 ) ( 1 − F ˉ ( 1 − R ˉ s F 1 ) ) ( 1 − R s F 1 ( l ) ) ( 1 − R s F 1 ( v ) ) f_{\text{ms}}(\mathbf{l},\mathbf{v})=\frac{\bar F\,\bar R_{sF1}}{\pi(1-\bar R_{sF1})\big(1-\bar F(1-\bar R_{sF1})\big)}\big(1-R_{sF1}(\mathbf{l})\big)\big(1-R_{sF1}(\mathbf{v})\big) f ms ( l , v ) = π ( 1 − R ˉ s F 1 ) ( 1 − F ˉ ( 1 − R ˉ s F 1 ) ) F ˉ R ˉ s F 1 ( 1 − R s F 1 ( l ) ) ( 1 − R s F 1 ( v ) )
R s F 1 R_{sF1} R s F 1 是 F 0 = 1 F_0=1 F 0 = 1 时镜面项的方向反照率,依赖 α \alpha α 和仰角,较平滑,可预计算存入二维纹理(Imageworks 发现 32×32 足够)。R ˉ s F 1 = 2 ∫ 0 1 R s F 1 ( μ ) μ d μ \bar R_{sF1}=2\int_0^1R_{sF1}(\mu)\mu\,d\mu R ˉ s F 1 = 2 ∫ 0 1 R s F 1 ( μ ) μ d μ 是余弦加权平均,只依赖 α \alpha α ,可用一维纹理或拟合曲线。F ˉ = 2 ∫ 0 1 F ( μ ) μ d μ \bar F=2\int_0^1F(\mu)\mu\,d\mu F ˉ = 2 ∫ 0 1 F ( μ ) μ d μ ;对一般 Schlick 形式 F ˉ = 2 p 2 F 90 + ( 3 p + 1 ) F 0 2 p 2 + 3 p + 1 \bar F=\frac{2p^2F_{90}+(3p+1)F_0}{2p^2+3p+1} F ˉ = 2 p 2 + 3 p + 1 2 p 2 F 90 + ( 3 p + 1 ) F 0 ,原始 Schlick 下 F ˉ = 20 21 F 0 + 1 21 \bar F=\frac{20}{21}F_0+\frac{1}{21} F ˉ = 21 20 F 0 + 21 1 。
各向异性时用介于 α x \alpha_x α x 、α y \alpha_y α y 之间的粗糙度,避免查找表升维,误差很小。效果在粗糙金(金色)球上最明显,黑色电介质上较细微。
PBRT 的视角:Trowbridge–Reitz、可见法线采样与由采样反推 BRDF(PBRT 4e 9.6–9.7)
为什么用统计模型
直接用超高分辨率网格加完美镜面 BxDF 也能渲染粗糙表面,但有两个根本问题:存储和求交开销无法承受;delta 型 BSDF 无法求值,光源采样(12.1 节)失效。微表面理论用统计描述代替几何,并把 delta 换成光滑分布。广泛使用的模型忽略面元间相互反射,只统计遮蔽与阴影。
分布、遮蔽与 Smith 近似(9.6.1–9.6.3)
归一化:∫ H 2 D ( ω m ) cos θ m d ω m = 1 \int_{H^2}D(\omega_m)\cos\theta_m\,d\omega_m=1 ∫ H 2 D ( ω m ) cos θ m d ω m = 1 (式 9.15);光滑表面 D = δ ( ω m − n ) D=\delta(\omega_m-n) D = δ ( ω m − n ) 。
Trowbridge–Reitz (截断椭球凸起;Walter 等 2007 独立推导并命名 GGX):
D ( ω m ) = 1 π α x α y cos 4 θ m ( 1 + tan 2 θ m ( cos 2 ϕ m α x 2 + sin 2 ϕ m α y 2 ) ) 2 ( 式 9.16 ) D(\omega_m)=\frac{1}{\pi\alpha_x\alpha_y\cos^4\theta_m\Big(1+\tan^2\theta_m\big(\frac{\cos^2\phi_m}{\alpha_x^2}+\frac{\sin^2\phi_m}{\alpha_y^2}\big)\Big)^2}\quad(\text{式 9.16}) D ( ω m ) = π α x α y c o s 4 θ m ( 1 + t a n 2 θ m ( α x 2 c o s 2 ϕ m + α y 2 s i n 2 ϕ m ) ) 2 1 ( 式 9.16 )
自行验证:α x = 0.3 , α y = 0.1 \alpha_x=0.3,\alpha_y=0.1 α x = 0.3 , α y = 0.1 时数值积分式 (9.15) 得 1.000;各向同性时化简后与上文 RTR4 的 α 2 / ( π ( 1 + cos 2 θ m ( α 2 − 1 ) ) 2 ) \alpha^2/\big(\pi(1+\cos^2\theta_m(\alpha^2-1))^2\big) α 2 / ( π ( 1 + cos 2 θ m ( α 2 − 1 ) ) 2 ) 恒等。α ≈ 0.3 \alpha\approx0.3 α ≈ 0.3 已明显模糊,α \alpha α 很小时 EffectivelySmooth() 退回完美镜面实现以免出现 Inf/NaN。
斜向投影约束 ∫ D G 1 max ( 0 , ω ⋅ ω m ) d ω m = cos θ \int D\,G_1\max(0,\omega\cdot\omega_m)\,d\omega_m=\cos\theta ∫ D G 1 max ( 0 , ω ⋅ ω m ) d ω m = cos θ (式 9.17)不能唯一确定 G 1 G_1 G 1 ;假设高度与法线统计无关即得 Smith 近似 G 1 ( ω ) = cos θ / ∫ D max ( 0 , ω ⋅ ω m ) d ω m G_1(\omega)=\cos\theta/\int D\max(0,\omega\cdot\omega_m)d\omega_m G 1 ( ω ) = cos θ / ∫ D max ( 0 , ω ⋅ ω m ) d ω m (式 9.18),写成 G 1 = 1 / ( 1 + Λ ) G_1=1/(1+\Lambda) G 1 = 1/ ( 1 + Λ ) ,TR 的 Λ = ( 1 + α 2 tan 2 θ − 1 ) / 2 \Lambda=\big(\sqrt{1+\alpha^2\tan^2\theta}-1\big)/2 Λ = ( 1 + α 2 tan 2 θ − 1 ) /2 ,各向异性时用 α = α x 2 cos 2 ϕ + α y 2 sin 2 ϕ \alpha=\sqrt{\alpha_x^2\cos^2\phi+\alpha_y^2\sin^2\phi} α = α x 2 cos 2 ϕ + α y 2 sin 2 ϕ 。自行验证:α = 0.5 , θ = 1 \alpha=0.5,\theta=1 α = 0.5 , θ = 1 时数值积分式 (9.18) 得 0.88206,与 1 / ( 1 + Λ ) 1/(1+\Lambda) 1/ ( 1 + Λ ) 一致。
双向:独立假设 G 1 ( ω o ) G 1 ( ω i ) G_1(\omega_o)G_1(\omega_i) G 1 ( ω o ) G 1 ( ω i ) 高估遮蔽、偏暗;pbrt 用高度相关形式 G = 1 / ( 1 + Λ ( ω o ) + Λ ( ω i ) ) G=1/(1+\Lambda(\omega_o)+\Lambda(\omega_i)) G = 1/ ( 1 + Λ ( ω o ) + Λ ( ω i )) (式 9.22,归功于 Ross 等 2005),与上文 RTR4 推荐的高度相关 Smith G 2 G_2 G 2 相同。
可见法线分布与采样(9.6.4)
D ω ( ω m ) = G 1 ( ω ) cos θ D ( ω m ) max ( 0 , ω ⋅ ω m ) ( 式 9.23 ) D_\omega(\omega_m)=\frac{G_1(\omega)}{\cos\theta}D(\omega_m)\max(0,\omega\cdot\omega_m)\quad(\text{式 9.23}) D ω ( ω m ) = c o s θ G 1 ( ω ) D ( ω m ) max ( 0 , ω ⋅ ω m ) ( 式 9.23 )
它是被方向 ω \omega ω 的光线"击中"的面元法线的密度。反演 CDF 没有解析解,pbrt 用 Heitz(2018)的几何方法:把 ω \omega ω 按 α x , α y \alpha_x,\alpha_y α x , α y 缩放到半球构型;在单位圆盘上均匀取点,把下半个半圆盘沿 T 2 T_2 T 2 方向按 1 2 ( 1 + cos θ ) \tfrac12(1+\cos\theta) 2 1 ( 1 + cos θ ) 缩放、偏移 h 2 ( 1 − cos θ ) \tfrac h2(1-\cos\theta) 2 h ( 1 − cos θ ) (即区间 [ − h , h ] [-h,h] [ − h , h ] 变成 [ − h cos θ , h ] [-h\cos\theta,h] [ − h cos θ , h ] );投影回半球,再变换回椭球构型。最后一步对法线是乘 以 α \alpha α 而不是除,因为法线按逆转置变换。书中图 9.31:即使 α = 0.01 \alpha=0.01 α = 0.01 ,按 D D D 采样也会因背向面元产生大量无用样本,可见法线采样误差明显更低。
Torrance–Sparrow:由采样过程反推 BRDF(9.6.5)
采样三步:按 D ω o D_{\omega_o} D ω o 采样 ω m \omega_m ω m (相当于与随机微表面求交)→ 镜面反射得 ω i \omega_i ω i 并乘菲涅耳 → 乘 G 1 ( ω i ) G_1(\omega_i) G 1 ( ω i ) 。半向量变换 ω m = ( ω i + ω o ) / ∥ ω i + ω o ∥ \omega_m=(\omega_i+\omega_o)/\|\omega_i+\omega_o\| ω m = ( ω i + ω o ) /∥ ω i + ω o ∥ 的雅可比为
d ω m d ω i = 1 4 ( ω o ⋅ ω m ) ( 式 9.27 ) \frac{d\omega_m}{d\omega_i}=\frac{1}{4(\omega_o\cdot\omega_m)}\quad(\text{式 9.27}) d ω i d ω m = 4 ( ω o ⋅ ω m ) 1 ( 式 9.27 )
(在以 ω o \omega_o ω o 为极轴的球坐标中 θ i = 2 θ m \theta_i=2\theta_m θ i = 2 θ m ,推导见 随机变量变换与逆变换采样 ),所以 p ( ω i ) = D ω o ( ω m ) / ( 4 ( ω o ⋅ ω m ) ) p(\omega_i)=D_{\omega_o}(\omega_m)/\big(4(\omega_o\cdot\omega_m)\big) p ( ω i ) = D ω o ( ω m ) / ( 4 ( ω o ⋅ ω m ) ) 。令单样本估计 f r L i ∣ cos θ i ∣ / p f_rL_i|\cos\theta_i|/p f r L i ∣ cos θ i ∣/ p 等于 F G 1 ( ω i ) L i F\,G_1(\omega_i)\,L_i F G 1 ( ω i ) L i ,解出 f r f_r f r ,代入 D ω o D_{\omega_o} D ω o 得经典形式 D F G 1 G 1 / ( 4 cos θ i cos θ o ) DFG_1G_1/(4\cos\theta_i\cos\theta_o) D F G 1 G 1 / ( 4 cos θ i cos θ o ) ,再把 G 1 G 1 G_1G_1 G 1 G 1 换成高度相关的 G G G (式 9.33)。菲涅耳项用 ω o ⋅ ω m \omega_o\cdot\omega_m ω o ⋅ ω m 而非宏观法线。反射到宏观表面以下的样本被判无效:这正是单次散射模型在高粗糙度下偏暗 的原因。
粗糙电介质(9.7)
广义半向量 ω m = ( η i ω i + η o ω o ) / ∥ ⋅ ∥ = ( η ω i + ω o ) / ∥ ⋅ ∥ \omega_m=(\eta_i\omega_i+\eta_o\omega_o)/\|\cdot\|=(\eta\omega_i+\omega_o)/\|\cdot\| ω m = ( η i ω i + η o ω o ) /∥ ⋅ ∥ = ( η ω i + ω o ) /∥ ⋅ ∥ ,η = η i / η o \eta=\eta_i/\eta_o η = η i / η o (Sommerfeld 与 Runge 1911),再翻转使 ω m ⋅ n > 0 \omega_m\cdot n>0 ω m ⋅ n > 0 ;对 ω i \omega_i ω i 或 ω o \omega_o ω o 背向的面元丢弃。
透射雅可比 d ω m = η i 2 ∣ ω i ⋅ ω m ∣ ( η i ( ω i ⋅ ω m ) + η o ( ω o ⋅ ω m ) ) 2 d ω i d\omega_m=\dfrac{\eta_i^2|\omega_i\cdot\omega_m|}{\big(\eta_i(\omega_i\cdot\omega_m)+\eta_o(\omega_o\cdot\omega_m)\big)^2}d\omega_i d ω m = ( η i ( ω i ⋅ ω m ) + η o ( ω o ⋅ ω m ) ) 2 η i 2 ∣ ω i ⋅ ω m ∣ d ω i (式 9.36 第一行,Walter 等 2007),由此得透射 pdf 与 BTDF:
f t = D ( ω m ) ( 1 − F ( ω o ⋅ ω m ) ) G ( ω i , ω o ) ( ( ω i ⋅ ω m ) + ( ω o ⋅ ω m ) / η ) 2 ∣ ω i ⋅ ω m ∣ ∣ ω o ⋅ ω m ∣ ∣ cos θ i ∣ ∣ cos θ o ∣ ( 式 9.40 ) f_t=\frac{D(\omega_m)\big(1-F(\omega_o\cdot\omega_m)\big)G(\omega_i,\omega_o)}{\big((\omega_i\cdot\omega_m)+(\omega_o\cdot\omega_m)/\eta\big)^2}\,\frac{|\omega_i\cdot\omega_m||\omega_o\cdot\omega_m|}{|\cos\theta_i||\cos\theta_o|}\quad(\text{式 9.40}) f t = ( ( ω i ⋅ ω m ) + ( ω o ⋅ ω m ) / η ) 2 D ( ω m ) ( 1 − F ( ω o ⋅ ω m ) ) G ( ω i , ω o ) ∣ c o s θ i ∣∣ c o s θ o ∣ ∣ ω i ⋅ ω m ∣∣ ω o ⋅ ω m ∣ ( 式 9.40 )
传辐亮度时代码还要再除以 η 2 \eta^2 η 2 (见 菲涅耳反射 的"非对称散射")。反射与透射的选择概率为 R / ( R + T ) R/(R+T) R / ( R + T ) 与 T / ( R + T ) T/(R+T) T / ( R + T ) 。
与上文(RTR4)的分歧与对照
话题 RTR4(上文) PBRT 4e NDF 归一化 在整个球面上积分、点积不钳制,背向面元的负投影抵消 只在上半球积分 D cos θ m D\cos\theta_m D cos θ m ,G 1 G_1 G 1 积分中用 max ( 0 , ⋅ ) \max(0,\cdot) max ( 0 , ⋅ ) ;对高度场两者等价 G 1 G_1 G 1 的写法χ + ( m ⋅ v ) / ( 1 + Λ ) \chi^+(\mathbf m\cdot\mathbf v)/(1+\Lambda) χ + ( m ⋅ v ) / ( 1 + Λ ) ,依赖 m \mathbf m m G 1 ( ω ) = 1 / ( 1 + Λ ) G_1(\omega)=1/(1+\Lambda) G 1 ( ω ) = 1/ ( 1 + Λ ) ,背向检查放到积分与代码中双向遮蔽 列出四种 G 2 G_2 G 2 并推荐高度相关 Smith 只实现高度相关形式,称其"更准确",引用 Ross 等 2005 采样 实时渲染不涉及 BRDF 采样 可见法线采样(Heitz 2018),并由采样过程反推 BRDF 多次散射 给出 Imageworks 补偿项 f ms f_{\text{ms}} f ms 不实现,承认粗糙表面偏暗,在延伸阅读与习题中指向 Heitz 2016、Kulla–Conty 2017、Turquin 2019 透射 不讨论粗糙透射 完整的粗糙电介质 BTDF(Walter 2007)
原书问题(9.7 与延伸阅读,已解码网页 SVG)
式 (9.36) 第二行 写作 ∣ ω o ⋅ ω m ∣ / ( ( ω i ⋅ ω m ) + ( ω o ⋅ ω m ) / η ) 2 |\omega_o\cdot\omega_m|/\big((\omega_i\cdot\omega_m)+(\omega_o\cdot\omega_m)/\eta\big)^2 ∣ ω o ⋅ ω m ∣/ ( ( ω i ⋅ ω m ) + ( ω o ⋅ ω m ) / η ) 2 。第一行分子分母同除 η i 2 \eta_i^2 η i 2 得到的分子是 ∣ ω i ⋅ ω m ∣ |\omega_i\cdot\omega_m| ∣ ω i ⋅ ω m ∣ (η = η i / η o \eta=\eta_i/\eta_o η = η i / η o ),pbrt-v4 代码用的也是 AbsDot(wi, wm);式 (9.37) 同错。已由读者报告:https://github.com/mmp/pbr-book-website/issues/33 。
式 (9.39) 分子中 D ω o ( ω m ) D_{\omega_o}(\omega_m) D ω o ( ω m ) 出现了两次(SVG 确认),并沿用了上面错误的 ∣ ω o ⋅ ω m ∣ |\omega_o\cdot\omega_m| ∣ ω o ⋅ ω m ∣ 。按修正后的式 (9.37) 应为 f t = D ω o ( ω m ) ∣ ω i ⋅ ω m ∣ ( 1 − F ) G 1 ( ω i ) / [ ( ( ω i ⋅ ω m ) + ( ω o ⋅ ω m ) / η ) 2 ∣ cos θ i ∣ ] f_t=D_{\omega_o}(\omega_m)|\omega_i\cdot\omega_m|(1-F)G_1(\omega_i)/\big[((\omega_i\cdot\omega_m)+(\omega_o\cdot\omega_m)/\eta)^2|\cos\theta_i|\big] f t = D ω o ( ω m ) ∣ ω i ⋅ ω m ∣ ( 1 − F ) G 1 ( ω i ) / [ (( ω i ⋅ ω m ) + ( ω o ⋅ ω m ) / η ) 2 ∣ cos θ i ∣ ] ;代入式 (9.23) 恰好得到式 (9.40),说明式 (9.40) 本身正确。
9.6.1 的 GGX 脚注在网页上因 HTML 嵌套错误显示为正文残片"2007), who dubbed it GGX":https://github.com/mmp/pbr-book-website/issues/31 。
延伸阅读说"Λ ( ω ) \Lambda(\omega) Λ ( ω ) 函数,式 (9.19)",Λ \Lambda Λ 的解析式是式 (9.20)(式 9.19 是 G 1 = 1 / ( 1 + Λ ) G_1=1/(1+\Lambda) G 1 = 1/ ( 1 + Λ ) )。
LearnOpenGL 的视角:GGX + Smith Schlick-GGX 代码形态(PBR / Theory)
来源:PBR Theory 中 D/G 节;摘录 PBR — Theory 。
NDF_GGX:a2 / (π * (NdotH²*(a2-1)+1)²)。GeometrySchlickGGX:NdotV / (NdotV*(1-k)+k);Smith 为视向与光向两项相乘。α 与粗糙度映射及 direct/IBL 的 k 重映射与引擎约定有关(对照上文 Disney α = r 2 α=r^2 α = r 2 与 pbrt r \sqrt{r} r 分歧)。本库详论仍以上文 RTR4/PBRT 为主;LOGL 提供可直接粘贴的实时常用近似。