第十六章:Ray tracing4 蒙特卡洛路径追踪

Ray tracing4 蒙特卡洛路径追踪

回顾上节课

  • 辐射度量学

  • 光线传播

    • 反射方程
    • 渲染方程
  • 全局光照

  • 概率论复习

本节课:

  • 简短的 review
  • 蒙特卡洛积分
  • 路径追踪

review

渲染方程

image

概率论

image

蒙特卡洛积分

在 a、b 随机采样,找到一个 x 对应的 f(x),用 f(x)从 a 到 b 围出一个矩形。做多次采样,平均采样的结果,得到一个定积分的值。

image​​image

如果是均匀的采样,采样的 PDF 是一个常数:

image

对于均匀的采样,蒙特卡洛的积分结果是:

image

更通用的情况,不是均匀采样,即 x 的概率密度不是常数,可以通用的表示为:

image

越多的采样,得到的结果越准。

在 x 上积分,就得在 x 上采样。

Path Tracing

使用 Path Tracing 的原因是 whitted-style ray tracing 有一些不符合真实物理,需要提升这种算法。

image

1.whitted-style ray tracing 无法处理磨砂材质的反射,他会认为反射光还朝着镜面反射的方向,而这是不对的:

image
2.whitted-style ray tracing 认为光线打到漫反射到物体就停下来了,但真实的光线还会继续传播

color-bleeding 一个面反射的光到了另一个漫反射的面上,反射面的颜色流到了被反射的面上

image

whitted-style ray tracing 是错的,但是渲染方程是对的。渲染方程包含了两个问题:

image

1.对一个半球求解积分

2.递归的问题

可以用蒙特卡洛积分解渲染方程。
考虑一个像素点在直接光照下:

image​​image

简单的做一个均匀的采样

image​​image

只考虑直接光照:随机选择一个方向从着色点发出一条射线,如果打到了光源,就把光源的贡献算出来,没打到光源的就不算

image

如果是间接光照,Q 点打到 P 点的光照,就相当于 P 点有一个相机看向 Q 点,在 Q 点算出来的直接光照。

image

这样可以写出一个递归的算法:

image

但这样会有一些问题
1.光线的弹射数量会爆炸

image

N=1,弹射的数量才不会爆炸。所以,每次只选择一个方向进行采样,这个就叫做路径追踪:

image

每个像素会有 n 条路径,把 n 条路径的着色结果加起来求平均:

image​​image

2.递归不会停下来

image

如果限制弹射次数,又会有能量损失。

imageimage​​

于是引入了俄罗斯轮盘赌,以一定的概率决定是不是要停止追踪

image

最终期望的结果就是正确的结果:

image​​image

现在可以得到正确的结果,但不够高效:

image

光源小的情况下,很多 ray 会被浪费:

image

因此我们考虑对光源采样,从光源随机打出一条射线到着色点。

image
但前面提过蒙特卡洛在 x 上采样就得在 x 上积分,但是渲染方程是对立体角积分,但采样是在光源上采样。

因此,需要把渲染方程写成对光源积分的形式。

先找到 dA 和 dω 的关系:

image

均匀地对光源采样:

image

最后把这个光照分为两部分:光源直接照射的部分和其他反射的部分

image​​image

还有一个问题,需要计算光源被挡住的情况:

image

比较过去和现代的 raytracing
过去特指 whitted-style ray tracing,现在是指光线传播问题的一些解决方法的大集合:

image

还有一些没提到的问题:

怎么对半球均匀采样

怎么选择采样的 pdf(重要采样)

怎么生成真正均匀的随机数

能不能把光源采样和半球采样结合起来

把经过像素的每条光线的采样结果做平均时是怎么做平均,是否需要加权

算出来的 radiance 是怎么转换为颜色的

image

image​​image