高级光线传播——有偏和无偏的光线传播:
- 无偏:使用蒙特卡洛方法解积分时,不管用多少样本呢,得到的期望是真实值
- 有偏:估计出来的期望与真实值不一样。极限情况下收敛到真实值也是有偏的,称为consistent。对应到渲染结果,如果结果相对真实值较模糊,则是有偏的,但当样本足够多结果接近真实值就是一致的
1.Unbiased light transport methods无偏光线传播
[1]双向路径追踪(BDPT)
之前做的路径追踪,利用了光路的可逆性,从相机开始发射路径/光线,连接相机与光源
而双向路径追踪会生成两个不同的子路径,从光源会打出路径,从相机也会打出路径,在着色点把两个路径连起来,就形成了整条路径。
思想很简单,实现很困难。
以下是相同采样率下单向和双向的结果:
- 适用于光传输较为复杂的光的侧面
- 很难实现,而且很慢
[2]Metropolis Light Transport (MLT)
使用马尔科夫链:根据当前的样本生成比较接近的样本,因此对于任意未知的函数,都可以通过马尔科夫链的方法得到一系列的样本,使得这些样本的分布,和被积函数的形状一致。对应在光路上是一个局部方法,当存在一条路径时,可以产生与该路径相似的路径。如下橙色与蓝色路径。
MLT使用了马尔可夫链蒙特卡洛(MCMC)方法
- 用一些 PDF 从当前样本跳转到下一个样本
- 非常善于在局部探索困难的光路
MLT缺点:
- 难以估计收敛速度
- 不保证每个像素的收敛速度相等
- 通常不用于渲染动画
2.有偏的光线传播
[1]Photon Mapping光子映射
非常善于处理镜面-漫反射-镜面(SDS)路径和产生焦散线(caustics)
光子映射主要分为两步:
Stage 1 — photon tracing
- 从光源发射光子,反弹它们,直到光子反射到一个漫反射材质表面它就停到那里
Stage 2 — photon collection (final gathering)
- 从相机拍摄子路径,反弹他们周围,直到他们到达漫反射表面
finally:计算 - 局部密度估计
- 光子较多的区域应该更明亮
- 对任何一个着色点取周围最近的N个光子,找出这N个光子的占据的面积,从而算出密度。
但当N取较小时,噪声大,N取较大时,会模糊。一般应该取足够小的面积,选择面积内的光子数量来计算密度,所以上述计算方式有问题。顺应这个思路,当打出的光子足够多时,相对面积就会很小。
但若取固定的面积来计算,当光子很多时,会导致面积内光子变多,造成结果依旧不准确。
在渲染里,很容易判断是有偏的还是无偏的,就是通过计算判断其渲染结果是否有模糊,有任何一点模糊都是有偏的
- Biased == blurry
[2]顶点连接与合并VCM
BDPT(双向路径追逐)与光子映射的结合,推导很复杂,想法简单:
- 如果 BDPT 中的子路径的端点不能连接但可以合并,那么就不要浪费它们
- 使用光子映射来处理附近“光子”的合并
3.Instant Radiosity实时辐射度算法(IR)
简单理解:很多光源的算法,使用已经被照亮的面来当作光源去照射其他的面
- 发射光子路径,并假设每个子路径的终点是虚点光源(VPL)
- 使用这些 VPL 渲染场景
优点: 快速,通常在漫反射场景中给出很好的效果
缺点:
- 尖峰会出现当 VPL 接近阴影点
- 不能处理光泽材质
游戏、电影界现在比较常用的还是Ray Tracing,尽管有些年代了。
4.高级外观建模
[1]Non-surface models非表面模型
Participating media散射介质
当光线通过一个散射介质时,它可以被(部分)吸收和散射。
也就是光线在传播过程中会发生两件事:被吸收和被散射
使用相位函数(Phase Function )定义参与/散射介质中任一点 x 上光散射的角度分布
渲染方式:
光线往某方向走多远取决于介质的吸收能力和光的能量
- 随机选择一个反弹方向
- 随机选择一个直行的距离
- 在每个“阴影点”,连接到光源
Hair/fur/fiber (BCSDF)头发/毛皮/纤维
需要考虑光线与每根头发的作用。下面有集中相关的作用模型
Kajiya-Kay Model
光线打到头发上会散射出一个圆锥,该模型的效果并不好
Marschner Model
广泛被应用的模型:
- 光线不仅会反射(R)
- 穿进头发发生折射(T)
- 穿进头发再穿出(TT)
- 穿透反射再穿透(TRT)
Marschner Model将头发当成一个玻璃圆柱,外层叫cuticle,里面叫cortex,cortex中包含色素
光线跟头发会产生多次散射,渲染很困难,计算量很大。
注意:人的头发模型并不足以表示动物毛发的模型,生物结构上不同。动物的毛的髓质多。
Granular material颗粒材料
远看是沙丘,近看是小颗粒堆积的。
[2]Surface models表面模型
Translucent material (BSSRDF) 半透明材料
次表面散射:
- 光线从一个点进入表面,在内部发生了大量散射,最终再出去
- 违反了 BRDF 的基本假设(可以说是对BRDF的扩展)
BRDF的所有作用都发生在一个点上,而BSSRDF是由一个方向进来,但是可以从其他方向出去, 进来和出去的点不一定一样。渲染方程要考虑对表面其他地方进入的光线,要对面积进行积分。
BSSRDF如果按照上面的思路来实现的话其实是很复杂的,那么引入了一个新的概念——Dipole Approximation偶极子近似[ Jensen et al. 2001]
通过引入两个点源,近似光扩散。比如常见的半透明物质,你在观察一个光源照射到它的表面时,它的内部是不是很像有一个上面光源。
BRDF vs BSSRDF
Cloth布料
布料的构造:纤维Ply缠绕成股Yarn,股缠绕成线,由线编制为布
布料渲染方法(常见的三种方式):
- 当表面模型进行渲染,不同的织法有不同的BRDF(简单,效果也不错)
- 但对天鹅绒这种织物没办法像上述那样做。因此把织物认为是空间中分布的体积,划分成超级细小的格子,每个格子里知道纤维的分布与朝向,分开来计算。即将织物当作一个体积,知道体积中微小的块的性质。类似云烟的渲染。
- 最暴力的做法把每根纤维渲染出来,像头发一样
Detailed material (non-statistical BRDF)详细模型
很多模型使用相应的理论渲染出来的结果或许会太完美,导致与实物有所不同