跳转至

L18 Advanced Topics in Rendering

1 高级光线传播(Advanced Light Transport)

无偏蒙特卡洛方法不存在任何系统误差。无论使用多少样本,无偏估计器的期望值始终等于真实值
反之则为有偏估计器。
有一种特殊情况:当样本数量趋于无穷时,其期望值会收敛到真实值,这类估计被称为一致估计
这里的“有偏/无偏”和“一致性”与概率论与数理统计中参数估计的“有偏性”和“一致性”类似。

1.1 无偏光线传播方法(Unbiased light transport methords)

1.1.1 双向路径追踪Bidirectional Path Tracing(BDPT)

从光源和摄像机分别生成半路径,然后BDPT将这些半路径连接起来。


Pasted image 20260127145354.png

当场景中大部分光是间接光,从摄像机发出的光线能够打到光源的概率比较小时,从光源发出光线要比从摄像机发出光线便于计算。此时,BDPT效果比单向路径追踪的效果更好。


Pasted image 20260127145757.png

但是BDPT存在几个缺点

  • 实现难度很高,想做对很不容易。
  • 运行速度相对较慢,甚至慢很多

1.1.2 Metropolis Light Transport(MLT)

Metropolis直译为“大都市”,但在这里是人名。
MLT是马尔可夫链蒙特卡洛(MCMC)的一种应用。它的核心思想是利用马尔科夫链来优化随机采样的过程。相比于普通的蒙特卡洛方法,使用马尔科夫链产生的样本前后具有相关性。这使得马尔科夫链能够让生成的样本的分布和被积函数的分布相同,从而使得采样计算的结果更精准。

MLT非常擅长局部探索难以追踪的光路。核心思路是对已有路径进行局部扰动(locally perturb),以生成新路径。


Pasted image 20260127151019.png

MLT非常适合做困难复杂的光线传播,这时因为只要能找到一条路径作为种子,就能找到更多路径。


Pasted image 20260127151319.png

比如在左图中的场景中,光线都来自于狭小的门缝,光线正常到达光源比较困难。在这种困难的情况下,MLT就能做得更好。
而在右图中水池中存在焦散现象。光线从摄像机发出,要先经过specular的水面,之后经过diffuse的水底,之后在次经过specular的水面,最后才到光源。这种路径被称为SDS路径,它的难点是:在diffuse的位置光线的反射有非常多的可能性,只有很小的可能最终打到光源,最终形成一条有效的光路。

MLT方法的缺点是:

  • 很难分析渲染收敛的速度(Difficult to estimate the convergence rate)。
  • 不能保证每个像素有相同的收敛率(Does not guarantee equal convergence rate per pixel),导致画面有点脏。

1.2 有偏光线传播方法(biased light transport methord)

1.2.1 光子映射(Photon Mapping)

  • 一种有偏方法(biased approach),同时也是一种两阶段方法(two-stage method)
  • 非常擅长处理镜面 - 漫反射 - 镜面(SDS)路径,并生成焦散(caustics)效果

Pasted image 20260127152520.png

Stage1: photon Tracing
从光源发射光子,让它们在场景中反弹,然后将光子记录在漫反射表面上


Pasted image 20260127152943.png

Stage2:photon collection (final gathering)
从相机发射子路径(sub-paths),让它们在场景中反弹,直到击中漫反射表面

Calculation-local density estimation
核心思想是漫反射表面有越多光子的区域应该更亮。
做法是:对于每个着色点(shading point),找到距离它最近的 N 个光子,并计算这些光子所覆盖的表面积(take the surface area they over)


Pasted image 20260127153353.png


Pasted image 20260127153501.png

当N过小的时候,画面会有很多噪点,变得noisy。当N过大的时候,画面会变模糊(blurry)。
这说明这种估计方法是有偏的(biased)。具体原因是:

\[ \frac{\mathrm{d}N}{\mathrm{d}A}\ne \frac{\Delta N}{\Delta A} \]

等式左边表示的是着色点附近微小的面积。右边表示的我们在计算时通过相距最近的N个光子确定的面积,二者虽然接近,但并不相等。

但是考虑到极限条件下
当发生更多的光子时 \(\rightarrow\) 相同的N个光子覆盖的面积 \(\Delta A\) 更小 \(\rightarrow\) \(\Delta A\) 更接近 \(\mathrm{d}A\)
所以光子映射(Photon Mapping)这种方法是有偏的(biased),同时也是一致的(consistent)

渲染中 “偏差” 的通俗理解

  • 有偏(Biased)== 画面模糊
  • 一致(Consistent)== 当样本数量趋于无穷时,画面不再模糊
    为什么在密度估计中不采用 “固定范围” 搜索?
    这是因为,如果范围固定的话,无论怎样都是有偏且不一致的。如果发射更多的光子只能使 \(\Delta A\) 中分布更多的光子,而无法使 \(\Delta A\) 更接近 \(\mathrm{d}A\)

1.2.2 顶点连接和合并(Vertex Connection and Merging, VCM)

双向路径追踪(BDPT)与光子映射的结合
核心思路

  • 如果 BDPT 中的子路径端点无法直接连接,但可以合并,就不要浪费这些子路径
  • 利用光子映射来处理邻近 “光子” 的合并

Pasted image 20260127162354.png

1.2.3 实时辐射度(Instant Radiosity, IR)

这类方法有时也被称为多光源方法(many-light approaches)
核心思路是被照亮的表面可以被当作光源来处理
实现方式:

  • 发射光的子路径,并将每个子路径的端点视为一个虚拟点光源(VPL)
  • 使用这些虚拟点光源,以常规方式渲染场景

Pasted image 20260127164140.png

优点:速度较快,在漫反射场景中通常能生成较好的效果
缺点

  • 当虚拟点光源(VPL)靠近着色点时,画面会出现 “尖刺状” 噪点.这与平方反比有关。
  • 无法处理光泽材质(glossy materials)的光照计算

Pasted image 20260127164315.png

2 高级外观建模(Advanced Appearance Modeling)

2.1 非表面模型(Non-surface models)

2.1.1 散射介质(Participating Media)

当光线穿过参与介质(travels through a participating medium)时,在传播路径上的任意一点,它都可能被(部分)吸收和散射((partially) absorbed and scattered)。


Pasted image 20260127165218.png

使用 相位函数(Phase Function) 来描述参与介质中任意一点 x 处,光线散射的角度分布。


Pasted image 20260127171754.png

  • 随机选择一个方向进行反弹(bounce)
  • 随机选择一段距离沿直线传播
  • 在每个 “着色点” 处,与光源建立连接

Pasted image 20260127171900.png


Pasted image 20260127172307.png


Pasted image 20260127172320.png

云、雾、甚至巧克力等都属于散射介质

2.1.2 Hair Appearance

Kajiya-Kay Model

Pasted image 20260127172603.png

这种模型认为:光线照射到发丝上,会有圆锥形的镜面反射,同时还会反射到四面八方的漫反射。


Pasted image 20260127172902.png

Marschner Model

Pasted image 20260127173019.png

把光线穿透发丝的表面发生折射记为 T,发生反射记为 R。折射两次记为 TT,以此类推。


Pasted image 20260127173320.png

把发丝当作类似玻璃的圆柱(Class-like cylinder)

  • 外层叫做cuticle,表皮
  • 里面叫做cortex,含有色素,能够吸收(absorb)光线

Pasted image 20260127173639.png

2.1.3 Fur Appearance

Double Cylinder Model

如果使用头发模型去表示动物的毛发(下图左边),与预期情况(下图右边)不同。


Pasted image 20260127174112.png


Pasted image 20260128105122.png

最内层叫做Medulla(髓质),类似于散射介质,能够将光线发散到四面八方。
人和动物都有Cuticle-Cortex-Medulla的结构,但是与人相比,动物毛的Medulla更大,光线进去之后更容易散射。


Pasted image 20260128105623.png

随着medulla大小的增大,模拟动物毛发的效果变得更好。


Pasted image 20260128105733.png

而在人的头发模型中也加入medulla,能够让头发更加透亮。
因此提出了双层圆柱模型(Double Cylinder Model)


Pasted image 20260128105926.png


Pasted image 20260128110011.png

在原本的\(R、TT、TRT\)的基础上加上了\(TT^{s}、TRT^{s}\),使得渲染的毛发更加透亮。


Pasted image 20260128110359.png

电影《猩球崛起》《狮子王》中对毛发的渲染都使用了Double Cylinder Model

2.1.4 颗粒材质(Granular Matel)


Pasted image 20260128110747.png

Pasted image 20260128110855.png
我们能否避免对所有颗粒进行显式建模?

  • 可以,通过程序化定义(procedural definition即可实现。

2.2 表面模型(surface models)

2.2.1 Translucent Meaterial(透光材质)

BSSRDF(双向表面散射反射分布函数)

Pasted image 20260128111323.png

许多表面的视觉特征,源于光线从与入射点不同的位置射出。这种现象被称为次表面散射这违背了 双向反射分布函数(BRDF) 的一个基本假设。


Pasted image 20260128111436.png

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\; \mathrm{d}\omega_i\; \mathrm{d}A\]

在BSSRDF中原本BRDF对于方向的积分变成了既要对方向又要对面积积分。


Pasted image 20260128112455.png

Dipole Approximation

当把手机闪光灯放在手上,能够看到手上一部分区域被照亮,就像是在皮肤内部有一个光源。从类似这样的现象中,人们提出了次表面散射的一种近似方法:产生材质内和材质外的两个光源,以及来近似次表面散射的效果。


Pasted image 20260128112522.png

渲染效果


Pasted image 20260128112649.png


Pasted image 20260128112823.png

2.2.2 Cloth

布料(Cloth)由缠绕的纤维(twited fiber)组成。
缠绕分为两个层次(Tow levels of twist)

\[Fibers(纤维)\rightarrow Ply(股)\rightarrow Yarn(线)\]

Pasted image 20260128113308.png
Woven or knitted得到布料
Pasted image 20260128113330.png

当成表面使用BRDF

给出编织的样式(weaving pattern)就能计算出它的行为(overall behavior)
在渲染的时候使用BRDF


Pasted image 20260128113601.png


Pasted image 20260128113624.png

但是使用BRDF存在问题,因为布料可能存在立体结构


Pasted image 20260128113756.png

当成散射介质

为解决这个问题,另一种做法是把织物当作空间中分布的体积,把它划分成细小的块,明确每个小块的性质,将布料当作散射介质来渲染。

  • 单根纤维的属性及其分布(Properties of individual fibers & their distribution) → 推导为散射参数(scattering parameters)
  • 将其作为散射介质(participating medium) 进行渲染

Pasted image 20260128114005.png

当成实际的纤维

还有一种方法就是把布料当作实际的纤维进行渲染(Render every fiber explicitly)。


Pasted image 20260128114513.png

例子


Pasted image 20260128114702.png

2.3 Detailed Appearance: Motivation

为什么渲染出来的图片看起来很假,因为没有考虑材质表面划痕之类的细节,即我们没有反映真实的法线分布。


Pasted image 20260128115541.png


Pasted image 20260128115547.png


Pasted image 20260128115949.png


Pasted image 20260128120018.png

要想完美反映这些细节,即采用微表面进行渲染。这需要在表面覆盖非常高精度的法线贴图。但是这导致渲染速度非常慢,渲染一张图像可能需要一个月之久。


Pasted image 20260128120056.png

深究其原因,我们发现是因为从摄像机发出的光线经过微表面很难反射到光源,类似的从光源发出的光线经过微表面也很难反射到摄像机。


Pasted image 20260128120249.png

解决方法是将求解一个像素覆盖区域的BRDF


Pasted image 20260128120342.png

当这个像素覆盖区域不同时,得到的不同的法线分布(NDF,Normal distribution function)


Pasted image 20260128120615.png

不同类型的法线贴图也能得到不同的法线分布


Pasted image 20260128120658.png

这种方法在渲染波光粼粼的海面以及雪的时候,能够发挥很大的作用。


Pasted image 20260128121053.png

3 Recent Trend: Wave Optics

使用波动光学得到的BRDF和普通方法得到的BRDF不同,前者具有不连续的特点。
Pasted image 20260128121438.png
采用这种方法渲染得到的结果虽然宏观看上去是白光,但是放大之后可以发现白光是由很多小的彩色像素点组成的。
Pasted image 20260128121510.png

4 程序化外观(Procedural Appearance)

使用定义在空间中的3D Noise来定义物体的细节。


Pasted image 20260128162433.png

由于噪波纹理是在3d空间中的,所以可以获得上面的瓷器的截面纹理。
利用噪波可以表现汽车上的污渍等内容,也可以用来生成地形、水面等


Pasted image 20260128162638.png

评论

如果你已登录 GitHub,就可以直接在这里评论。