高级光线传播
无偏 unbiased Vs 有偏 biased
Path tracing 中使用 Monte Carlo 计算积分项的估计值。 不管采样多少样本,都满足E(估计值) = 真实值,称为无偏估计,否则为有偏估计。少量样本时有偏而极限情况下无偏,则称为consistence,这是有偏估计的一种特殊情况。
双向路经追踪 BDPT
Baseline方法:从眼睛发出一条光路,追踪这个光路直到光源。
BDPR方法:
- 从眼睛(即摄像机)打出一条半路经
- 从光源打出一条半路经
- 把两条路往连起来,形成一条完整的路径。
缺点:
实现非效复杂、速度非常慢
效果:[08:13]
由于光源向上,场景大部分光来自间接光。因此大多数情况下 path tracing 的第1个 bounce 是 diffuse,导致不好控制它打到能量集中的区域去。
💡 分析常规方法的局限场景,针对局限场景做优化。
Metropolis(人名) Light Transport (MLT)
原理:
用"马尔可夫链"采样。
Monto Carlo 性质:当f(x)与 p(x) 形状一致时, bias 最小,
马尔可夫链性质:可以使得采样样本符合特定的 p(x)[14:19]
结合两者的特点,可使得定积分的估计值与真实值的bias最小。
方法:
当找到一个合适的path,会在这个path周围生成新的样本,这个新的样本大概率也是一个合适的path。
效果:
[14:17] 适用于复杂困难的光路传播。因为只要找到一条,就能比较容易地找到更多。
缺点:
难以估计算法的收敛速度。
每个像素的收敛情况都不一样,多帧画面效果为抖动。
Photon Mapping光子映射
适用于渲染 caustics.[20:48]
是有偏算法
caustics: 由于光线聚集形成非常强的图案。适于用 specular-diffuse-specular
具体方法
- Stage 1
光源向外辐射光子,光子 bounce 直到遇到diffuse表面,计算光子最后停留的位置
- Stage 2
从 camera 出发,打出 sub path, bounce,直到遇到 diffuse 表面。计算sub path最后停留的位置。
- Stage 3,
计算 local density estimation,光子越集中的地方应该越亮
对于任意一个着色点,取最近N个光子,计算 N 个光子所占的面积 A,可算出光子密度为N/A。
特点
N 太小会有噪声,N太大会糊
由于光子密度是通过 N/A 估计出来的,不是真实的密度,因此该算法是有偏算法
当 Stage 1中的光子数趋于\(\inf\)时, Stage 3的A趋于0,密度估计趋于正确值。因此该算法是bias but consistent 算法。
如果通过固定A数光子数量来计算密度,那么光子数再多也是有偏算法。
💡 共同目的都是找到最能体现光线传播特点的路径。
VCM: Vertex Connection and Merging 双向路经追踪 + 光子映射
原理:[31:15]
- 将光子停留位置(红)与 ray 停留位置(绿)连成一条 ray path.
- 如果红点和绿点非常接近,就把它们合并
❓ [?] 怎么理解合并这个概念。
IR: Instant Radiosity
原理:
已被照亮的这些地方,也被认为是光源,并用这些光源再照亮其它地方。最终相当于光线弹射了多次。
具体做法:
- 从光源打出很多sub Path,最终停在某些地方
- 停住的地方会成为新的光源
- 从当 camera 看某个着色点时,用新的光源照这个着色点
特点
优点:速度快
缺点:
- 有一些地方莫名其妙地发光[34:51]
- 不能处理 glossy 物体
💡 这是与光追不同的另一套简化的建模思想,因为是简化模拟的方法,所以有Artifacts.
本文出自CaterpillarStudyGroup,转载请注明出处。
https://caterpillarstudygroup.github.io/GAMES101_mdbook/