Lecture 18:Advanced Topics in Rendering
东西很多,当作扩展听一听就行。
1. 高级光线传播
1.1 概述
- 无偏光线传播
- 双向路径追踪
- Metropolis light transport (MLT)
- 有偏光线追踪
- 光子映射
- Vertex connection and merging (VCM)
- 试试辐射度算法
1.2 有偏(Biased)与无偏(Unbiased)的 Monte Carlo 估计
- 无偏
- 无偏的 Monte Carlo方法没有任何系统误差。即无论使用多少样本,无偏估计的期望值总是正确的。
- 有偏
- 有系统误差存在就是有偏估计。
- 有偏估计的一致性(consistent):当取样无穷大时没有系统误差(会收敛)
在图形学中
- Biased(有偏) == blurry(模糊)
- Consistent(有偏一致性) == 当取样点无穷时不模糊
1.3 双向路径追踪 Bidirectional Path Tracing(BDPT)
1.3.1 概述
- 无偏的 光线传播方法。
(路径追踪是从相机到光源使用一条路径连接起来。)
1.3.2 BDPT 思想
- 分别从相机和光源追踪sub-paths
- 从两个 sub-path 连接端点(各追踪一部分然后汇聚)
1.3.3 BDPT 特点
- 适合光线传播在光源这一边比较好算的情况。
- 难以实现且非常慢
1.4 Metropolis Light Transport (MLT)
1.4.1 概述
- 无偏估计
- 用马尔可夫链来进行采样
1.4.2 马尔可夫链 Markov Chain Monte Carlo(MCMC) application
根据当前的样本可以生成与其靠近的下一个样本,他可以生成以任意形状函数为PDF的样本。
关键思想:局部扰动一个现存路径来获得一个新路径。
1.4.3 特点
优点:
- 比较适合做困难的光线传播(只要找到一条路径做为种子就可以找到更多路径)
- 无偏
缺点:
- 难以估计收敛速度
- 不能保证每个像素的收敛速度都相等(比较局部)
- 所以图片看起来比较脏
- 不能渲染动画
1.5 光子映射(Photon Mapping)
1.5.1 概述
- caustics(聚焦):由于光线聚焦产生的一些列图案。
- Specular-Diffuse-Specular(SDS):光线先通过镜面反射,然后再进行漫反射,然后再进行镜面反射。
- 有偏的
- 擅长处理 Specular-Diffuse-Specular(SDS)paths 和生成 caustics。
1.5.2 方法
- 光子追踪
从光源发射光子,让它们在四周弹射,直到光子打到diffuse的物体上,把光子记录下来。
- 光子收集
从眼睛和摄像机开始,射出 sub-paths,让它们在周围跳跃,直到它们打到漫反射的物体上。
- 计算局部密度估计
当第二趟打到 diffuse 物体表面时,就要做一个局部的密度估计。
思想:光子分布越集中越亮。
做法:对于每个着色点,找到最近的N个光子。计算它们占据的面积。然后就可以计算光子的密度。
1.5.3 分析
为什么有偏?
- 密度的估计不准确,只有 dA 足够小才接近正确。
解决
- 更多的光子辐射出去 → 相同的N个光子则会覆盖更小的区域 ΔA → ΔA 会更加接近 dA。所以它是biased,但是 consistent 的。
1.6 顶点连接和合并 Vertex Connection and Merging(VCM)
1.6.1 概述
结合了 双向路径追踪 和 光子映射
1.6.2 思想
- 如果端点不能被连接而是可以被融合就不浪费 BDPT 中的 sub-paths了。
- 使用 photon mapping 来处理 “photons” 附近的融合。
1.7 实时辐射度算法 Instant Radiosity (IR)
- 也称为 many-light 方法
- 思想:已经被照亮的表面可以被当作光源。
- 方法:
- 从光源打出 sub-paths 并把每一个 sub-path 的端点当作 Virtual Point Light(VPL)
- 使用这些 VPLs 渲染场景
- 优点:快速并且通常对漫反射场景的结果比较好。
- 缺点:
- 当 VPLs 非常接近着色点的时候,Spikes 将会融合(如下右图有过亮的点)。
- 不能处理glossy的材质。
2. 高级外观建模
2.1 非表面材质
2.1.1 散射介质(Participating Media)
当光通过散射介质时,任何一点可以(部分)吸收和散射。
使用相位函数(Phase Function)来描述参与介质中任意点的光散射角分布。
散射介质的渲染过程
- 随机选择一个方向来弹射。
- 随机选择一个距离直行。
- 对于每一个“着色点”,把它连接到光源。
2.1.2 Hair Appearance
- Kajiya-Kay Model
头发会散射成一个圆锥。像是diffuse+specular。
- Marschner Model
除了考虑被散射的光线还要考虑穿过头发的光线。Marschner Model 考虑了以下三证类型的光线。
R:直接反射的光。
TT:穿进去再传出去的光。
TRT:光线进到头发里面,在头发的内壁发生一次反射再回去。
2.1.3 Fur Appearance
人和动物毛发都具有三层结构,如下图所示。但动物的 Medulla 比人大很多。
双层圆柱模型 Double Cylinder Model
2.1.4 颗粒材质(Granular Material)
2.2 Surface Model
2.2.1 Translucent(半透明) Material
2.2.2 次表面散射(Subsurface Scattering)
Subsurface Scattering 是在表面下发生的散射。
- BSSRDF 是BRDF概念的延申。它表示某一点的出射radiance来源于另一个点的微分irradiance。
- Scattering Function 渲染方程的延申,表示所有表面上的点和所有方向的积分。
- Dipole Approximation 通过引入两个点光源来近似次表面散射的效果
2.3 布料 Cloth
2.3.1 概述
- 布料是一系列缠绕的纤维构成的。
- 缠绕有两级:纤维(Fiber)第一次缠绕会成为股(Ply),股(Ply)缠绕会成为线(Yarn)。
2.3.2 渲染布料的三种方式
Cloth: Render as Surface(把布料当作表面来渲染)
- 给定编制图案,计算总体表现。
- 使用BRDF来渲染。
- 但是对于天鹅绒,根本不是一个平面,所以当作表面来渲染不合理。
Cloth: Render as Participating Media(把布料当作散射介质来渲染)
- 把单个纤维和它们分布的性质转化为散射参数。
- 然后把它们当作散射介质来渲染。
Cloth: Render as Actual Fibers (把布料当作真实的纤维来渲染)
- 即明确的渲染每一根纤维。
2.4 Detailed Appearance
2.4.1 动机
渲染出来的太过“完美”,而真实的世界中充满着各种各样的细节。
而细节很难通过渲染表现出来。
因为对于微表面模型来说,通过从光源的不断反射,只有非常少的一部分会被反射到相机。
2.4.2 解决:BRDF over a pixel
由于像素覆盖很多的微表面,所以将一个像素覆盖的法线分布计算出来然后替换光滑的法线分布,用在微表面模型里。
一个可以像素覆盖不同大小的微表面,对于比较大的范围会得到统计学规律,而对于比较小的微表面得到的就比较有特点。
不同类型的法线贴图会得到不同的法线分布。
2.5 波动光学
当物体非常小,就不能假设光沿直线传播,而是要考虑波动性,考虑光的波动性。
波动光学的 BRDF 与几何相似,但是相对而言比较不连续。
2.6 程序化生成的外观(Procedural Appearance)
动机 不使用纹理贴图来定义细节。
3D noise(噪声函数): 可以直接通过噪声函数来计算细节,使用这种方法可以看到被切割或断裂的内部纹理。
应用:地形、水面、木头。
参考
图形学笔记(十六)渲染的高级问题 —— BDPT、MLT、光子映射、VCM、IR、散射介质、毛发材质(双圆柱模型)、次表面散射、布料渲染-CSDN博客
这周事情比较多,人又懒得一批… 就一直没更…