高级图形渲染概要

高级光线传播

  • 无偏光线传播
    • 双向路径追踪(BDPT)
    • Metropolis光线传播 (MLT)
  • 有偏光线传播
    • 光子映射
    • Vertex connection and merging (VCM) -结合双向追踪和光子映射
  • 实时辐射度算法(IR)

有偏是随着样本的增加,结果会变化,如果样本无限多,结果会收敛到正确值。

无偏是不管样本有多少,都会得到正确的结果。

只要得出的结果会模糊就是有偏。

双向路径追踪(BDPT)

思想:从光源和相机各打出一条光线,然后连接端点。

应用场景:在光源由漫反射形成的场景中效果较好。

Metropolis光线传播 (MLT)

思想:使用马尔科夫链和蒙特卡罗方法,通过一定的概率扰动路径的传播,得到一条新的路径,由一条路径追踪为种子生成其他的路径。

应用场景:在复杂场景中的光线追踪

缺点:难以估计渲染完成画面的时间,局部的结果可能会比较"脏"

光子映射

应用场景:特别适合渲染水中焦散的现象

一种实现方法之一:

  • 从光源打出光线,在路径中发生反射折射,直到打到漫反射的物体上停止
  • 再从相机打出光线,在路径中发生反射折射,直到打到漫反射的物体上停止
  • 做局部的密度估计,对任意一个着色点取他周围的确定光子数并通过其占据的面积计算密度

缺点:如果当光子取值,画面会很脏,如果光子取值很大,画面会变糊。

如果光子数量无限多,那么就可以收敛成正确的画面。

Vertex connection and merging (VCM)

思想:结合光子映射和双向路径追踪,如果BDPT中两边打出的光线不能连接,利用光子映射将一定范围的光线做融合,提高光线利用率。

实时辐射度算法(IR)

思想:光源先进行若干次弹射到某个物体上,将这些物体当做是新的光源再进行路径追踪。

优点:渲染速度快,对漫反射场景效果较好。

缺点:无法处理glossy材质且场景缝隙会产生亮点。

材质建模

非表面模型

散射介质:光在传播时穿过会发生散射的介质比如雾、云等,通过相位函数决定了光如何被散射。

光通过散射介质的两种情况:

  • 被吸收一部分能量,被介质削减了一部分能量
  • 被反射一部分能量,能量从其他地方的能量照射进来或者介质本身会发光

头发/毛发:毛发可以理解为一个柱状模型,可以直接反射,也可以发生折射进入内部。

介绍了几种模型:

  • Kajiya-Kay Model:认为头发只有反射没有折射
  • Marschner Model:认为头发是一个半透明的玻璃圆柱体,有反射也有折射
  • Double Cylinder Model:动物与人类的头发不同,动物的头发髓质很大因此更容易发生散射,所以需要重新考虑模型,增加了散射这一参考系

颗粒材质:可以制作出比如沙子城堡的材质

表面模型

次表面散射(BSSRDF)

  • 光线通过材质内部发生了散射,比如皮肤、玉石等等。
  • BSSRDF是BRDF的延伸,下图为BSSRDF的渲染方程和示意图。
  • 使用Dipole Approximation,让物体内外各有一个光源来模拟光的扩散。
BSSRDF

衣服:

衣物的渲染主要有三种方法:

  • 将衣物当作表面,根据不同的织法使用不同的BRDF,相对来说效果较差但是简单快捷
  • 将衣服当做散射介质,根据单根纤维的特性与他的分布来构建散射参数
  • 将衣物的每一根纤维为单位进行渲染,计算量十分巨大。

表面细节

  • 渲染出来的场景太过于完美,反而没那么真实,真实的世界有磨损有划痕。
  • 微表面模型的BRDF的法线分布不该是均匀的,满足大体趋势的同时有自己的波动,但是会造成运算量巨大。
  • 这是因为在法线分布复杂的情况下,很难建立有效的的光线通路(光源→表面→摄像机)
  • 通过一个像素对应了一块表面,把整块范围内的法线分布整合起来获得(P-NDF),以此简化计算
  • 如果表面足够微小,需要考虑波粒二象性使用波动光学,传统的几何光学反而不太够用了。
  • 使用波动光学得到的BRDF和几何光学得到的BRDF类似又有自己的特点(光的干涉和衍射)

程序化生成

  • 通过使用噪声函数,不需要真正生成复杂的材质,可以通过查询的方法来简化计算
  • 通过查询的方法可以生成各种各样的模型
  • 工业界使用Houdini专门来做程序化生成材质

参考资料

GAMES101-现代计算机图形学入门-闫令琪

完整笔记