- 课程主讲:闫令琪 (Lingqi Yan) | UCSB
- B站课程链接:https://www.bilibili.com/video/BV1X7411F744
- 本章对应课件:第 18 讲(Advanced Topics in Rendering)
说明:这是渲染这一大块的收尾。前面从渲染方程一路走到路径追踪,基本框架已经搭好了;这一篇不再推导新方程,而是横向铺开——先看还有哪些别的光传输算法(BDPT、MLT、光子映射、VCM、即时辐射度),再看当"表面 + BRDF"这套假设不够用时,怎么给参与介质、毛发、皮肤、布料这些复杂外观建模。
1 有偏与无偏 (Biased vs Unbiased)
光线追踪的延续,对于渲染,每个人有每个人的理解和解决方法论。评价一个渲染算法,第一个要问的就是它的估计值是否无偏:
| 类型 | 定义 | 特点 |
|---|---|---|
| 无偏 (Unbiased) | 估计的期望值等于真实值,无论采样数多少 | 无系统误差 |
| 有偏 (Biased) | 估计的期望值不等于真实值 | 有系统误差 |
| 一致 (Consistent) | 有偏,但采样数趋于无穷时收敛到正确值 | 有偏但可用 |
有偏的一个直观理解:有偏 = 模糊,一致 = 无穷采样时不模糊。
关系:无偏一定一致,一致不一定无偏。
2 无偏光线传输方法
双向路径追踪 (BDPT)
思想:
- 从相机和光源分别追踪子路径
- 连接两条子路径的端点

适用场景:光在光源侧的传输复杂时效果好。
缺点:实现复杂,速度较慢。
Metropolis 光线传输 (MLT)
思想:一种全局光照渲染算法,基于马尔可夫链蒙特卡洛 (MCMC) 采样,寻找并复用"重要光路"。
MLT 的突破在于,它不是独立采样,而是通过"变异"来局部探索路径空间。一旦找到一条能产生显著贡献的光路,算法就对它做微小修改(扰动),生成一条邻近的新光路;如果新路径的贡献更大或符合统计规律,就被"接受",否则可能被拒绝。这样找到的重要光路被"复用"了,采样效率因此大幅提高。

特点:
- 非常擅长局部探索困难的光路
- 通过扰动现有路径生成新路径
优点:对困难光路效果好,无偏。
缺点:
- 难以估计收敛速度,不易并行化
- 各像素收敛速度不均,结果"脏",残留相关噪声,需要额外处理
- 对于简单场景,可能不如路径追踪或 BDPT 高效
- 不适合渲染动画

3 有偏光线传输方法
光子映射 (Photon Mapping)
光子映射(Photon Mapping)是另一种经典的全局光照算法,由 Henrik Wann Jensen 在 1996 年提出。核心思想是:从光源出发发射光子,让光子在场景中反弹,最后把光子收集起来用于渲染。
它和 BDPT、MLT 的思路不同:BDPT 从两端追踪路径再连接,MLT 通过变异探索路径空间,而光子映射是先把光能"存"在场景里,再查询。

这是一种两阶段方法,非常擅长处理 SDS(镜面-漫反射-镜面)路径和生成焦散效果。
阶段 1:光子追踪
- 从光源发射大量光子
- 光子在场景中传播,遇到表面时:
- 部分被吸收
- 部分被反射
- 部分被折射
- 每次光子与表面交互,就记录一条光子命中点,存入光子图 (Photon Map)
光子图里保存的是:位置、入射方向、能量(颜色)。

阶段 2:光子收集 (Final Gathering)
- 从相机发射子路径,弹射到漫反射表面
- 基于局部光子密度估计光照
- 加上直接光照,得到最终颜色

密度估计:光子密度高的区域更亮。对每个着色点,找最近的 $N$ 个光子,计算覆盖面积 $\Delta A$:
$$ \text{密度} \approx \frac{\Delta N}{\Delta A} $$为什么是有偏的:$dN/dA \neq \Delta N / \Delta A$,但发射更多光子时 $\Delta A \to dA$,所以它是一致的。
课件设问:为什么不用"固定范围搜索"做密度估计?——固定范围无法自适应局部光子密度,在光子稀疏处会引入偏差。
| $N$ 小 | $N$ 大 |
|---|---|
| 噪声大 | 模糊 |
顶点连接与合并 (VCM)
VCM 的本质是在 BDPT 的基础上,增加了一个"合并"的采样步骤。它从相机和光源两端分别追踪路径,然后对每个顶点采用两种不同的策略来贡献光能:
- 顶点连接:这是 BDPT 的经典操作。把相机路径上的一个顶点与光源路径上的一个顶点直接"连起来",计算它们之间的直接光照贡献。这种方式很适合处理直接光照和间接漫反射,路径清晰、速度快。
- 顶点合并:这是从光子映射借来的思路。它不直接连接两个顶点,而是在相机路径的某个顶点周围,搜索附近已经缓存好的"光源顶点"(也就是光子),通过密度估计来估算间接光照。这能高效处理那些极难被连接采样到的路径,比如反射焦散(SDS 路径)。

VCM 的优势是覆盖全类型光照路径、稳健性强、自动权重分配;劣势是实现复杂、参数敏感、内存大、有偏、不易并行。它是用复杂度和偏差换取稳健性和覆盖能力的算法,适合复杂离线渲染场景。
4 即时辐射度 (Instant Radiosity)
即时辐射度(Instant Radiosity,简称 IR)由 Keller 在 1997 年提出,核心思想非常直观:把光源发出的光,用一组"虚拟点光源"来近似,再用这些虚拟光源去照亮场景。
可以这样理解:用很多个小灯泡,模拟一个复杂光源的间接光照效果。

方法:
- 从光源发射子路径,将每个子路径的端点作为虚拟点光源 (VPL, Virtual Point Light)
- 使用这些 VPL 照常渲染场景
优点:快速,漫反射场景效果好。
缺点:VPL 接近着色点时出现尖刺,无法处理光泽材质。
5 高级外观建模:非表面模型
非表面模型 (Non-Surface Models) 指的是那些不依赖传统"表面"概念来与光交互的模型。它们处理的不是物体表面如何反射光,而是光在体积内部、离散颗粒、大气、毛发等非连续或非表面结构中的传播行为。
| 模型 | 说明 | 示例 |
|---|---|---|
| 参与介质 (Participating Media) | 光在介质中被吸收和散射,使用相位函数描述散射 | 雾、云 |
| 毛发 / 毛皮 (Hair / Fur) | BCSDF,玻璃柱体模型 (Marschner),双层圆柱模型 (Double Cylinder) | 人物头发、动物毛皮 |
| 颗粒材质 (Granular Material) | 程序化定义颗粒,避免显式建模所有颗粒 | 沙子、糖 |
6 参与介质的渲染
光在参与介质中传播时,任意一点都可能被(部分)吸收和散射;用相位函数 (phase function) 描述任意一点处光散射的角度分布。
渲染步骤:
- 确定视线路径
- 沿路径采样介质中的点
- 在每个点计算:
- 透射率(光从光源到该点的衰减)
- 内散射(来自其他方向的光被散射进视线)
- 发射(介质自发光)
- 沿路径积分,累加所有点的贡献
- 加上背景光经过介质衰减后的贡献
应用:《超能陆战队》(Big Hero 6, 2014) 的雾效、《刺客信条:枭雄》(Assassin’s Creed Syndicate, 2015) 的大气效果。

7 毛发与毛皮的外观模型
| 模型 | 思想 |
|---|---|
| Kajiya-Kay 模型 | 把头发当作无光泽圆柱,基于切线的经验反射模型 |
| Marschner 模型 | 把头发当作玻璃圆柱,精确考虑光在圆柱内的传播 |
Marschner 模型中光与头发的三种交互:R(反射)、TT(透射)、TRT(内壁反射后再透射)。

毛发 vs 毛皮
动物毛皮与人类头发的关键区别:毛皮纤维中心有髓质 (medulla)——结构复杂、会散射光;髓质越大,外观越散射、越不饱和。用人类头发模型渲染毛皮无法表现这种漫反射式的饱和外观。
双层圆柱模型 (Double Cylinder Model) [Yan et al. 2015, 2017]:在 Marschner 单层(表皮 cuticle + 皮层 cortex)圆柱内部增加髓质层,产生更多光路瓣 (lobes):R、TT、TRT、TTs、TRTs(s 表示经过髓质散射)。
应用:《猩球崛起 3》(2017)、《狮子王》(2019) 均获奥斯卡最佳视觉效果提名。

8 颗粒材质 (Granular Material)
颗粒材质(Granular Material) 指的是由大量离散的微小颗粒组成的物质,比如沙子、雪、盐、糖、粉末、土壤、谷物等。
它与参与介质(如雾、烟)有本质区别:参与介质是连续的,而颗粒材质是离散的,由一个个独立颗粒构成。这导致它的渲染方法既借鉴了参与介质的理论,又有自己独特的挑战。

颗粒材质渲染时既要考虑单个颗粒的几何,又要考虑颗粒间的多次散射和空隙透光。常用体积近似、几何法、混合法或统计法,在速度和质量之间权衡。
9 表面模型:BRDF 之外的散射函数
表面模型 (Surface Models) 描述物体表面如何与光交互——光线打到表面后,如何被反射、折射或散射:从某个方向打到表面某点后,会向哪些方向反射/折射多少能量?
数学上,它定义了散射函数:
| 函数 | 全称 | 描述 |
|---|---|---|
| BRDF | 双向反射分布函数 | 表面反射 |
| BTDF | 双向透射分布函数 | 表面透射 |
| BSDF | 双向散射分布函数 | BRDF + BTDF |
| BSSRDF | 双向散射表面反射分布函数 | 次表面散射 |
| 模型 | 说明 | 示例 |
|---|---|---|
| 半透明材质 (Translucent Material) | 次表面散射,光从一点进入、另一点射出 | 玉石、水母、皮肤 |
| 布料 (Cloth) | 编织/针织纤维,可作为表面/参与介质/实际纤维渲染 | 衣物 |
| 细节材质 (Detailed Material) | 非统计 BRDF,使用法线贴图定义微表面细节 | 金属闪粉、刮痕 |
10 次表面散射 (Subsurface Scattering)
次表面散射(Subsurface Scattering,简称 SSS)用来描述光进入半透明材质内部、多次散射后再从附近表面射出的物理现象。
光从表面一点进入,在材质内部散射后从另一点射出——这违反了 BRDF 的基本假设(入射点和出射点相同)。

BSSRDF 是 BRDF 的推广:
$$ S(x_i, \omega_i, x_o, \omega_o) $$对应的渲染方程推广为对表面所有点和所有方向的积分:
$$ L(x_o, \omega_o) = \int_A \int_{H^2} S(x_i, \omega_i, x_o, \omega_o) \, L_i(x_i, \omega_i) \cos\theta_i \, d\omega_i \, dA $$
偶极子近似 (Dipole Approximation) [Jensen et al. 2001]:不直接求解 BSSRDF 积分,而是在半无限介质表面下方引入一正一负两个虚拟点光源,用它们近似光在介质内部的扩散传输。

次表面散射是皮肤、玉石、牛奶等材质看起来"透光"、“柔和"的核心原因。它的数学模型是 BSSRDF,常用偶极子、多极子、预积分、屏幕空间等方法渲染,在速度和质量之间权衡。
11 布料渲染 (Cloth)
物理构成:布料由纤维 (fiber) 纺成纱线 (yarn),再编织成织物 (fabric)。
渲染方法:
- Sheen / Charlie Sheen(模拟布料纤维的柔和光泽)
- Ashikhmin 天鹅绒模型(模拟天鹅绒逆光更亮的特性)
- Kajiya-Kay(各向异性模型,模拟纱线方向的光泽)
- Marschner 头发模型(多层散射,模拟纤维内部传播)
布料渲染需要处理纤维散射、纱线各向异性、编织结构、透光、光泽等多层次光学特性。常用模型从简单的 Lambert、Oren-Nayar,到专用的 Sheen、Charlie、Ashikhmin,再到物理正确的路径追踪 + 纤维模型,在速度和质量之间权衡。
12 细节材质 / 闪光材质 (Detailed / Glinty Material)
动机:统计微表面模型的 NDF 是平滑分布,渲染结果"太干净”,不像真实世界——真实车漆有闪粉、真实金属有划痕和污渍。
| 对比 | 统计微表面 | 真实表面 |
|---|---|---|
| NDF | 平滑的统计分布 | 实际法线分布有尖锐细节 |
| 法线贴图分辨率 | 通常几千 | 约 200K × 200K |
难点:直接对高频法线贴图做路径采样极其困难——课件示例中朴素采样 2 小时的结果,与需要 21.3 天以上才能收敛的目标相差甚远。
解决方案:p-NDF(BRDF over a pixel):不再逐法线采样,而是考虑一个像素足迹覆盖的法线贴图小块 (patch) 的整体 NDF。p-NDF 具有尖锐特征,不同法线贴图产生不同形状(Blender 形状、拉丝金属、椭球凸起、海浪等)。

应用:《古墓丽影:崛起》(Rise of the Tomb Raider, 2016) 的闪光材质。
13 波动光学外观 (Wave Optics)
几何光学的 BRDF 无法解释衍射现象:CD、金属膜、手机屏幕的彩虹色,以及划痕金属、MacBook 铝壳上的各向异性彩色反射。将表面视为高度场 (heightfield)、按波动光学计算 BRDF,可以重现这些效果 [Yan et al. 2018]。

14 程序化外观 (Procedural Appearance)
不需要纹理,通过噪声函数实时计算细节:
- 3D 噪声:物体被切开或打破时,内部结构也随之存在
- 阈值化 (thresholding):把连续噪声二值化,例如
if noise(x, y, z) > threshold:
reflectance = 1
else:
reflectance = 0
- 复杂噪声函数功能非常强大(如 Worley 噪声等)

总结
第 18 讲本质上是"渲染方程还能怎么解"和"材质还能怎么描述"这两条线的延伸:
| 主题 | 核心内容 |
|---|---|
| 有偏 / 无偏 / 一致 | 无偏的期望值等于真实值;一致是"有偏但采样无穷时收敛";无偏一定一致,反之不然 |
| BDPT | 从相机和光源各追踪一条子路径再连接端点,光源侧传输复杂时效果好,但实现复杂、较慢 |
| MLT | 基于 MCMC 的路径变异采样,复用重要光路,擅长困难光路,但收敛难估计、不易并行、结果"脏" |
| 光子映射 | 两阶段:光子追踪存光子图 + 光子收集做密度估计;擅长 SDS 与焦散;有偏但一致 |
| VCM | BDPT + 顶点合并,覆盖全类型光路、稳健,但复杂、参数敏感、有偏 |
| 即时辐射度 | 用 VPL 近似光源——“很多小灯泡"照亮场景,快,但 VPL 近处有尖刺、处理不了光泽材质 |
| 非表面模型 | 参与介质(连续)、毛发(BCSDF)、颗粒材质(离散) |
| 参与介质 | 介质中的吸收与散射,用相位函数描述散射角度分布;雾、云 |
| 毛发 / 毛皮 | Kajiya-Kay 经验模型 → Marschner 玻璃圆柱(R/TT/TRT)→ 双层圆柱(加髓质,得 TTs/TRTs) |
| 颗粒材质 | 离散颗粒,需兼顾单颗粒几何与颗粒间的多次散射、空隙透光 |
| BRDF 之外 | BTDF(透射)、BSDF(反射 + 透射)、BSSRDF(次表面散射) |
| 次表面散射 | 光从一点进、另一点出,BSSRDF + 偶极子近似;皮肤、玉石、牛奶 |
| 布料 | 纤维 → 纱线 → 织物;Sheen、Charlie、Ashikhmin、Kajiya-Kay、Marschner |
| 细节 / 闪光材质 | 高频法线贴图难以采样,用 p-NDF 表示像素足迹内的整体法线分布 |
| 波动光学 | 衍射与彩虹色,把表面当高度场按波动光学算 BRDF |
| 程序化外观 | 3D 噪声 + 阈值化,实时生成细节,切开也"内有乾坤” |
本文是 GAMES101 - 现代计算机图形学学习系列的第 9 篇笔记。
