中EN
概念页

微表面理论

Microfacet Theory

微表面理论把小于像素的微几何建模为大量平坦微面元,用法线分布函数 (NDF) D(m)D(\mathbf{m}) 描述其朝向统计,用遮蔽函数 G1G_1 和遮蔽-阴影函数 G2G_2 描述可见性,并据此推导宏观 BRDF。镜面反射时每个微面元是完美菲涅耳镜,积分退化为在半向量处求值,得到 FG2D/(4∣n⋅l∣∣n⋅v∣)FG_2D/(4|\mathbf{n}\cdot\mathbf{l}||\mathbf{n}\cdot\mathbf{v}|)。GGX 分布配合高度相关的 Smith G2G_2 是当今影视和游戏最常用的组合;该框架忽略微面元间的多次反射,可用补偿项弥补。本页对应 RTR4 9.6–9.8 节。

微几何的效应 (9.6)

  • 微几何法线的分布通常连续,在宏观法线处有强峰;粗糙度越大分布越分散,反射的环境细节越模糊,小亮光源的高光越宽越暗(能量分散到更宽的方向锥)。
  • 许多微小高光的统计规律最终变成聚合高光的形状细节(例如外围稀疏的小高光变成聚合高光边缘较暗)。
  • 多数表面的微法线分布各向同性;拉丝金属等各向异性表面会产生方向性模糊。织物(天鹅绒、缎)微结构高度规则,需专门模型(见布料着色)。
  • 阴影(微几何遮挡光源)和遮蔽(遮挡视线):若微几何高度与法线相关(如凸起处被磨光而低处粗糙),掠射时低处被遮挡,表面实际变得更光滑。入射角越大,不规则的可见尺寸越小,极端掠射时可小于波长而"消失";与菲涅耳效应共同使表面在接近 90° 时显得高反射、像镜子(卷纸筒实验)。
  • 被遮挡的光会在微几何间相互反射。电介质中因每次反弹被菲涅耳衰减而很弱;金属没有次表面散射,多次反弹是其任何可见漫反射的来源,且有色金属的多次反射颜色更深。
  • 若微几何不规则大于次表面散射距离,阴影与遮蔽会造成逆反射(光偏向原方向返回),使粗糙表面显得扁平(见漫反射与次表面 BRDF)。

法线分布函数与可见性 (9.7)

  • 光学界最先提出,1977 年 Blinn、1981 年 Cook 与 Torrance 引入图形学。每个微面元有法线 m\mathbf{m},按微 BRDF fμ(l,v,m)f_\mu(\mathbf{l},\mathbf{v},\mathbf{m}) 反射;通常取完美菲涅耳镜,也有漫反射微 BRDF(局部次表面模型)和衍射微 BRDF。
  • NDF 归一化:微表面投影到宏观平面的面积等于宏观面积(约定为 1),且向任意视线垂直平面的投影相等: ∫m∈ΘD(m)(n⋅m) dm=1,∫m∈ΘD(m)(v⋅m) dm=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} 积分在整个球面 Θ\Theta 上,点积不钳制(背向面元的负投影抵消重叠部分)。图形学中的微结构大多是高度场,Ω\Omega 之外 D=0D=0。直观上 NDF 像微法线的直方图。
  • 遮蔽函数 G1(m,v)G_1(\mathbf{m},\mathbf{v}):法线为 m\mathbf{m} 的面元沿 v\mathbf{v} 可见的比例。可见面元的投影面积之和等于宏观投影面积:∫ΘG1(m,v)D(m)(v⋅m)+dm=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}。G1DG_1D 称可见法线分布。该约束不能唯一确定 G1G_1,因为 DD 不描述面元的排列。
  • Heitz 证明文献中只有 Smith 函数和 Torrance-Sparrow "V 形腔"满足上述约束,且 Smith 更接近随机微表面;Smith 还是唯一同时满足约束并具有法线-遮蔽无关性(面元不背向时 G1G_1 与 m\mathbf{m} 的方向无关)的函数: G1(m,v)=χ+(m⋅v)1+Λ(v)G_1(\mathbf{m},\mathbf{v})=\frac{\chi^+(\mathbf{m}\cdot\mathbf{v})}{1+\Lambda(\mathbf{v})} χ+(x)\chi^+(x) 在 x>0x>0 时为 1,否则为 0;Λ\Lambda 依 NDF 而定。Smith 的缺点:其要求与真实表面结构不一致,甚至可能物理上无法实现;对法线与遮蔽强相关、尤其有重复结构(如多数织物)的表面精度下降。但在更好的方案出现前,它是大多数渲染应用的最佳选择。
  • 宏观 BRDF: f(l,v)=∫m∈Ωfμ(l,v,m) G2(l,v,m) D(m)(m⋅l)+∣n⋅l∣(m⋅v)+∣n⋅v∣ dmf(\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} G2G_2 计入遮蔽与阴影,但不计面元间相互反射,因此所有由此导出的 BRDF 都偏暗。

遮蔽-阴影函数 G2G_2 的形式

形式公式 / 思路评价
可分离G2=G1(v,m)G1(l,m)G_2=G_1(\mathbf{v},\mathbf{m})G_1(\mathbf{l},\mathbf{m})假设遮蔽与阴影不相关,导致过暗;l=v\mathbf{l}=\mathbf{v} 时应为 G1G_1 却得到 G12G_1^2
方向相关λ(ϕ)G1G1+(1−λ(ϕ))min⁡(G1(v),G1(l))\lambda(\phi)G_1G_1+(1-\lambda(\phi))\min(G_1(\mathbf{v}),G_1(\mathbf{l}))高度场在相对方位角 ϕ=0\phi=0 时应取 min;Ashikhmin:λ=1−e−7.3ϕ2\lambda=1-e^{-7.3\phi^2};van Ginneken:λ=4.41ϕ4.41ϕ+1\lambda=\frac{4.41\phi}{4.41\phi+1}
高度相关 SmithG2=χ+(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})}低处的点更容易同时被遮蔽和阴影;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}))λ\lambda 可用经验函数或针对 NDF 推导

也有实践者使用可分离形式。

镜面微表面 BRDF (9.8)

完美镜面面元只在 m\mathbf{m} 等于半向量 h=l+v∥l+v∥\mathbf{h}=\frac{\mathbf{l}+\mathbf{v}}{\|\mathbf{l}+\mathbf{v}\|} 时非零,积分退化为: fspec(l,v)=F(h,l) G2(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}|}

  • 直观理解:反射光取决于法线等于 h\mathbf{h} 的面元浓度 D(h)D(\mathbf{h})、其中对光和视线都可见的比例 G2G_2、以及每个面元的反射比例 F(h,l)F(\mathbf{h},\mathbf{l})(菲涅耳中 h\mathbf{h} 代替 n\mathbf{n})。用 h\mathbf{h} 时角度不超过 90°,GG 中的 χ+\chi^+ 项可去掉。Hammon 给出不显式计算 h\mathbf{h} 而求 n⋅h\mathbf{n}\cdot\mathbf{h}、l⋅h\mathbf{l}\cdot\mathbf{h} 的优化。
  • NDF 决定镜面波瓣的宽度和形状,进而决定高光大小、形状、边缘是否清晰或带光晕。但波瓣不是 NDF 的简单拷贝,会随曲率和视角变形;平面在掠射角下尤其明显,微表面 BRDF 的高光被拉长,而 Phong 给出错误的圆形高光(球面上差异细微)。

各向同性 NDF

  • 形状不变 (shape-invariant) 的 NDF 中粗糙度等价于拉伸微表面,可写成 D(m)=χ+(n⋅m)α2(n⋅m)4g ⁣(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)。此时 Λ\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}\}
NDF公式要点
Beckmannχ+(n⋅m)παb2(n⋅m)4exp⁡ ⁣((n⋅m)2−1αb2(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)光学界最早使用,Cook-Torrance 所用;αb\alpha_b 正比于微几何 RMS 斜率;形状不变
Blinn-Phongχ+(n⋅m)αp+22π(n⋅m)αp\chi^+(\mathbf{n}\cdot\mathbf{m})\dfrac{\alpha_p+2}{2\pi}(\mathbf{n}\cdot\mathbf{m})^{\alpha_p}已基本被取代,但最便宜,计算紧张时(如移动端)仍用;非形状不变,Λ\Lambda 无解析式
GGX (Trowbridge-Reitz)χ+(n⋅m) αg2π(1+(n⋅m)2(αg2−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}影视和游戏最常用;形状不变
  • Beckmann 的 Λ(a)=erf(a)−12+12aπexp⁡(−a2)\Lambda(a)=\frac{\text{erf}(a)-1}{2}+\frac{1}{2a\sqrt{\pi}}\exp(-a^2),因 erf 昂贵常用近似:a<1.6a<1.6 时 Λ≈1−1.259a+0.396a23.535a+2.181a2\Lambda\approx\frac{1-1.259a+0.396a^2}{3.535a+2.181a^2},否则为 0。
  • Blinn-Phong 的 αp\alpha_p 越大越光滑(镜面需 ∞\infty,0 为均匀分布),视觉影响极不均匀,常经非线性"界面映射",如 αp=ms\alpha_p=m^s(s∈[0,1]s\in[0,1],《使命召唤:黑色行动》取 m=8192m=8192)。与 Beckmann 的等价关系 αp=2αb−2−2\alpha_p=2\alpha_b^{-2}-2,此时两者很接近;Walter 等建议配合该关系使用 Beckmann 的 Λ\Lambda。
  • GGX 历史:Blinn 1977 年就推荐了 Trowbridge-Reitz 分布但未被重视,30 年后 Walter 等重新发现并命名为 GGX,随后迅速普及。Burley 在 Disney 原则模型中以 αg=r2\alpha_g=r^2 暴露粗糙度(r∈[0,1]r\in[0,1]),效果变化更线性,被大多数使用 GGX 的应用采用。GGX 的 Λ(a)=−1+1+1/a22\Lambda(a)=\frac{-1+\sqrt{1+1/a^2}}{2},只含 a2a^2,可省去开方。
  • GGX 比 Beckmann 峰更窄、"尾部"更长,在高光核心周围形成光晕;许多真实材质的尾部甚至比 GGX 更长(如 MERL 中的铬),这推动了 GGX 的流行和对新分布的探索。

GGX + Smith 的优化

  • Lagarde:高度相关 Smith G2G_2 与 BRDF 分母可约简(μi=(n⋅l)+\mu_i=(\mathbf{n}\cdot\mathbf{l})^+,μo=(n⋅v)+\mu_o=(\mathbf{n}\cdot\mathbf{v})^+): G2(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)}}
  • Karis 的 GGX G1G_1 近似:G1(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}。Hammon 由此得到组合项的高效近似: G2(l,v)4∣n⋅l∣∣n⋅v∣≈0.5lerp(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)} 其中 lerp(x,y,s)=x(1−s)+ys\text{lerp}(x,y,s)=x(1-s)+ys。

更灵活的分布

  • GTR(Burley):把 GGX 分母的指数 2 换成 γ\gamma 并配归一化因子 k(α,γ)k(\alpha,\gamma)(分段表达式较复杂,此处略)。γ=2\gamma=2 即 GGX,γ\gamma 越小尾部越长,越大越短,高值时近似 Beckmann。非形状不变,其 Smith G2G_2 三年后才发表且很复杂(部分 γ\gamma 有解析解表,中间值需插值);α\alpha、γ\gamma 对粗糙度和光晕的影响也不直观。
  • Student t 分布 (STD)、指数幂分布 (EPD):含形状参数且对粗糙度形状不变,写作时尚新,能否被采用不明。
  • 多个镜面波瓣:Cook-Torrance 提出,Ngan 实验证明许多材质加第二个波瓣显著改善拟合。PxrSurface 有完整的 "roughspecular" 波瓣;Imageworks 更精细,把两个 GGX 混合为扩展 NDF,只需额外的第二粗糙度和混合量。

各向异性 NDF

  • 需要把 m\mathbf{m} 变换到由 n\mathbf{n}、t\mathbf{t}、b\mathbf{b} 定义的切线空间,实践中即计算 m⋅n\mathbf{m}\cdot\mathbf{n}、m⋅t\mathbf{m}\cdot\mathbf{t}、m⋅b\mathbf{m}\cdot\mathbf{b}。
  • 与法线贴图结合时,法线贴图也要扰动切线和副切线,常用修正 Gram-Schmidt(n\mathbf{n} 已归一化): t′=t0−(t0⋅n)n,t=t′∥t′∥;b′=b0−(b0⋅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}''\|} 也可在第一步后用 n×t\mathbf{n}\times\mathbf{t} 得到 b\mathbf{b}。
  • 拉丝金属、卷发等需要逐像素切线,由切线贴图提供:通常存切线在垂直于法线平面上的二维投影,过滤友好、可像法线贴图一样压缩;也有存标量旋转角的,更紧凑但在 360°→0° 回绕处易出过滤瑕疵。
  • 任何形状不变的各向同性 NDF 都可推广:把 gg 的参数换成 (t⋅m)2/αx2+(b⋅m)2/αy2n⋅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}},前因子用 αxαy\alpha_x\alpha_y。G2G_2 不变,只是 a=n⋅sαx2(t⋅s)2+αy2(b⋅s)2a=\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}}。各向异性 GGX: D(m)=χ+(n⋅m)παxαy((t⋅m)2αx2+(b⋅m)2αy2+(n⋅m)2)2D(\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} Beckmann 也有对应的各向异性版本。
  • 参数化:Disney 用 rr 和 kaniso∈[0,1]k_{\text{aniso}}\in[0,1]:kaspect=1−0.9kanisok_{\text{aspect}}=\sqrt{1-0.9k_{\text{aniso}}},αx=r2/kaspect\alpha_x=r^2/k_{\text{aspect}},αy=r2kaspect\alpha_y=r^2k_{\text{aspect}},0.9 把长宽比限制在 10:1。Imageworks 允许任意各向异性:αx=r2(1+kaniso)\alpha_x=r^2(1+k_{\text{aniso}}),αy=r2(1−kaniso)\alpha_y=r^2(1-k_{\text{aniso}})。

多次反射补偿

  • 忽略多次反射造成能量损失和过暗,粗糙金属尤甚。Imageworks 结合前人工作加入一项: fms(l,v)=Fˉ RˉsF1π(1−RˉsF1)(1−Fˉ(1−RˉsF1))(1−RsF1(l))(1−RsF1(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)
  • RsF1R_{sF1} 是 F0=1F_0=1 时镜面项的方向反照率,依赖 α\alpha 和仰角,较平滑,可预计算存入二维纹理(Imageworks 发现 32×32 足够)。RˉsF1=2∫01RsF1(μ)μ dμ\bar R_{sF1}=2\int_0^1R_{sF1}(\mu)\mu\,d\mu 是余弦加权平均,只依赖 α\alpha,可用一维纹理或拟合曲线。Fˉ=2∫01F(μ)μ dμ\bar F=2\int_0^1F(\mu)\mu\,d\mu;对一般 Schlick 形式 Fˉ=2p2F90+(3p+1)F02p2+3p+1\bar F=\frac{2p^2F_{90}+(3p+1)F_0}{2p^2+3p+1},原始 Schlick 下 Fˉ=2021F0+121\bar F=\frac{20}{21}F_0+\frac{1}{21}。
  • 各向异性时用介于 αx\alpha_x、αy\alpha_y 之间的粗糙度,避免查找表升维,误差很小。效果在粗糙金(金色)球上最明显,黑色电介质上较细微。

PBRT 的视角:Trowbridge–Reitz、可见法线采样与由采样反推 BRDF(PBRT 4e 9.6–9.7)

为什么用统计模型

直接用超高分辨率网格加完美镜面 BxDF 也能渲染粗糙表面,但有两个根本问题:存储和求交开销无法承受;delta 型 BSDF 无法求值,光源采样(12.1 节)失效。微表面理论用统计描述代替几何,并把 delta 换成光滑分布。广泛使用的模型忽略面元间相互反射,只统计遮蔽与阴影。

分布、遮蔽与 Smith 近似(9.6.1–9.6.3)

  • 归一化:∫H2D(ωm)cos⁡θm dωm=1\int_{H^2}D(\omega_m)\cos\theta_m\,d\omega_m=1(式 9.15);光滑表面 D=δ(ωm−n)D=\delta(\omega_m-n)。
  • Trowbridge–Reitz(截断椭球凸起;Walter 等 2007 独立推导并命名 GGX): D(ωm)=1παxαycos⁡4θm(1+tan⁡2θm(cos⁡2ϕmαx2+sin⁡2ϕmαy2))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}) 自行验证:αx=0.3,αy=0.1\alpha_x=0.3,\alpha_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) 恒等。α≈0.3\alpha\approx0.3 已明显模糊,α\alpha 很小时 EffectivelySmooth() 退回完美镜面实现以免出现 Inf/NaN。
  • 斜向投影约束 ∫D G1max⁡(0,ω⋅ωm) dωm=cos⁡θ\int D\,G_1\max(0,\omega\cdot\omega_m)\,d\omega_m=\cos\theta(式 9.17)不能唯一确定 G1G_1;假设高度与法线统计无关即得 Smith 近似 G1(ω)=cos⁡θ/∫Dmax⁡(0,ω⋅ωm)dωmG_1(\omega)=\cos\theta/\int D\max(0,\omega\cdot\omega_m)d\omega_m(式 9.18),写成 G1=1/(1+Λ)G_1=1/(1+\Lambda),TR 的 Λ=(1+α2tan⁡2θ−1)/2\Lambda=\big(\sqrt{1+\alpha^2\tan^2\theta}-1\big)/2,各向异性时用 α=αx2cos⁡2ϕ+αy2sin⁡2ϕ\alpha=\sqrt{\alpha_x^2\cos^2\phi+\alpha_y^2\sin^2\phi}。自行验证:α=0.5,θ=1\alpha=0.5,\theta=1 时数值积分式 (9.18) 得 0.88206,与 1/(1+Λ)1/(1+\Lambda) 一致。
  • 双向:独立假设 G1(ωo)G1(ωi)G_1(\omega_o)G_1(\omega_i) 高估遮蔽、偏暗;pbrt 用高度相关形式 G=1/(1+Λ(ωo)+Λ(ωi))G=1/(1+\Lambda(\omega_o)+\Lambda(\omega_i))(式 9.22,归功于 Ross 等 2005),与上文 RTR4 推荐的高度相关 Smith G2G_2 相同。

可见法线分布与采样(9.6.4)

Dω(ωm)=G1(ω)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}) 它是被方向 ω\omega 的光线"击中"的面元法线的密度。反演 CDF 没有解析解,pbrt 用 Heitz(2018)的几何方法:把 ω\omega 按 αx,αy\alpha_x,\alpha_y 缩放到半球构型;在单位圆盘上均匀取点,把下半个半圆盘沿 T2T_2 方向按 12(1+cos⁡θ)\tfrac12(1+\cos\theta) 缩放、偏移 h2(1−cos⁡θ)\tfrac h2(1-\cos\theta)(即区间 [−h,h][-h,h] 变成 [−hcos⁡θ,h][-h\cos\theta,h]);投影回半球,再变换回椭球构型。最后一步对法线是乘以 α\alpha 而不是除,因为法线按逆转置变换。书中图 9.31:即使 α=0.01\alpha=0.01,按 DD 采样也会因背向面元产生大量无用样本,可见法线采样误差明显更低。

Torrance–Sparrow:由采样过程反推 BRDF(9.6.5)

采样三步:按 DωoD_{\omega_o} 采样 ωm\omega_m(相当于与随机微表面求交)→ 镜面反射得 ωi\omega_i 并乘菲涅耳 → 乘 G1(ωi)G_1(\omega_i)。半向量变换 ωm=(ωi+ωo)/∥ωi+ωo∥\omega_m=(\omega_i+\omega_o)/\|\omega_i+\omega_o\| 的雅可比为 dωmdωi=14(ωo⋅ωm)(式 9.27)\frac{d\omega_m}{d\omega_i}=\frac{1}{4(\omega_o\cdot\omega_m)}\quad(\text{式 9.27}) (在以 ωo\omega_o 为极轴的球坐标中 θi=2θm\theta_i=2\theta_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)。令单样本估计 frLi∣cos⁡θi∣/pf_rL_i|\cos\theta_i|/p 等于 F G1(ωi) LiF\,G_1(\omega_i)\,L_i,解出 frf_r,代入 DωoD_{\omega_o} 得经典形式 DFG1G1/(4cos⁡θicos⁡θo)DFG_1G_1/(4\cos\theta_i\cos\theta_o),再把 G1G1G_1G_1 换成高度相关的 GG(式 9.33)。菲涅耳项用 ωo⋅ωm\omega_o\cdot\omega_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\|,η=ηi/ηo\eta=\eta_i/\eta_o(Sommerfeld 与 Runge 1911),再翻转使 ωm⋅n>0\omega_m\cdot n>0;对 ωi\omega_i 或 ωo\omega_o 背向的面元丢弃。
  • 透射雅可比 dωm=ηi2∣ωi⋅ωm∣(ηi(ωi⋅ωm)+ηo(ωo⋅ωm))2dωid\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(式 9.36 第一行,Walter 等 2007),由此得透射 pdf 与 BTDF: ft=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}) 传辐亮度时代码还要再除以 η2\eta^2(见 菲涅耳反射 的"非对称散射")。反射与透射的选择概率为 R/(R+T)R/(R+T) 与 T/(R+T)T/(R+T)。

与上文(RTR4)的分歧与对照

话题RTR4(上文)PBRT 4e
NDF 归一化在整个球面上积分、点积不钳制,背向面元的负投影抵消只在上半球积分 Dcos⁡θmD\cos\theta_m,G1G_1 积分中用 max⁡(0,⋅)\max(0,\cdot);对高度场两者等价
G1G_1 的写法χ+(m⋅v)/(1+Λ)\chi^+(\mathbf m\cdot\mathbf v)/(1+\Lambda),依赖 m\mathbf mG1(ω)=1/(1+Λ)G_1(\omega)=1/(1+\Lambda),背向检查放到积分与代码中
双向遮蔽列出四种 G2G_2 并推荐高度相关 Smith只实现高度相关形式,称其"更准确",引用 Ross 等 2005
采样实时渲染不涉及 BRDF 采样可见法线采样(Heitz 2018),并由采样过程反推 BRDF
多次散射给出 Imageworks 补偿项 fmsf_{\text{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。第一行分子分母同除 ηi2\eta_i^2 得到的分子是 ∣ωi⋅ωm∣|\omega_i\cdot\omega_m|(η=ηi/ηo\eta=\eta_i/\eta_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) 出现了两次(SVG 确认),并沿用了上面错误的 ∣ωo⋅ωm∣|\omega_o\cdot\omega_m|。按修正后的式 (9.37) 应为 ft=Dωo(ωm)∣ωi⋅ωm∣(1−F)G1(ω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];代入式 (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 是 G1=1/(1+Λ)G_1=1/(1+\Lambda))。

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 α=r2α=r^2 与 pbrt r\sqrt{r} 分歧)。本库详论仍以上文 RTR4/PBRT 为主;LOGL 提供可直接粘贴的实时常用近似。

  1. realtime_rendering_4ed.pdf 第 9 章 Physically Based Shading
  2. PBRT 4e source excerpt: chapter 09 (Reflection Models)
  3. 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
  4. PBR — Theory
  5. learnopengl.com/PBR/Theory

相关页面

图形学基于物理的着色Physically Based Shading基于物理的着色从光与物质交互的物理出发,用 BRDF 和反射方程计算表面沿视线方向射出的辐射亮度:镜面项来自微表面理论与菲涅耳反射,漫反射项来自局部次表面散射,布料、波动光学与分层材质再作扩展。本页是 RTR4 第 9 章的总览,并收录该章第 9.13 节的材质混合与材质过滤(镜面抗锯齿)。图形学双向反射分布函数BRDFBRDF f(\mathbf{l},\mathbf{v}) 量化局部反射:只依赖入射方向 \mathbf{l} 和出射(观察)方向 \mathbf{v},涵盖表面反射与局部次表面散射。它通过反射方程把入射辐射亮度转换为出射辐射亮度,物理上需满足 Helmholtz 互易性与能量守恒,用方向反照率检验。方向光和精确光源可从小面光源的极限推导,使积分变为对光源的求和。本页对应 RTR4 9.3–9.4 节。图形学菲涅耳反射Fresnel Reflectance菲涅耳方程描述光在两种物质的平坦界面上反射的比例 F,它取决于入射角和两侧折射率:垂直入射时为材质特有的 F0(特征镜面色),掠射时趋于 1。实时渲染用以 F0 为参数的 Schlick 近似。电介质 F0 低且无色,金属 F0 高且常带色,半导体介于其间;金属度参数化利用了这一点。光从物体内部射向表面时还可能发生全内反射。本页对应 RTR4 9.5 节。图形学光与物质的交互Light-Matter Interaction光是电磁横波;它与物质交互的核心是散射(振荡的电场带动电荷振荡、再辐射出新波)和吸收。粒子的大小决定散射特性,均匀介质用复折射率描述,表面是折射率的突变界面,把光分为反射和折射;折射进物体的光经次表面散射后部分射出。散射距离与着色尺度的比较决定能否把次表面散射当作局部的漫反射项。本页对应 RTR4 9.1–9.2 节。图形学漫反射与次表面 BRDFDiffuse & Subsurface BRDF Models漫反射项模拟不透明电介质中的局部次表面散射(金属没有)。其颜色是次表面反照率 \rho{ss};选用光滑表面还是粗糙表面模型,取决于表面不规则与次表面散射距离的相对大小,而不只是表面有多粗糙。光滑表面模型从 Lambert 出发,通过与镜面项的能量权衡改进;粗糙表面模型有 Disney 漫反射、Oren-Nayar、Gotanda、Hammon 等。本页对应 RTR4 9.9 节。图形学布料着色Cloth Shading布料的微几何与其他材质不同:可能有高度重复的编织结构、垂直伸出表面的纤维,或两者兼有,因此常需要专门的着色模型来表现各向异性高光、粗糙散射(半透明纤维造成的边缘亮光)以及随视角的颜色变化。布料 BRDF 分为经验模型、基于微表面理论的模型和微圆柱模型三类。本页对应 RTR4 9.10 节。图形学法线贴图与凹凸贴图Normal & Bump Mapping凹凸贴图是一类在像素着色中修改着色法线来表现中尺度细节的技术:几何法线不变,只改变光照计算使用的法线,从而在不增加几何的情况下显得更立体。最常用的形式是切线空间法线贴图,需要每顶点的切线框架;法线贴图的过滤是难点。图形学着色模型与光源Shading Models & Light Sources着色模型描述物体颜色如何随表面朝向、观察方向和光照变化。光源通过两个参数与着色模型交互:指向光源的方向 \mathbf{l} 和光的颜色 \mathbf{c}{\text{light}}。方向光、点光源、聚光灯的区别就在于这两个量如何随场景变化;距离衰减和方向衰减函数的选择同时影响画面与性能。图形学面光源Area Lights真实光源从来不是点。面光源要求对光源所张立体角 \omegal 积分 BRDF,实时渲染倾向于用闭式解或近似而不是多条光线取平均。主要做法有:Lambert 表面的矢量辐照度与包裹光照、光泽表面的粗糙度修正和"最具代表性的点",以及最准确的线性变换余弦 (LTC)。图形学薄膜干涉与分层材质Thin-Film & Layered Materials几何光学假设表面不规则要么小于一个波长、要么大于约 100 个波长;真实表面在 1–100 个波长范围(纳米几何)也有不规则,会产生衍射,厚度接近光波长的表面薄膜会产生薄膜干涉,这些都需要波动光学。现实材质还常常层层叠加,最简单也最重要的是清漆层。本页对应 RTR4 9.11–9.12 节。图形学基于图像的光照Image-Based Lighting用纹理数据(通常是相机拍摄的 360° HDR 全景)照明场景称为基于图像的光照。实时引擎常用预滤波的高光立方体贴图(配合 split-sum 近似)处理高光,用辐照度环境贴图或球谐系数处理漫反射。它们只依赖少量光照图元而不需要知道场景其他表面,因此仍属局部光照。游戏数学随机变量变换与逆变换采样Random Variable Transforms & Inversion Sampling蒙特卡洛估计器要求能从指定的概率密度里抽样。最基本的工具是逆变换法 (Inversion Method):对 CDF 求逆,把 [0,1) 上的均匀随机数映射成目标分布;更一般地,随机变量经过一一映射后的密度由导数(多维时是雅可比行列式)决定;多维非独立分布则先采边缘密度、再采条件密度。本页按 PBRT 第 4 版 2.1.1、2.3、2.4 节整理,是 蒙特卡洛积分与重要性采样 的数学部分。图形学测量 BRDF 与数据驱动反射模型Measured BRDFs & Data-Driven Reflectance测量 BRDF 用实验室测得的真实材质数据代替解析模型,适合虹彩漆、织物、珠光膜等解析模型拟合不好的材质。难点是四维 BRDF 的维数灾难;PBRT 4e 的 MeasuredBxDF(Dupuy 与 Jakob 2018)把可见法线采样当作参数化,只需较稀疏的测量就能插值。本页对应 PBRT 4e 9.8 节及其延伸阅读。图形学着色频率与材质系统Shading Frequency & Material Systems实现着色时要按"计算频率"划分工作:整个 draw call 不变的放到应用端作为 uniform,其余放在相应的可编程阶段。实践中大多数着色在像素级完成,顶点着色器负责变换和变形。材质系统把面向美术的材质与底层着色器组织起来,处理海量着色器变体的组合问题。

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原