new_games_101

第9章:材质与外观

材质与外观建模是计算机图形学中连接物理世界与虚拟渲染的关键桥梁。本章将深入探讨如何用数学模型描述真实世界中光与物质的相互作用,从基础的BRDF理论到复杂的外观现象。对于AI科学家而言,理解这些模型不仅有助于传统渲染,更是神经渲染、可微渲染等新兴领域的理论基础。

本章学习目标:

9.1 BRDF/BSDF理论

9.1.1 辐射度量学回顾与BRDF定义

双向反射分布函数(Bidirectional Reflectance Distribution Function, BRDF)描述了光线如何从物体表面反射。回顾辐射度量学基础:

辐射通量(Radiant Flux):$\Phi$,单位时间内的辐射能量,单位:瓦特(W)

辐照度(Irradiance):$E = \frac{d\Phi}{dA}$,单位面积接收的辐射通量,单位:$\text{W/m}^2$

辐射度(Radiance):$L = \frac{d^2\Phi}{dA \cos\theta d\omega}$,单位面积、单位立体角的辐射通量,单位:$\text{W/(m}^2\cdot\text{sr)}$

辐射强度(Radiant Intensity):$I = \frac{d\Phi}{d\omega}$,单位立体角的辐射通量,单位:$\text{W/sr}$

关键洞察:辐射度$L$是唯一在真空中沿直线传播保持不变的量,这使其成为光线追踪的理想物理量。

BRDF的正式定义:

\[f_r(\omega_i, \omega_o) = \frac{dL_o(\omega_o)}{dE_i(\omega_i)} = \frac{dL_o(\omega_o)}{L_i(\omega_i)\cos\theta_i d\omega_i}\]

其中:

等价定义:从散射截面角度 \(f_r(\omega_i, \omega_o) = \frac{1}{\cos\theta_i} \frac{d\sigma_s(\omega_i \to \omega_o)}{d\omega_o}\)

其中$d\sigma_s$是微分散射截面。

物理直觉:BRDF描述了一个微分光束如何被表面”重新分配”到各个出射方向。它本质上是一个概率密度函数的光学类比,但带有$\cos\theta_i$项的几何因子。

与概率的类比:如果定义散射概率密度$p(\omega_o \omega_i)$,则:
$$f_r(\omega_i, \omega_o) = \rho(\omega_i) \frac{p(\omega_o \omega_i)}{\cos\theta_o}$$

其中$\rho(\omega_i)$是方向反照率。

单位分析:BRDF的单位是$\text{sr}^{-1}$(球面度的倒数),这可以从定义式推导: \([f_r] = \frac{[\text{W/(m}^2\cdot\text{sr)}]}{[\text{W/(m}^2\cdot\text{sr)}] \cdot 1 \cdot [\text{sr}]} = [\text{sr}^{-1}]\)

反射方程:给定入射光场,出射辐射度通过反射方程计算: \(L_o(\omega_o) = \int_{\Omega} f_r(\omega_i, \omega_o) L_i(\omega_i) \cos\theta_i d\omega_i\)

这是渲染方程的核心组成部分,也是所有基于物理的渲染算法的基础。

局部坐标系定义

BRDF的可视化

  1. 切片图:固定$\omega_i$,绘制$f_r(\omega_i, \omega_o)$随$\omega_o$的变化
  2. 极坐标图:在切平面上显示BRDF值的等高线
  3. 球面图:在单位球上用颜色编码BRDF值
  4. 矩阵图:将4D函数离散化为2D矩阵的集合

测量vs解析模型

9.1.2 BRDF的数学性质

BRDF必须满足以下物理约束:

1. 非负性(Non-negativity): \(f_r(\omega_i, \omega_o) \geq 0\)

物理意义:能量不能为负,表面不能”吸收”后发出负光。

数学后果:BRDF定义了半球上的一个正测度,可以用测度论工具分析。

2. 互易性(Helmholtz Reciprocity): \(f_r(\omega_i, \omega_o) = f_r(\omega_o, \omega_i)\)

这一性质源于光路可逆原理,在实际渲染中可用于优化计算。互易性的深层含义来自于时间反演对称性和洛伦兹互易定理。

证明思路

  1. 麦克斯韦方程组在时间反演下的对称性
  2. 边界条件的时间反演不变性
  3. 格林函数的对称性:$G(\mathbf{r}_1, \mathbf{r}_2) = G(\mathbf{r}_2, \mathbf{r}_1)$
  4. 宏观BRDF继承微观电磁场的对称性

实际应用:在双向路径追踪中,互易性允许我们交换光线方向而不改变贡献,这对于连接光路至关重要。

破坏互易性的情况

3. 能量守恒(Energy Conservation): \(\int_{\Omega} f_r(\omega_i, \omega_o) \cos\theta_o d\omega_o \leq 1\)

对于任意入射方向,反射的总能量不能超过入射能量。

严格形式(考虑透射): \(\int_{\Omega^+} f_r(\omega_i, \omega_o) \cos\theta_o d\omega_o + \int_{\Omega^-} f_t(\omega_i, \omega_o) \cos\theta_o d\omega_o + \alpha(\omega_i) = 1\)

其中$\alpha(\omega_i)$是吸收率,$\Omega^+$和$\Omega^-$分别是上下半球。

方向反照率(Directional Albedo): \(\rho(\omega_i) = \int_{\Omega} f_r(\omega_i, \omega_o) \cos\theta_o d\omega_o\)

这表示从方向$\omega_i$入射的光被反射的总比例。

半球反照率(Hemispherical Albedo): \(\rho_{hh} = \frac{1}{\pi} \int_{\Omega_i} \int_{\Omega_o} f_r(\omega_i, \omega_o) \cos\theta_i \cos\theta_o d\omega_i d\omega_o\)

白炉测试(White Furnace Test): 在均匀照明环境中,表面反射的总能量应等于入射能量乘以反照率: \(L_o = \rho_{hh} \cdot L_{\text{env}}\)

4. 线性性(Linearity): BRDF对入射光强度是线性的,这使得我们可以将复杂光照分解为简单光源的叠加。数学表述: \(L_o = \int f_r L_i \cos\theta_i d\omega_i = \int f_r (L_{i1} + L_{i2}) \cos\theta_i d\omega_i = L_{o1} + L_{o2}\)

叠加原理的应用

5. 平滑性与连续性: 物理BRDF通常是连续的(除了镜面反射的狄拉克δ函数),这保证了渲染结果的视觉连续性。

数学刻画

6. 对称性(Symmetry): 各向同性材质的BRDF具有旋转对称性: \(f_r(R\omega_i, R\omega_o) = f_r(\omega_i, \omega_o)\)

对于任意绕法线的旋转$R$。

简化形式:各向同性BRDF可表示为三个角度的函数: \(f_r(\omega_i, \omega_o) = f_r(\theta_i, \theta_o, \phi_o - \phi_i)\)

进一步简化:许多模型只依赖于:

7. 正定性(Positive Definiteness): BRDF定义的积分算子是正定的: \(\int_{\Omega_i} \int_{\Omega_o} g(\omega_i) f_r(\omega_i, \omega_o) g(\omega_o) \cos\theta_i \cos\theta_o d\omega_i d\omega_o \geq 0\)

对于任意函数$g$。

8. 渐近行为(Asymptotic Behavior): 掠射角处的行为对外观至关重要:

9.1.3 从BRDF到BSDF:透射与散射

双向散射分布函数(Bidirectional Scattering Distribution Function, BSDF)是BRDF的推广,包含了反射和透射:

\[f_s(\omega_i, \omega_o) = f_r(\omega_i, \omega_o) + f_t(\omega_i, \omega_o)\]

其中$f_t$是双向透射分布函数(BTDF)。

坐标系约定

广义散射方程: \(L_o(\mathbf{x}, \omega_o) = \int_{\Omega^+} f_r(\omega_i, \omega_o) L_i(\omega_i) |\cos\theta_i| d\omega_i + \int_{\Omega^-} f_t(\omega_i, \omega_o) L_i(\omega_i) |\cos\theta_i| d\omega_i\)

其中$\Omega^+$和$\Omega^-$分别表示上半球和下半球。

对于透射,需要考虑折射定律(Snell’s Law): \(\eta_i \sin\theta_i = \eta_t \sin\theta_t\)

其中$\eta_i$和$\eta_t$分别是入射和透射介质的折射率。

矢量形式的折射定律: \(\eta_i (\omega_i - (\omega_i \cdot \mathbf{n})\mathbf{n}) = \eta_t (\omega_t - (\omega_t \cdot \mathbf{n})\mathbf{n})\)

这表明切向分量按折射率比例缩放。

折射方向计算: 给定入射方向$\omega_i$和表面法线$\mathbf{n}$,折射方向$\omega_t$为: \(\omega_t = \frac{\eta_i}{\eta_t}\omega_i + \left(\frac{\eta_i}{\eta_t}\cos\theta_i - \sqrt{1 - \left(\frac{\eta_i}{\eta_t}\right)^2(1 - \cos^2\theta_i)}\right)\mathbf{n}\)

数值稳定性:判别式$D = 1 - (\eta_i/\eta_t)^2(1 - \cos^2\theta_i)$

临界角与全内反射: 当光从光密介质射向光疏介质时($\eta_i > \eta_t$),存在临界角: \(\theta_c = \arcsin\left(\frac{\eta_t}{\eta_i}\right)\)

当$\theta_i > \theta_c$时,发生全内反射,此时BTDF为0,所有能量都被反射。

全内反射的应用

BTDF的特殊性质

  1. 广义互易性:由于折射率不同,BTDF不满足简单的互易性,而是: \(\eta_i^2 f_t(\omega_i, \omega_o) = \eta_t^2 f_t(\omega_o, \omega_i)\)

    推导:从辐射度传输的可逆性和立体角变换得出。

  2. 雅可比行列式:从立体角到立体角的变换需要考虑折射导致的立体角压缩/扩展: \(\frac{d\omega_t}{d\omega_i} = \frac{\eta_t^2}{\eta_i^2} \frac{\cos\theta_t}{\cos\theta_i}\)

    几何解释:光束截面积的变化和传播方向的改变。

  3. 辐射度不变性破坏:不同于反射,折射时辐射度会改变: \(L_t = \frac{\eta_t^2}{\eta_i^2} L_i\)

    这是因为光速在不同介质中不同。

理想折射BTDF: 对于理想光滑表面: \(f_t(\omega_i, \omega_o) = \frac{(1 - F(\omega_i))}{\eta_t^2} \frac{|\mathbf{n} \cdot \omega_t|}{|\mathbf{n} \cdot \omega_i|} \delta(\omega_o - \omega_t)\)

其中$F(\omega_i)$是菲涅尔反射率,$(1-F)$是透射率。

粗糙折射表面: 对于粗糙透明表面(如磨砂玻璃),可以使用微表面理论: \(f_t(\omega_i, \omega_o) = \frac{|\mathbf{n} \cdot \omega_i| |\mathbf{n} \cdot \omega_o|}{|\omega_i \cdot \mathbf{h}| |\omega_o \cdot \mathbf{h}|} \frac{\eta_o^2}{\eta_i^2} \frac{(1-F(\omega_i, \mathbf{h})) D(\mathbf{h}) G(\omega_i, \omega_o)}{|\mathbf{n} \cdot \omega_i| |\mathbf{n} \cdot \omega_o|}\)

其中半程向量$\mathbf{h}$需要考虑折射: \(\mathbf{h} = -\frac{\eta_i \omega_i + \eta_o \omega_o}{|\eta_i \omega_i + \eta_o \omega_o|}\)

体积散射与BSSDF: 当散射发生在材质内部时,需要引入双向散射表面分布函数(BSSDF): \(S(\mathbf{x}_i, \omega_i, \mathbf{x}_o, \omega_o)\)

描述从位置$\mathbf{x}_i$入射的光如何在位置$\mathbf{x}_o$出射。

薄层近似: 对于薄层半透明材质,可以将BSSDF简化为修正的BSDF: \(f_s^{\text{thin}}(\omega_i, \omega_o) = f_s^{\text{surface}}(\omega_i, \omega_o) + T(\omega_i) \cdot f_s^{\text{volume}} \cdot T(\omega_o)\)

其中$T$是透射函数,$f_s^{\text{volume}}$描述体积内的散射。

9.1.4 球谐函数与BRDF表示

球谐函数(Spherical Harmonics, SH)提供了在球面上表示函数的正交基:

\[Y_l^m(\theta, \phi) = \sqrt{\frac{2l+1}{4\pi}\frac{(l-|m|)!}{(l+|m|)!}} P_l^{|m|}(\cos\theta) e^{im\phi}\]

其中$P_l^m$是关联勒让德多项式。

实数球谐函数: 在图形学中通常使用实数形式: \(Y_{lm} = \begin{cases} \sqrt{2} \cdot \text{Re}(Y_l^{|m|}) & m > 0 \\ Y_l^0 & m = 0 \\ \sqrt{2} \cdot \text{Im}(Y_l^{|m|}) & m < 0 \end{cases}\)

前几阶球谐函数(实数形式):

正交性: \(\int_{\mathcal{S}^2} Y_{lm}(\omega) Y_{l'm'}(\omega) d\omega = \delta_{ll'}\delta_{mm'}\)

BRDF的球谐展开: 由于BRDF是四维函数,需要更复杂的表示。

方法一:切片投影 固定入射方向$\omega_i$,将BRDF投影到球谐基: \(f_r(\omega_i, \omega_o) = \sum_{l=0}^{\infty} \sum_{m=-l}^{l} a_{lm}(\omega_i) Y_{lm}(\omega_o)\)

其中系数: \(a_{lm}(\omega_i) = \int_{\mathcal{S}^2} f_r(\omega_i, \omega_o) Y_{lm}(\omega_o) d\omega_o\)

方法二:双球谐展开 使用球面上的张量积: \(f_r(\omega_i, \omega_o) = \sum_{l_1,m_1} \sum_{l_2,m_2} c_{l_1m_1,l_2m_2} Y_{l_1m_1}(\omega_i) Y_{l_2m_2}(\omega_o)\)

存储需求:$(l_{max}+1)^4$个系数。

方法三:旋转不变分解 对于各向同性BRDF,利用Clebsch-Gordan系数: \(f_r(\omega_i, \omega_o) = \sum_{l=0}^{\infty} a_l \sum_{m=-l}^{l} Y_{lm}(\omega_i) Y_{lm}^*(\omega_o)\)

这利用了加法定理: \(P_l(\omega_i \cdot \omega_o) = \frac{4\pi}{2l+1} \sum_{m=-l}^{l} Y_{lm}(\omega_i) Y_{lm}^*(\omega_o)\)

Zonal Harmonics表示: 当BRDF只依赖于相对角度时: \(f_r(\cos\theta) = \sum_{l=0}^{\infty} \hat{f}_l P_l(\cos\theta)\)

其中$\theta$是$\omega_i$和$\omega_o$之间的夹角,系数: \(\hat{f}_l = \frac{2l+1}{2} \int_{-1}^{1} f_r(x) P_l(x) dx\)

频率分析

截断误差分析: 截断到$l_{max}$阶的均方误差: \(\epsilon^2 = \sum_{l=l_{max}+1}^{\infty} \sum_{m=-l}^{l} |a_{lm}|^2\)

对于带限函数,误差随$l_{max}$指数衰减。

旋转操作: 球谐函数在旋转下的变换: \(Y_{lm}(R\omega) = \sum_{m'=-l}^{l} D_{mm'}^l(R) Y_{lm'}(\omega)\)

其中$D^l$是Wigner D-矩阵。

卷积定理: 球面卷积在球谐域变为乘法: \((f * g)_{lm} = \sqrt{\frac{4\pi}{2l+1}} f_{l0} g_{lm}\)

这使得环境光照的计算大大简化。

实际应用中的技巧

  1. 带宽限制
    • Lambertian:3阶足够(9个系数)
    • Phong光照:需要5-7阶
    • 镜面反射:需要极高阶或其他表示
  2. 负值处理
    • 使用平方球谐函数
    • 添加常数偏移
    • 局部支撑基函数
  3. 压缩存储
    • 利用对称性减少系数
    • 量化低重要性系数
    • 稀疏表示高频分量

与其他基函数的比较

PRT中的应用: 传输算子$T$将入射光照$L_{in}$映射到出射辐射度: \(L_{out} = T \cdot L_{in}\)

在球谐基下,$T$是一个矩阵,可预计算并实时应用。

9.1.5 BRDF的测量与拟合

测量设备:测角光度计(Gonioreflectometer)通过机械臂控制光源和检测器位置,系统地测量不同角度组合下的反射率。

测量原理

  1. 绝对测量:使用已知反射率的标准板校准
  2. 相对测量:测量相对于参考材质的反射率
  3. HDR捕获:多次曝光覆盖大动态范围

典型测量装置

测量挑战

采样策略

  1. 均匀采样:简单但低效
  2. 自适应采样:在变化剧烈区域加密
  3. 重要性采样:基于预期BRDF形状
  4. 压缩感知:利用稀疏性减少采样

数据处理流程

原始测量 → 噪声过滤 → 坐标变换 → 插值/外推 → 验证

坐标参数化

  1. 半角参数化:$(\theta_h, \phi_h, \theta_d, \phi_d)$
    • 优点:更好地捕获镜面峰
    • 缺点:雅可比变换复杂
  2. Rusinkiewicz参数化:基于半程向量和差分角
    • 更均匀的采样分布
    • 自然的各向同性/各向异性分离

数据表示

  1. 表格形式:直接存储测量数据
    • 存储格式:通常90×90×180×4(角度×角度×角度×RGB)
    • 插值方法:三线性、三次样条、RBF
    • 压缩技术:PCA、小波、张量分解
  2. 解析模型拟合
    • 单lobe模型:Cook-Torrance、Ward、Lafortune
    • 多lobe模型:混合多个基本BRDF
    • 数据驱动模型:使用测量数据训练
  3. 基函数分解
    • 球谐函数:低频成分
    • 小波基:多分辨率表示
    • Zernike多项式:圆域上的正交基
    • 混合表示:低频用SH,高频用其他

数据库与标准

拟合方法

1. 非线性最小二乘: \(\min_{\theta} \sum_{i} w_i \left(\log f_r^{\text{measured}}(\omega_{i}) - \log f_r^{\text{model}}(\omega_{i}; \theta)\right)^2\)

使用对数空间减少动态范围影响。

优化算法

2. 最大似然估计: 假设测量噪声模型(如高斯噪声): \(p(y_i | \mu_i) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(y_i - \mu_i)^2}{2\sigma^2}\right)\)

对数似然: \(\log \mathcal{L} = -\frac{1}{2\sigma^2} \sum_i (y_i - f_r(\omega_i; \theta))^2 + \text{const}\)

3. 贝叶斯推断: 引入参数先验$p(\theta)$:

后验采样方法:

4. 机器学习方法

拟合质量评估

数值误差度量

感知误差度量

验证方法

  1. 交叉验证:留出测试集
  2. 白炉测试:检查能量守恒
  3. 互易性测试:验证物理正确性
  4. 外推测试:未测量角度的预测

实时重建技术

未来方向

9.2 高级材质模型

9.2.1 微表面理论(Microfacet Theory)

微表面理论将粗糙表面建模为大量微小镜面的统计分布。核心思想:宏观BRDF是微观几何的统计平均。

基本假设

  1. 表面由微小的理想镜面组成
  2. 微表面尺度远大于光波长(几何光学有效)
  3. 微表面尺度远小于像素(统计平均有意义)
  4. 每个微表面是完美镜面(菲涅尔反射)

微表面BRDF推导: 从微观到宏观的统计过程:

  1. 只有法线为$\omega_h$的微表面能将光从$\omega_i$反射到$\omega_o$
  2. 需要考虑微表面的可见性(遮蔽和阴影)
  3. 积分所有贡献的微表面

Cook-Torrance模型: \(f_r(\omega_i, \omega_o) = \frac{D(\omega_h) G(\omega_i, \omega_o) F(\omega_i, \omega_h)}{4 \cos\theta_i \cos\theta_o}\)

其中:

分母的物理意义: $4 \cos\theta_i \cos\theta_o$项来自于:

微表面模型的优势

  1. 物理基础扎实
  2. 参数直观(粗糙度、折射率)
  3. 能量守恒(正确实现时)
  4. 可扩展(各向异性、多次散射等)

9.2.2 法线分布函数(D项)

法线分布函数$D(\omega_h)$描述了微表面法线的统计分布,必须满足归一化条件: \(\int_{\Omega} D(\omega_h) \cos\theta_h d\omega_h = 1\)

这确保了微表面的投影面积等于宏观表面面积。

物理意义

Beckmann分布: \(D_{\text{Beckmann}}(\omega_h) = \frac{1}{\pi \alpha^2 \cos^4\theta_h} \exp\left(-\frac{\tan^2\theta_h}{\alpha^2}\right)\)

其中$\alpha$是粗糙度参数。

特性

GGX/Trowbridge-Reitz分布: \(D_{\text{GGX}}(\omega_h) = \frac{\alpha^2}{\pi ((\alpha^2 - 1)\cos^2\theta_h + 1)^2}\)

GGX分布具有更长的尾部,能更好地模拟真实材质的高光。

GGX vs Beckmann

各向异性扩展: 对于各向异性材质,使用两个粗糙度参数$\alpha_x$和$\alpha_y$: \(D_{\text{aniso}}(\omega_h) = \frac{1}{\pi \alpha_x \alpha_y} \frac{1}{(\frac{h_x^2}{\alpha_x^2} + \frac{h_y^2}{\alpha_y^2} + h_z^2)^2}\)

其中$(h_x, h_y, h_z)$是半程向量在切空间的坐标。

其他分布

  1. Phong分布(已过时):$D = \frac{n+2}{2\pi}\cos^n\theta_h$
  2. Berry分布:考虑自相关长度的物理模型
  3. ABC分布:统一框架,可调节分布形状

粗糙度参数映射: 实践中常用感知线性的粗糙度: \(\alpha = \text{roughness}^2\)

这使得参数调节更直观。

9.2.3 几何遮蔽函数(G项)

几何函数描述了微表面间的相互遮蔽和阴影效应。

物理意义

Smith模型: \(G(\omega_i, \omega_o) = G_1(\omega_i) G_1(\omega_o)\)

其中$G_1$是单向遮蔽函数。

假设

GGX的Smith-G1: \(G_1(\omega) = \frac{2\cos\theta}{1 + \sqrt{1 + \alpha^2 \tan^2\theta}}\)

推导思路

  1. 假设微表面高度服从正态分布
  2. 使用射线与随机粗糙表面相交的统计理论
  3. 得出可见性的解析表达式

高度相关遮蔽(Height-Correlated Masking-Shadowing): 考虑入射和出射方向的相关性: \(G(\omega_i, \omega_o) = \frac{1}{1 + \Lambda(\omega_i) + \Lambda(\omega_o)}\)

其中$\Lambda$是辅助函数: \(\Lambda(\omega) = \frac{-1 + \sqrt{1 + \alpha^2 \tan^2\theta}}{2}\)

相关性的重要性

其他G函数

  1. Cook-Torrance G:$G = \min(1, \frac{2n \cdot h \cdot n \cdot v}{v \cdot h}, \frac{2n \cdot h \cdot n \cdot l}{v \cdot h})$
  2. Kelemen G:$G = \frac{n \cdot l \cdot n \cdot v}{v \cdot h}$(快速近似)
  3. V-cavity模型:基于V形凹槽的简化模型

实用近似: Schlick-GGX近似(用于实时渲染): \(G_{\text{Schlick}}(\omega) = \frac{\cos\theta}{\cos\theta(1-k) + k}\)

其中$k = \frac{(\text{roughness}+1)^2}{8}$(直接光照)或$k = \frac{\text{roughness}^2}{2}$(IBL)。

9.2.4 菲涅尔反射(F项)与复杂IOR

菲涅尔方程描述了反射率随入射角的变化。

Schlick近似: \(F_{\text{Schlick}}(\omega_i, \omega_h) = F_0 + (1 - F_0)(1 - \cos\theta_i)^5\)

其中$F_0$是垂直入射时的反射率: \(F_0 = \left(\frac{\eta_1 - \eta_2}{\eta_1 + \eta_2}\right)^2\)

复数折射率: 对于导体,折射率是复数$\tilde{\eta} = \eta + i\kappa$,其中$\kappa$是消光系数。

完整的菲涅尔方程(非极化光): \(F = \frac{1}{2}(F_s + F_p)\)

其中$F_s$和$F_p$分别是s偏振和p偏振的反射率。

色散效应: 折射率随波长变化,可用Cauchy方程或Sellmeier方程建模: \(\eta(\lambda) = A + \frac{B}{\lambda^2} + \frac{C}{\lambda^4}\)

9.2.5 分层材质与BSDF组合

现实材质常由多层组成,如汽车漆(底漆+金属漆+清漆)。

层间多次反射: 设上层BSDF为$f_1$,透射率为$T_1$,下层BSDF为$f_2$,则组合BSDF: \(f_{\text{combined}} = f_1 + \frac{T_1^{\downarrow} f_2 T_1^{\uparrow}}{1 - f_2 * R_1}\)

其中$*$表示卷积,$R_1$是上层的反射算子。

能量补偿: 微表面模型可能丢失多次散射能量,需要补偿项: \(f_r^{\text{ms}} = \frac{(1-E(\omega_i))(1-E(\omega_o))}{\pi(1-E_{\text{avg}})} F_{\text{avg}}\)

其中$E(\omega)$是方向反照率,$E_{\text{avg}}$是平均反照率。

9.3 复杂外观建模

9.3.1 各向异性材质

各向异性材质的反射特性依赖于表面的切向量方向。

拉丝金属: 微表面沿特定方向排列,使用各向异性法线分布: \(D_{\text{aniso}}(\omega_h) = \frac{1}{\pi \alpha_t \alpha_b} \frac{1}{\left(\frac{(\omega_h \cdot \mathbf{t})^2}{\alpha_t^2} + \frac{(\omega_h \cdot \mathbf{b})^2}{\alpha_b^2} + (\omega_h \cdot \mathbf{n})^2\right)^2}\)

其中$\mathbf{t}$和$\mathbf{b}$是切向量和副切向量。

织物材质: 纤维结构导致复杂的散射行为,常用专门的BRDF模型如Ashikhmin-Shirley或微圆柱模型。

头发渲染: Marschner模型将头发散射分解为三个分量:

每个分量有不同的纵向和方位散射函数。

9.3.2 次表面散射(皮肤、玉石、牛奶)

次表面散射(Subsurface Scattering, SSS)描述光线进入半透明材质内部,经多次散射后从不同位置射出的现象。

BSSRDF(双向次表面散射反射分布函数): \(L_o(\mathbf{x}_o, \omega_o) = \int_A \int_{\Omega} S(\mathbf{x}_i, \omega_i, \mathbf{x}_o, \omega_o) L_i(\mathbf{x}_i, \omega_i) \cos\theta_i d\omega_i dA\)

其中$S$是BSSRDF,描述从位置$\mathbf{x}_i$入射的光如何影响位置$\mathbf{x}_o$的出射。

偶极子近似(Dipole Approximation): \(R_d(r) = \frac{\alpha'}{4\pi} \left[\frac{z_r(1+\sigma_{tr}d_r)e^{-\sigma_{tr}d_r}}{d_r^3} + \frac{z_v(1+\sigma_{tr}d_v)e^{-\sigma_{tr}d_v}}{d_v^3}\right]\)

其中:

多极子方法: 对于薄层材质,需要考虑多次内反射,使用多个镜像源。

量化散射(Quantized Diffusion): 将连续扩散过程离散化,适合GPU实现: \(u(r,t+\Delta t) = \sum_{i} G(r-r_i, \Delta t) u(r_i, t)\)

9.3.3 参与介质与体积渲染

参与介质(烟雾、云、大气)中的光传输由辐射传输方程(RTE)描述:

\[(\omega \cdot \nabla) L(\mathbf{x}, \omega) = -\sigma_t(\mathbf{x}) L(\mathbf{x}, \omega) + \sigma_s(\mathbf{x}) \int_{\Omega} p(\omega', \omega) L(\mathbf{x}, \omega') d\omega' + \sigma_a(\mathbf{x}) L_e(\mathbf{x}, \omega)\]

其中:

相函数: Henyey-Greenstein相函数广泛用于各向异性散射: \(p_{HG}(\cos\theta) = \frac{1}{4\pi} \frac{1 - g^2}{(1 + g^2 - 2g\cos\theta)^{3/2}}\)

其中$g \in [-1, 1]$是各向异性参数。

体积渲染积分: \(L(\mathbf{x}, \omega) = \int_0^d T(0,t) \sigma_s(\mathbf{x}+t\omega) L_i(\mathbf{x}+t\omega, \omega) dt + T(0,d) L_{\text{background}}\)

其中透射率$T(a,b) = \exp\left(-\int_a^b \sigma_t(\mathbf{x}+s\omega) ds\right)$

9.3.4 波动光学效应

当几何特征接近光波长时,需考虑波动光学效应。

薄膜干涉: 对于厚度$d$的薄膜,反射率: \(R(\lambda) = \frac{r_1^2 + r_2^2 + 2r_1r_2\cos(2\beta)}{1 + r_1^2r_2^2 + 2r_1r_2\cos(2\beta)}\)

其中$\beta = 2\pi nd\cos\theta_t / \lambda$,$r_1, r_2$是界面反射系数。

衍射光栅: 光栅方程: \(d(\sin\theta_i + \sin\theta_o) = m\lambda\)

其中$d$是光栅周期,$m$是衍射级次。

结构色: 蝴蝶翅膀、CD等的虹彩效应源于微结构的衍射和干涉。可用FDTD(时域有限差分)或严格耦合波分析(RCWA)模拟。

9.3.5 数据驱动的外观建模

BTF(双向纹理函数): \(\text{BTF}(u,v,\omega_i,\omega_o) \in \mathbb{R}^{m \times n \times k^2 \times 3}\)

捕获空间变化的材质属性,需要大量存储和采样。

神经材质表示: 使用神经网络表示BRDF: \(f_r = \text{MLP}(\omega_i, \omega_o; \theta)\)

优势:

可微渲染与材质反演: 通过梯度下降优化材质参数: \(\mathcal{L} = \|I_{\text{rendered}}(\theta) - I_{\text{target}}\|^2\)

使用自动微分框架计算$\frac{\partial \mathcal{L}}{\partial \theta}$。

本章小结

本章深入探讨了计算机图形学中材质与外观的数学建模:

核心概念

关键公式

高级技术

实践要点

练习题

基础题

习题9.1 证明BRDF的互易性原理。从麦克斯韦方程组出发,说明为什么$f_r(\omega_i, \omega_o) = f_r(\omega_o, \omega_i)$。

提示:考虑时间反演对称性和洛伦兹互易定理。

答案 从麦克斯韦方程组的时间反演对称性出发: 1. 电磁场满足:$\mathbf{E}(-t) = \mathbf{E}(t)$,$\mathbf{B}(-t) = -\mathbf{B}(t)$ 2. 坡印廷矢量:$\mathbf{S} = \mathbf{E} \times \mathbf{H}$在时间反演下改变方向 3. 光路可逆:若光线可从A到B,则必可从B到A 4. 在线性、非磁性介质中,散射矩阵满足互易性 5. BRDF作为散射的宏观描述继承此性质 因此$f_r(\omega_i, \omega_o) = f_r(\omega_o, \omega_i)$。

习题9.2 给定粗糙度$\alpha = 0.3$的GGX分布,计算法线与半程向量夹角为30°时的$D$值。

提示:直接代入GGX公式计算。

答案 $\theta_h = 30° = \pi/6$,$\cos\theta_h = \sqrt{3}/2$ 代入GGX公式: $$D = \frac{\alpha^2}{\pi ((\alpha^2 - 1)\cos^2\theta_h + 1)^2}$$ $$= \frac{0.09}{\pi ((0.09 - 1) \cdot 0.75 + 1)^2}$$ $$= \frac{0.09}{\pi ((-0.91) \cdot 0.75 + 1)^2}$$ $$= \frac{0.09}{\pi (0.3175)^2}$$ $$≈ 0.284$$

习题9.3 计算空气($\eta_1 = 1$)到玻璃($\eta_2 = 1.5$)界面的菲涅尔反射率$F_0$。使用此值,计算入射角为60°时的Schlick近似值。

提示:先计算$F_0$,再使用Schlick公式。

答案 垂直入射反射率: $$F_0 = \left(\frac{\eta_1 - \eta_2}{\eta_1 + \eta_2}\right)^2 = \left(\frac{1 - 1.5}{1 + 1.5}\right)^2 = \left(\frac{-0.5}{2.5}\right)^2 = 0.04$$ 入射角60°时,$\cos\theta_i = 0.5$: $$F = F_0 + (1 - F_0)(1 - \cos\theta_i)^5$$ $$= 0.04 + 0.96 \times 0.5^5$$ $$= 0.04 + 0.96 \times 0.03125$$ $$= 0.04 + 0.03 = 0.07$$

习题9.4 对于Henyey-Greenstein相函数,当$g = 0.8$时,计算前向散射($\theta = 0°$)和后向散射($\theta = 180°$)的相函数值之比。

提示:代入HG相函数公式,注意$\cos(0°) = 1$,$\cos(180°) = -1$。

答案 HG相函数:$p_{HG}(\cos\theta) = \frac{1}{4\pi} \frac{1 - g^2}{(1 + g^2 - 2g\cos\theta)^{3/2}}$ 前向散射($\cos\theta = 1$): $$p_{HG}(1) = \frac{1}{4\pi} \frac{1 - 0.64}{(1 + 0.64 - 1.6)^{3/2}} = \frac{1}{4\pi} \frac{0.36}{0.04^{3/2}} = \frac{1}{4\pi} \frac{0.36}{0.008} = \frac{45}{4\pi}$$ 后向散射($\cos\theta = -1$): $$p_{HG}(-1) = \frac{1}{4\pi} \frac{0.36}{(1 + 0.64 + 1.6)^{3/2}} = \frac{1}{4\pi} \frac{0.36}{3.24^{3/2}} = \frac{1}{4\pi} \frac{0.36}{5.832} ≈ \frac{0.0617}{4\pi}$$ 比值:$\frac{p_{HG}(1)}{p_{HG}(-1)} = \frac{45}{0.0617} ≈ 729$

挑战题

习题9.5 推导各向异性GGX分布的归一化条件。证明: \(\int_{\Omega} D_{aniso}(\omega_h) \cos\theta_h d\omega_h = 1\)

提示:使用球坐标系,将$\omega_h$分解为切空间坐标。

答案 设切空间坐标系,$\omega_h = (h_x, h_y, h_z)$,其中$h_x = \sin\theta\cos\phi$,$h_y = \sin\theta\sin\phi$,$h_z = \cos\theta$。 各向异性GGX: $$D_{aniso} = \frac{1}{\pi \alpha_x \alpha_y} \frac{1}{(\frac{h_x^2}{\alpha_x^2} + \frac{h_y^2}{\alpha_y^2} + h_z^2)^2}$$ 积分: $$\int_0^{2\pi} \int_0^{\pi/2} D_{aniso} \cos\theta \sin\theta d\theta d\phi$$ 令$u = \sin^2\theta$,则: $$= \frac{1}{\pi \alpha_x \alpha_y} \int_0^{2\pi} \int_0^1 \frac{1-u}{2(a(\phi)u + (1-u))^2} du d\phi$$ 其中$a(\phi) = \frac{\cos^2\phi}{\alpha_x^2} + \frac{\sin^2\phi}{\alpha_y^2} - 1$。 经过复杂积分(使用留数定理或数值验证),结果为1。

习题9.6 设计一个BRDF模型,同时具有漫反射、镜面反射和逆反射(retroreflection)特性。给出数学表达式并证明满足能量守恒。

提示:考虑将多个BRDF分量线性组合,逆反射可用窄高斯分布在$\omega_o = -\omega_i$附近建模。

答案 组合BRDF: $$f_r = k_d f_d + k_s f_s + k_r f_r$$ 其中: - 漫反射:$f_d = \frac{1}{\pi}$ - 镜面反射:$f_s = \frac{D \cdot G \cdot F}{4 \cos\theta_i \cos\theta_o}$(微表面模型) - 逆反射:$f_r = \frac{A}{\cos\theta_i} \exp\left(-\frac{|\omega_o + \omega_i|^2}{2\sigma^2}\right)$ 能量守恒要求: 1. $k_d + k_s + k_r \leq 1$ 2. 对逆反射项,需要:$A = \frac{1}{2\pi\sigma^2(1-e^{-2/\sigma^2})}$ 验证: $$\int_{\Omega} f_r \cos\theta_o d\omega_o = k_d + k_s + k_r \int_{\Omega} \frac{A}{\cos\theta_i} \exp(...) \cos\theta_o d\omega_o$$ 通过适当选择$\sigma$和归一化常数$A$,可保证总反射率不超过1。

习题9.7 推导薄膜干涉的反射光谱,考虑多次内反射。解释为什么肥皂泡呈现彩虹色。

提示:使用光程差和复振幅叠加,考虑相位关系。

答案 设薄膜厚度$d$,折射率$n$,入射角$\theta_i$,折射角$\theta_t$。 光程差:$\Delta = 2nd\cos\theta_t$ 考虑多次反射,总反射振幅: $$r_{total} = r_1 + \frac{t_1 t_1' r_2 e^{i\delta}}{1 - r_1' r_2 e^{i\delta}}$$ 其中$\delta = 4\pi nd\cos\theta_t / \lambda$。 反射率: $$R = |r_{total}|^2 = \frac{r_1^2 + r_2^2 + 2r_1r_2\cos\delta}{1 + r_1^2r_2^2 + 2r_1r_2\cos\delta}$$ 彩虹色原因: 1. 不同波长有不同的相位差$\delta$ 2. 相长干涉条件:$\Delta = m\lambda$(亮纹) 3. 相消干涉条件:$\Delta = (m+1/2)\lambda$(暗纹) 4. 薄膜厚度变化导致不同位置强化不同颜色 5. 观察角度变化也改变光程差,产生颜色变化

习题9.8 分析神经网络表示BRDF的优缺点。设计一个保证物理约束(互易性、能量守恒)的网络架构。

提示:考虑如何在网络结构或损失函数中编码物理约束。

答案 神经BRDF优缺点: 优点: - 紧凑表示复杂BRDF - 连续可微,适合优化 - 可学习未知材质 - 易于插值和编辑 缺点: - 难以保证物理约束 - 需要大量训练数据 - 推理计算成本 - 缺乏可解释性 物理约束架构设计: 1. **互易性**:使用对称输入编码 ``` input = sort([ω_i, ω_o]) 或 input = [ω_i + ω_o, |ω_i - ω_o|] ``` 2. **能量守恒**:输出层归一化 ``` f_r_raw = MLP(input) albedo = ∫f_r_raw cosθ dω (预计算或学习) f_r = f_r_raw / max(1, albedo) ``` 3. **非负性**:使用ReLU或Softplus激活 4. **损失函数**: ``` L = L_data + λ_1 L_reciprocity + λ_2 L_energy L_reciprocity = |f_r(ω_i,ω_o) - f_r(ω_o,ω_i)|² L_energy = max(0, ∫f_r cosθ dω - 1)² ``` 5. **架构示例**: - 输入:6D(两个方向)→ 4D(对称编码) - 隐藏层:[128, 256, 256, 128],使用SIREN激活 - 输出:RGB值,经过物理约束处理

常见陷阱与错误 (Gotchas)

1. BRDF实现错误

错误:忘记半程向量归一化

half = wi + wo  // 错误!

正确

half = normalize(wi + wo)

错误:混淆角度定义

2. 能量守恒违反

陷阱:微表面BRDF可能超过1

陷阱:多层材质能量累加错误

3. 数值稳定性问题

GGX在$\alpha = 0$时的奇异性

// 错误:直接使用alpha
D = alpha^2 / (pi * denominator^2)

// 正确:钳制最小值
alpha = max(0.001, roughness^2)

菲涅尔计算的边界情况

4. 采样效率问题

错误:使用均匀采样计算BRDF积分

错误:忽略多重重要性采样(MIS)

5. 物理准确性错误

混淆辐射度量单位

忽略色散

6. 性能优化陷阱

预计算错误

着色器精度问题

最佳实践检查清单

设计阶段

实现阶段

验证阶段

优化阶段

艺术家工作流

扩展性考虑