Games101-10-渲染中的高级话题

Games101-10-渲染中的高级话题

高级光线传播

  1. 无偏的光线传播方法
    双向路径追踪(BDPT)
    Metropolis光线传播(MLT)
  2. 有偏的光线传播方法
    Photon mapping(光子映射)
    Vertex connection and merging(VCM)
  3. 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)现象。

光子映射步骤

  1. 从光源发射光子,光子在场景中不断弹射直到碰到漫反射物体,之后将哪里有光子记录下来;
  2. 从相机发射sub-paths,同样在场景中弹射直到碰到漫反射物体,统计sub-paths到达的每个着色点周围的 N 个光子,计算这 N 个光子覆盖的区域面积。

显然,单位面积内光子越多,这个着色点就应该越亮。

只有面积无限小的时候,才能收敛于真实值,因此光子映射是有偏但一致的方法。

为什么不确定一个面积统计光子数量,而要确定N个光子,计算覆盖面积?

因为如果确定面积统计光子,这个面积不会随着光源发出光子的数量增加而减小,也就不会有一个趋向于无穷小的过程。

Vertex Connection and Merging

一种BDPT和光子映射的组合。

Instant Radiosity(IR)

有时也叫做多光源方法(Many-light approaches)

高级外观建模

  1. 非表面模型
    Participating media(雾,云)
    头发/皮毛/纤维(BCSFDF)
    Granular material(颗粒材质)
  2. 表面模型
    Translucent material(BSSRDF)半透明材质

    Detailed material
  3. 程序化外观

Participating Media(雾)

头发/皮毛/纤维

Kajiya-Kay Model

Marschner Model

将头发看作一根玻璃柱,有三种类型的光线:直接反射光(R),两次折射(TT),折射反射再折射(TRT)

Marschner模型已经能取得很不错的效果。

但是将人类头发的模型(Marschner模型)应用于动物皮毛不能得到很好的效果

因为动物的毛发中有很粗的Medulla对光线进行散射

为了模拟真实的毛发结构,提出了双层玻璃柱模型(就是闫大神提出的),增加了medulla造成的散射。

Granular Material(颗粒材质)

半透明材质

次表面散射:
光线射入半透明物体后有可能会从任意方向射出。

BSSRDF还适用于模拟人类皮肤

布料

表面细节

真实的物体表面不会像渲染结果一样完美

程序化外观

利用噪声函数,模拟物体材质效果,每次要渲染的时候再计算应该如何显示。

还可以定义3D噪声函数,来模拟物体内部的材质。

参考

课程视频
GAMES101: 现代计算机图形学入门
GAMES101_Lecture_18.pdf


Games101-10-渲染中的高级话题
https://kenny-hoho.github.io/2022/10/22/Games101-10-渲染中的高级话题/
作者
Kenny-hoho
发布于
2022年10月22日
许可协议