Lecture 18: Advanced Topics in Rendering
一、高级光照传输
1.无偏方法 Unbiased
- 无偏的蒙特卡洛积分得到的期望是真实值(无论多少次采样都是);有偏得到的期望值敛于真实值
①双向路径追踪 BDPT
- 从相机和光源分别追踪路径(生成两条半路径),连接路径终点(将半路径端点连起来)
- 实现困难而且速度很慢
②蒙特卡洛光传输 MLT
- 核心思想:构建一个马尔可夫链(统计采样工具)来生成一系列光线路径,并从中估计最终图像的颜色
- 优势
- 擅长处理困难的光路径(多次镜面反射和折射)
- 无偏估计(渲染结果与真实场景的光照一致)
- 缺点
- 很难估计花费的时间——取决于场景的复杂度和初始路径的选择
- 结果可能脏——存在噪声
- 不适合实时渲染或者动画渲染
2.有偏方法 Biased
①光子映射 Photon Mapping
- 由两部分组成:光子追踪(光源发射)和光子收集(相机发射)
a.光子追踪
- 发射光子:从 光源 发射光子,并追踪光子的传播路径
- 记录光子相交情况:当光子与场景中的漫反射表面相交时,将光子记录下来,并 存储其位置、能量和方向等信息
- 光子存储结构:通常使用 K-D 树 或 八叉树 等数据结构来存储光子,以便快速检索和查询
b.光子收集
- 发射子路径:从 相机 发射 子路径,并追踪子路径的传播路径
- 查找光子:当子路径与场景中的漫反射表面相交时,在光子存储结构中查找 距离交点最近的光子
- 计算光照:根据找到的光子数量、能量和方向等信息,计算交点处的光照强度
- 累积光照:将计算得到的光照强度 累积到最终图像中
c.局部密度估计
- 假设:光子数量多的区域应该更亮
- 方法:对于每个着色点,找到最近的 N 个光子,并计算这些光子覆盖的表面积
- 光照强度计算:根据找到的光子数量、能量和覆盖的表面积,计算着色点的光照强度
- 通过局部密度估计,我们可以使用 有限数量的光子 来估计场景中每个像素的光照强度,从而 提高渲染效率
②Vertex Connection and Merging (VCM)
- 结合了BDPT和Photon Mapping
- 核心思想:利用 BDPT 生成的子路径,即使这些子路径的端点无法直接连接,也可以通过光子映射技术进行合并,从而提高渲染效率并改善图像质量
③Instant Radiosity (IR)
- 核心思想:将光照表面视为光源,并使用虚拟点光源 (VPL) 来模拟光照效果
二、高级建模
1.非表面模型
①非散射介质 —— 烟雾、云层、水、空气
- 当光线穿过 Participating Media 时,会 被介质中的颗粒或分子吸收和散射,导致光线强度减弱,并改变光线的传播方向
- 渲染方法 :Participating Media 的渲染通常采用 蒙特卡洛方法,通过 随机选择光线传播方向和距离 来模拟光线的散射过程
②毛发
- Kajiya-Kay 模型:
- 基于光线追踪技术
- 关注毛发的散射特性
- Marschner 模型
- 基于光线追踪技术
- 更加详细地描述了毛发的结构,包括鳞片、皮质和髓质等
- Medulla 髓质
- 透明度:髓质层的大小和形状会影响头发的透明度(越大透明度越高)
- 散射:髓质层的大小和形状会影响头发的透明度
- Double Cylinder 模型
- 基于光线追踪
- 将头发纤维视为由两个圆柱体组成,外层圆柱体代表毛鳞片和皮质层,内层圆柱体代表髓质层
③颗粒状材质 Granular Material
2.表面模型
①半透明材料
- 玉、水母
- 次表面散射 Surface Scattering —— BSSRDF
②布料
- 将布料渲染为 表面
- 根据编织图案计算整体行为
- 使用 BRDF 进行渲染
- 将布料渲染为 非散射介质
- 考虑单个纤维的性质和分布,将其作为参与介质进行渲染
- 使用散射参数来模拟纤维对光线的影
- 将布料渲染为 实际纤维
- 明确渲染每根纤维
- 需要较高的计算资源,但可以更真实地模拟布料的视觉效果
③细节模型
- NDF:在微表面模型的BRDF中的法线分布函数
3.程序化
- 使用算法而非纹理来创建物体表面的细节
优势
- 无需纹理: 通过计算 噪声函数,可以生成复杂的细节,无需依赖预定义的纹理贴图
- 3D 内部结构: 3D 噪声函数可以模拟物体内部的细节,例如切割或破碎后的内部结构
- 复杂噪声函数:复杂的噪声函数可以生成更具真实感的细节