Games101-10-渲染中的高级话题
Games101-10-渲染中的高级话题
高级光线传播
- 无偏的光线传播方法
双向路径追踪(BDPT)
Metropolis光线传播(MLT) - 有偏的光线传播方法
Photon mapping(光子映射)
Vertex connection and merging(VCM) - Instant radiosity(VPL / many light methods)
无偏和有偏的区别:
无偏方法没有任何系统错误;无论采样数是多少,无偏方法的期望永远是正确的值。
有偏方法只有在采样数趋于无穷时,期望才收敛于真实值。
Bidirectional Path Tracing(BDPT)
适用于光线传输很复杂的场景,如上图所示,直接光照只在左上角,而整个场景基本都是由间接光照照亮的。和之前在路径追踪中要采取重要性采样的原因类似:从相机发出的路径难以到达光源,导致大量的路径浪费,产生严重的噪声。
Metropolis Light Transport(MLT)
Metropolis是个人名
MLT是马尔可夫链蒙特卡罗(Markov Chain Monte Carlo / MCMC)的应用:根据当前采样找到下一次采样
非常适用于在局部探索复杂的光路,一旦找到一条光路,就会生成一堆光路,从而相当于没有浪费采样。
缺点:
难以估计收敛速率,可能计算了一天还没有明显进步。每个像素的收敛速率不同从而导致生成的图片有些“脏”,从而也不能渲染动画,因为每一帧的噪声都不同。
Photon Mapping(光子映射)
一种有偏的两步方法,非常适合计算Specular-Diffuse-Specular (SDS) 路径以及生成焦散(caustics)现象。
光子映射步骤:
- 从光源发射光子,光子在场景中不断弹射直到碰到漫反射物体,之后将哪里有光子记录下来;
- 从相机发射sub-paths,同样在场景中弹射直到碰到漫反射物体,统计sub-paths到达的每个着色点周围的 N 个光子,计算这 N 个光子覆盖的区域面积。
显然,单位面积内光子越多,这个着色点就应该越亮。
只有面积无限小的时候,才能收敛于真实值,因此光子映射是有偏但一致的方法。
为什么不确定一个面积统计光子数量,而要确定N个光子,计算覆盖面积?
因为如果确定面积统计光子,这个面积不会随着光源发出光子的数量增加而减小,也就不会有一个趋向于无穷小的过程。
Vertex Connection and Merging
一种BDPT和光子映射的组合。
Instant Radiosity(IR)
有时也叫做多光源方法(Many-light approaches)
高级外观建模
- 非表面模型
Participating media(雾,云)
头发/皮毛/纤维(BCSFDF)
Granular material(颗粒材质) - 表面模型
Translucent material(BSSRDF)半透明材质
布
Detailed material - 程序化外观
Participating Media(雾)
头发/皮毛/纤维
Kajiya-Kay Model
Marschner Model
将头发看作一根玻璃柱,有三种类型的光线:直接反射光(R),两次折射(TT),折射反射再折射(TRT)
Marschner模型已经能取得很不错的效果。
但是将人类头发的模型(Marschner模型)应用于动物皮毛不能得到很好的效果
因为动物的毛发中有很粗的Medulla对光线进行散射
为了模拟真实的毛发结构,提出了双层玻璃柱模型(就是闫大神提出的),增加了medulla造成的散射。
Granular Material(颗粒材质)
半透明材质
次表面散射:
光线射入半透明物体后有可能会从任意方向射出。
BSSRDF还适用于模拟人类皮肤
布料
表面细节
真实的物体表面不会像渲染结果一样完美
程序化外观
利用噪声函数,模拟物体材质效果,每次要渲染的时候再计算应该如何显示。
还可以定义3D噪声函数,来模拟物体内部的材质。