跳转到主要内容

09|高级光线传播与复杂外观建模

有偏与无偏、一致性的区别;无偏光线传输方法 BDPT 与 MLT;有偏方法光子映射(光子追踪 + 光子收集、密度估计)与 VCM(顶点连接 + 顶点合并);即时辐射度与虚拟点光源;非表面模型(参与介质、毛发、颗粒材质);表面模型与 BRDF/BTDF/BSDF/BSSRDF;次表面散射与偶极子近似;布料渲染;细节/闪光材质与 p-NDF;波动光学外观;程序化外观

  • 课程主讲:闫令琪 (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 的突破在于,它不是独立采样,而是通过"变异"来局部探索路径空间。一旦找到一条能产生显著贡献的光路,算法就对它做微小修改(扰动),生成一条邻近的新光路;如果新路径的贡献更大或符合统计规律,就被"接受",否则可能被拒绝。这样找到的重要光路被"复用"了,采样效率因此大幅提高。

Metropolis 光线传输

特点:

  • 非常擅长局部探索困难的光路
  • 通过扰动现有路径生成新路径

优点:对困难光路效果好,无偏。

缺点:

  • 难以估计收敛速度,不易并行化
  • 各像素收敛速度不均,结果"脏",残留相关噪声,需要额外处理
  • 对于简单场景,可能不如路径追踪或 BDPT 高效
  • 不适合渲染动画

BDPT & MLT 对比


3 有偏光线传输方法

光子映射 (Photon Mapping)

光子映射(Photon Mapping)是另一种经典的全局光照算法,由 Henrik Wann Jensen 在 1996 年提出。核心思想是:从光源出发发射光子,让光子在场景中反弹,最后把光子收集起来用于渲染。

它和 BDPT、MLT 的思路不同:BDPT 从两端追踪路径再连接,MLT 通过变异探索路径空间,而光子映射是先把光能"存"在场景里,再查询。

生活中的光子映射

这是一种两阶段方法,非常擅长处理 SDS(镜面-漫反射-镜面)路径和生成焦散效果。

阶段 1:光子追踪

  1. 从光源发射大量光子
  2. 光子在场景中传播,遇到表面时:
    • 部分被吸收
    • 部分被反射
    • 部分被折射
  3. 每次光子与表面交互,就记录一条光子命中点,存入光子图 (Photon Map)

光子图里保存的是:位置、入射方向、能量(颜色)。

阶段 1:光子追踪

阶段 2:光子收集 (Final Gathering)

  • 从相机发射子路径,弹射到漫反射表面
  • 基于局部光子密度估计光照
  • 加上直接光照,得到最终颜色

阶段 2:光子收集

密度估计:光子密度高的区域更亮。对每个着色点,找最近的 $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 的基础上,增加了一个"合并"的采样步骤。它从相机和光源两端分别追踪路径,然后对每个顶点采用两种不同的策略来贡献光能:

  1. 顶点连接:这是 BDPT 的经典操作。把相机路径上的一个顶点与光源路径上的一个顶点直接"连起来",计算它们之间的直接光照贡献。这种方式很适合处理直接光照和间接漫反射,路径清晰、速度快。
  2. 顶点合并:这是从光子映射借来的思路。它不直接连接两个顶点,而是在相机路径的某个顶点周围,搜索附近已经缓存好的"光源顶点"(也就是光子),通过密度估计来估算间接光照。这能高效处理那些极难被连接采样到的路径,比如反射焦散(SDS 路径)。

顶点连接与合并 (VCM) 算法

VCM 的优势是覆盖全类型光照路径、稳健性强、自动权重分配;劣势是实现复杂、参数敏感、内存大、有偏、不易并行。它是用复杂度和偏差换取稳健性和覆盖能力的算法,适合复杂离线渲染场景。


4 即时辐射度 (Instant Radiosity)

即时辐射度(Instant Radiosity,简称 IR)由 Keller 在 1997 年提出,核心思想非常直观:把光源发出的光,用一组"虚拟点光源"来近似,再用这些虚拟光源去照亮场景。

可以这样理解:用很多个小灯泡,模拟一个复杂光源的间接光照效果。

即时辐射度

方法:

  1. 从光源发射子路径,将每个子路径的端点作为虚拟点光源 (VPL, Virtual Point Light)
  2. 使用这些 VPL 照常渲染场景

优点:快速,漫反射场景效果好。

缺点:VPL 接近着色点时出现尖刺,无法处理光泽材质。


5 高级外观建模:非表面模型

非表面模型 (Non-Surface Models) 指的是那些不依赖传统"表面"概念来与光交互的模型。它们处理的不是物体表面如何反射光,而是光在体积内部、离散颗粒、大气、毛发等非连续或非表面结构中的传播行为。

模型说明示例
参与介质 (Participating Media)光在介质中被吸收和散射,使用相位函数描述散射雾、云
毛发 / 毛皮 (Hair / Fur)BCSDF,玻璃柱体模型 (Marschner),双层圆柱模型 (Double Cylinder)人物头发、动物毛皮
颗粒材质 (Granular Material)程序化定义颗粒,避免显式建模所有颗粒沙子、糖

6 参与介质的渲染

光在参与介质中传播时,任意一点都可能被(部分)吸收和散射;用相位函数 (phase function) 描述任意一点处光散射的角度分布。

渲染步骤:

  1. 确定视线路径
  2. 沿路径采样介质中的点
  3. 在每个点计算:
    • 透射率(光从光源到该点的衰减)
    • 内散射(来自其他方向的光被散射进视线)
    • 发射(介质自发光)
  4. 沿路径积分,累加所有点的贡献
  5. 加上背景光经过介质衰减后的贡献

应用:《超能陆战队》(Big Hero 6, 2014) 的雾效、《刺客信条:枭雄》(Assassin’s Creed Syndicate, 2015) 的大气效果。

参与介质:吸收、散射与相位函数


7 毛发与毛皮的外观模型

模型思想
Kajiya-Kay 模型把头发当作无光泽圆柱,基于切线的经验反射模型
Marschner 模型把头发当作玻璃圆柱,精确考虑光在圆柱内的传播

Marschner 模型中光与头发的三种交互:R(反射)、TT(透射)、TRT(内壁反射后再透射)。

Kajiya-Kay & 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) 均获奥斯卡最佳视觉效果提名。

毛发 vs 毛皮:髓质结构与双层圆柱模型的 lobes


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 $$

BRDF & BSSRDF

偶极子近似 (Dipole Approximation) [Jensen et al. 2001]:不直接求解 BSSRDF 积分,而是在半无限介质表面下方引入一正一负两个虚拟点光源,用它们近似光在介质内部的扩散传输。

偶极子近似:真实光源与虚拟光源对

次表面散射是皮肤、玉石、牛奶等材质看起来"透光"、“柔和"的核心原因。它的数学模型是 BSSRDF,常用偶极子、多极子、预积分、屏幕空间等方法渲染,在速度和质量之间权衡。


11 布料渲染 (Cloth)

物理构成:布料由纤维 (fiber) 纺成纱线 (yarn),再编织成织物 (fabric)。

渲染方法:

  1. Sheen / Charlie Sheen(模拟布料纤维的柔和光泽)
  2. Ashikhmin 天鹅绒模型(模拟天鹅绒逆光更亮的特性)
  3. Kajiya-Kay(各向异性模型,模拟纱线方向的光泽)
  4. 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 形状、拉丝金属、椭球凸起、海浪等)。

p-NDF shape

应用:《古墓丽影:崛起》(Rise of the Tomb Raider, 2016) 的闪光材质。


13 波动光学外观 (Wave Optics)

几何光学的 BRDF 无法解释衍射现象:CD、金属膜、手机屏幕的彩虹色,以及划痕金属、MacBook 铝壳上的各向异性彩色反射。将表面视为高度场 (heightfield)、按波动光学计算 BRDF,可以重现这些效果 [Yan et al. 2018]。

波动光学细节材质:MacBook 铝壳渲染


14 程序化外观 (Procedural Appearance)

不需要纹理,通过噪声函数实时计算细节:

  • 3D 噪声:物体被切开或打破时,内部结构也随之存在
  • 阈值化 (thresholding):把连续噪声二值化,例如
if noise(x, y, z) > threshold:
    reflectance = 1
else:
    reflectance = 0
  • 复杂噪声函数功能非常强大(如 Worley 噪声等)

程序化外观:3D 噪声内部结构与使用


总结

第 18 讲本质上是"渲染方程还能怎么解"和"材质还能怎么描述"这两条线的延伸:

主题核心内容
有偏 / 无偏 / 一致无偏的期望值等于真实值;一致是"有偏但采样无穷时收敛";无偏一定一致,反之不然
BDPT从相机和光源各追踪一条子路径再连接端点,光源侧传输复杂时效果好,但实现复杂、较慢
MLT基于 MCMC 的路径变异采样,复用重要光路,擅长困难光路,但收敛难估计、不易并行、结果"脏"
光子映射两阶段:光子追踪存光子图 + 光子收集做密度估计;擅长 SDS 与焦散;有偏但一致
VCMBDPT + 顶点合并,覆盖全类型光路、稳健,但复杂、参数敏感、有偏
即时辐射度用 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 篇笔记。