第十八章:高级光线传播

高级光线传播

  • 无偏的光线传播方法
    • 双向路径追踪(BDPT)
    • Metropolis 光线传播(MLT)
  • 有偏的光线追踪方法

    • 光子映射(Photon mapping)
    • Vertex connection and merging(VCM,结合了光子映射和双向映射追踪)
  • 实时辐射度算法(把间接光表示成很多很小的光源)

  • image

无偏和有偏

蒙特卡罗不管用多少样本,期望永远是对的,被称为无偏的;其他情况就是有偏的,但如果取的样本非常多,多到无穷多,最后期望值会收敛到正确值。这个时候就称为一致的。

image

双向路径追踪

路径追踪是利用光路可逆性,从相机开始打出的路径,连接相机和光源

双向路径追踪分别从光源和相机出发,生成两条半(子)路径,再把半路径的端点连接起来,就形成了整个路径。

image

双线路径追踪适合光源在一侧的复杂传输,但是实现起来比较困难,且运行速度很慢

image

Metropolis 光线传播

用一个统计学上的采样工具马尔可夫链,通过当前的样本,生成和他靠近的下一个样本。可以做到只要给足够的时间,可以生成以任意的函数的形状为 PDF 的样本。

而当采样的函数 p(x)和积分的函数 f(x)的形状一致的时候,得到的偏差是最小的。

给定一条路径,可以生成周围更多和他相似的路径。因此是一个局部的方法。

image

Metropolis 特别适合做复杂的光路传播,因为只要找到一条正确的,就能不断在它周围找到更多。

image

缺点是:
1.很难在理论上分析它收敛的速度(给一幅图,无法分析渲染多长时间才会收敛)

2.所有操作都是局部的,有一些像素收敛的快,有一些收敛的慢,得到的图像比较“脏“

3.因为不同像素收敛速度不一样,所以不能渲染动画。因为两帧之间会差距很大。

image

光子映射

光子映射是一个有偏的估计,很适合用来渲染 caustic(caustic 是由于光线聚焦产生的一些图案)。同时适合用来处理 SDS 路径。

image

一种光子映射的方法:
第一步:光子从光源出发,不断的反射和折射,直到光子打到 diffuse 的物体,就停下来。然后把所有的光子都记录下来

第二步:从相机开始打出多条路径,直到打到 diffuse 的物体上就停下来

image

接下来做局部的密度估计:

对任何一个着色点,选择离他最近的 n 个光子,再找这 n 的光子占据的面的面积,计算光子的密度。光子分布的越集中的地方越亮。

image

为什么是有偏的:
正常计算密度应该用很小的 n 除以很小的面积,当实际的覆盖面积足够小(光子打出去的面积足够多)的时候,就接近真实的密度,这种情况被称为是一致的。

image

在渲染里简单的理解有偏或无偏:
有偏:只要结果有一点模糊,就认为是有偏的。

一致的:虽然有模糊的,但是样本足够多,就能收敛到正确的结果。

image

Vertex Connection and Merging

双向路径追踪和光子映射的结合

主要思想是:对于两个 subpath,最后他们的交点非常接近的时候,用光子映射把两个 subpath 结合到一起。

image

Instant Radiosity 实时辐射度

认为已经被照亮的地方就是光源,可以继续照射别的地方。

假设从光源射出来的光线最后会停在某个地方,这个地方就变成了一个虚拟的点光源,然后用这些虚拟的点光源照亮着色点。

image

缺点:

1.在一些接缝会出现一些光点

2.做不了镜面的材质

image

出现光点的原因是:做 light sampling 的时候,对积分域转换,把对立体角的采样转换成对面积的采样。此处分母出现了一个距离的平方,当距离很近,接近 0 点时候会出现一个很大的结果。

image

工业界现在主要在用 path tracing 的方法。

Advanced Appearance Modeling 外观建模

  • 非表面模型

    • 散射介质
    • 头发、毛发、纤维
    • 粒状材质(沙子)
  • 表面模型

    • 半透明材质
    • 布料
    • 有细节度的模型
  • 程序化生成的模型

  • image

非表面模型

散射介质:雾、云

image​​image

光线的传播过程中会:1.被吸收 2.被散射

image

由 Phase Function(相位函数)来定义在每个点怎么散射

image

散射介质的渲染

随机地找到一个方向发生弹射,随机地往一个方向前进,找到一个 path 把各个弹射的位置相连。

image

participanting media 有很多应用:
超能特工队

image

刺客信条:

image

巧克力也是一种散射介质,只是光进去了以后很快就会消失

image

**头发(**光线和一根曲线作用)

有两种类型的高光:有色的高光和无色的高光。

image

Kajiya-Kay
把头发当成一个圆柱,光线打到上面会散射出一个圆锥。同时,有一些光线会被散射到四面八光(有点类似于 Diffuse 和 Specular 加起来)。

imageimage​​

Marschner Model

考虑光线打到头发上,有一部会直接反射,记为 R

一部分会打进去,发生折射,再打出来,记为 TT

还有一部分进到头发里面,走到内壁,发生一次内部的反射,再发生一次穿透,记 TRT

image

把头发当成一个玻璃材质的圆柱,有表皮(cuticle)和皮层(cortex)。头发内部有色素,光线传播进去会有部分被吸收。

image​​image

光线打到多根头发,就会从一根头发弹射到另一根头发,所以计算量巨大。

头发模型的应用:

image​​image

人的头发模型不足以描述光线和动物毛发的作用

image

毛发除了之前提到的表皮和皮质层,还有中间的髓质层,光线进入髓质层会被反射到四面八方。而动物毛发的髓质层比人要粗很多。

image​​image​​image

Double Cylinder Model(双层圆柱模型)

image

相比之前增加了光线穿过髓质折射出来的分量 TTs 和光线穿过髓质,发生反射再穿出来的分量 TRTs

image

最后头发的颜色由五个分量结合而成:

image​​image​​image​​image

Granular Material(颗粒材料)

image

可以做一些简化,不去计算每一个颗粒。

比如下图中,把整个模型分成很多个单元,每个单元中由不同的材质按不同的比例来构成。用这种单元模型去做渲染。

image​​image​​image​​image

非表面模型 translucent material (半透明材质)

光线可以从某个地方进去材质表面,从另外一个面穿出来。

​​玉石:

image

水母:

image

次表面散射:光线从一个点进入物体表现,发生了很多次反射,再从另一个表面出来。]

image

次表面反射是对 BRDF 的延伸,BSSRDF,中间加了 SS(次表面反射)。即计算一个点的反射,除了考虑各个方向对这个点的影响,还要考虑其他点反射过来的光,既要对方向做积分,又要对面积做积分。

image

Dipole Approximation
次表面反射可以近似为物体内部的一个光源加上外部的一个光源共同照射的结果:

image​​image​​image​​image​​image

BSSRDF 的应用:

image

Cloth 材质

很多纤维缠绕形成股,很多股缠绕形成线,最后织成布。

image

有三种方法进行渲染:

1.把布当作表面,用 BRDF 模型进行渲染。根据不同的织法、形状得到不同的渲染结果。

image

但是明显布的材质不一定是一个表面,比如天鹅绒材质。

image

2.像散射介质一样渲染:把空间分成很小的格子,知道每个格子的纤维朝向分布、复杂程度。把这些性质转换为光线的吸收和散射,就像是渲染散射介质。

image

3.把每一根纤维都渲染出来,当头发一样渲染。

image​​image​​image

有细节的复杂材质

image​​image​​image​​image​​image​​image​​image​​image​​image​​image​​image

我们认为每一个微表面都是镜面,很难通过反射的方式让光线打到光源或者摄像机上。所以用一个像素覆盖很多微表面,在一个小的范围内把微表面的法线分布算出来,替代之前光滑的分布。

image

不同的范围选择会得到不同的微表面法线分布结果:

image

不同性质的材质会得到不同形状的微表面分布:

image​​image​​image

细节材质的应用

image

在微型的细节上,比如物体很小,小到和光的波长相当,此时不能从几何光学的角度去分析,要考虑光的振动,需要用到波动光学。

image

在一个黑暗的房间里用点光源打出一道光,会看到材质表面有很多颜色:

image​​image

波动光学下的 BRDF:

image​​image​​image​​image​​image

程序化生成的表面(Procedural Appearance)

用三维空间中的噪声函数生成材质外观,procedural 表示不提前生成,随用随取,用的时候去查询。

imageimage​​

对噪声函数可以做一些处理得到不同的效果,比如车上的锈,可以做二值化,有些地方有,有些地方没有。

image

噪声函数的应用

生成地形

image

生成水面

image

生成三维的木头,任意切割可以得到内部的外观

image

image