GAMES101.闫令琪.06.光线追踪(3).蒙特卡洛路径追踪(Lecture 15-16)
- https://www.bilibili.com/video/av90798049
概率论回顾
- 随机变量 \(X\)
离散
- 概率分布函数 \(X \sim p(x)\)
- Probability Density Function (PDF)
- 性质
- \(p_i\ge0\)
- \(\sum_{i=1}^np_i=1\)
- 期望 \(E(X)\)
- \(E[X]=\sum_{i=1}^{n} x_{i} p_{i}\)
连续
- 概率密度函数 \(X \sim p(x)\)
- Probability Distribution Function (PDF)
- 某一个 \(x\) 对应的微元对应的概率
\(p(x)dx\)
- 长条面积
- 性质
- \(p(x)\ge0\)
- \(\int p(x)dx=1\)
- 期望
- \(E[X]=\int x p(x) d x\)
随机变量的函数
- 如果某个随机变量 \(Y\) 是随机变量
\(X\) 的函数
- \(Y=f(X)\)
- 期望的关系
- \(E[Y]=E[f(X)]=\int f(x)p(x)dx\)
蒙特卡洛积分
- Monte Carlo Integration
- 用于求定积分
- 数值形式是比较难求的定积分
- 黎曼积分:划分为若干段,每段围成的小矩形之和(极限)
Monte Carlo 积分
- 定积分 \(\int_a^bf(x)dx\)
- 随机变量 \(X_i\sim p(x)\)
- 蒙特卡洛积分 \(F_{N}=\dfrac{1}{N} \sum_{i=1}^{N} \dfrac{f(X_{i})}{p(X_{i})}\)
例子:均匀分布
- \(X_i\sim p(x)=C\)
- \(\int_a^bCdx=C(b-a)=1\)
- \(C=\dfrac{1}{b-a}\)
- \(F_N=\dfrac{b-a}{N} \sum_{i=1}^{N}f(X_{i})\)
性质
- 样本越多,越准确
- The more samples, the less variance.
- 对 x 采样,只能对 x 做积分
- Sample on x, integrate on x.
Path Tracing
Whitted-Style Ray Tracing
- 具体运作
- Always perform specular reflections / refractions
- Stop bouncing at diffuse surfaces
问题
- 不能很好的模拟 Glossy(金属,类似磨砂的感觉) 材质的物体
- 能产生高光,但是又有点糊,没有那么光滑
- The Utah Teapot(经典模型)
- 漫反射物体之间的反射光无法模拟
- Color Bleeding 效果
- 右图中盒子的侧面产生红色 / 绿色的效果
- Color Bleeding 效果
- The Cornell Box(经典模型)
- 广泛用于测试全局光照
路径追踪
- 基于渲染方程
\[ L_{o}(p, \omega_{o})=L_{e}(p, \omega_{o})+\int_{\Omega^{+}} L_{i}(p, \omega_{i}) f_{r}(p, \omega_{i}, \omega_{o})(n \cdot \omega_{i}) d \omega_{i} \]
- 问题
- 积分:蒙特卡洛方法求解
- 递归定义
简单的蒙特卡洛方法求积分
- 忽略发光项
\[ L_{o}(p, \omega_{o})=\int_{\Omega^{+}} L_{i}(p, \omega_{i}) f_{r}(p, \omega_{i}, \omega_{o})(n \cdot \omega_{i}) d \omega_{i} \]
- 待求的就是上面的方程
- 蒙特卡洛积分方程
\[ \int_a^bf(x)dx\approx\dfrac{1}{N} \sum_{i=1}^{N} \dfrac{f(X_{i})}{p(X_{i})},X_k\sim p(x) \]
\[ f(x)= L_{i}(p, \omega_{i}) f_{r}(p, \omega_{i}, \omega_{o})(n \cdot \omega_{i}) d \omega_{i} \]
- 简单的 PDF
- 半球立体为 \(2\pi\)
\[ p(\omega_i)=\dfrac{1}{2\pi} \]
- 积分方程
\[ L_{o}(p, \omega_{o})\approx\dfrac{2\pi}{N} \sum_{i=1}^{N} L_{i}(p, \omega_{i}) f_{r}(p, \omega_{i}, \omega_{o})(n \cdot \omega_{i}) d \omega_{i} \]
- 根据这个方程,那么就可以得出一个算法
- 递归算法
1 | shade(p, wo): |
问题1:指数爆炸
- 光线数量:\(N^{bounces}\)
- \(N=1\) 则不会有问题:近似效果会变差
- 近似效果很差,noisy
解决方案
- 可以为同一个像素,多次发射光线
- Trace more paths through each pixel and average their radiance!
- Ray Generation
1 | ray_generation(camPos, pixel): |
问题2:停不下来
- 互相调用:概率是很小的
- 事先设置一个递归深度
- 不行,之前的例子
- 玻璃灯,当设置的 bounces 比较小的时候,由于光线没有从玻璃外壳内出来,看不到里面的灯
- 能量损失了
- Cutting #bounces == cutting energy!
解决方法
- Russian Roulette(RR)
- 俄罗斯轮盘赌
- 一定的概率停止光线追踪
- 概率 \(p\)
发出一条光线,将得到的结果除以 \(p\)
- \(\dfrac{L_o}{p}\)
- 概率 \(1-p\) 不发出光线,得到结果 \(0\)
- 巧妙的一点:期望还是 \(L_o\)
- \(E(X)=p\times\dfrac{L_O}{p}+(1-p)*0=L_O\)
- 概率 \(p\)
发出一条光线,将得到的结果除以 \(p\)
- 伪代码如下(\(N=1\))
1 | shade(p, wo): |
- bounces 的期望
\[ \sum_i^{\infty}i(p^{i})(1-p)=\dfrac{p}{1-p} \]
问题3:SSP 小时效果不好
- SSP:Samples Per Pixels
- SSP 高的时候,运行很慢
- 光源比较小的时候,发射出较少的光线很难打到光源
解决方案
- 修改 PDF
- 对光源采样
Sampling to the light
- 对光源均匀采样
- 面光源面积为 A
- \(PDF = \dfrac{1}{A}\)
- 蒙特卡洛方法满足的条件:对谁积分,对谁采样
- 把渲染方程写成对光源表面的积分
- 找出 \(dA\) 和 \(d\omega\) 的关系
- \(dw=\dfrac{dA\cos\theta'}{||x'-x||^2}\)
- 向球面做投影
- 重写渲染方程
\[ \begin{aligned} L_{o}(p, \omega_{o})&=\int_{\Omega^{+}} L_{i}(p, \omega_{i}) f_{r}(p, \omega_{i}, \omega_{o})(n \cdot \omega_{i}) d \omega_{i}\\ &=\int_{A} L_{i}(p, \omega_{i}) f_{r}(p, \omega_{i}, \omega_{o})(n \cdot \omega_{i}) \dfrac{dA\cos\theta'}{||x'-x||^2}\\ &=\int_{A} L_{i}(p, \omega_{i}) f_{r}(p, \omega_{i}, \omega_{o})\dfrac{\cos\theta\cos\theta'}{||x'-x||^2}dA\\ \end{aligned} \]
- 我们将光照分为两个部分
- light source (direct, no need to have RR)
- 光源对这个点的共享
- other reflectors (indirect, RR)
- 所有其他非光源对这个点的贡献
- light source (direct, no need to have RR)
- 伪代码
1 | shade(p, wo): |
- 问题:如果光源和待求的点之间有物体
- 采样点和待求的点之间打一条光线,判断是否会相交
- 点光源不好处理
- 做成一个很小的光源
Path Tracing 评价
- Path tracing (PT) is indeed difficult
- Consider it the most challenging in undergrad CS
- Why: physics, probability, calculus(微积分学), coding
- Learning PT will help you understand deeper in these
- Path Tracing 能够做到几乎 100% 真实
- PHOTO-REALISTIC
- 照片级的真实感
- 例子:http://www.graphics.cornell.edu/online/box/compare.html
关于 Ray Tracing 这个概念
- Ray tracing: Previous vs. Modern Concept
- 以前
- 一般指的就是 Whitted 风格的 Ray-Tracing
- 现代
- 所有关于光线传播方法的一个大集合
- (Unidirectional & bidirectional) path tracing
- Photon mapping
- 光子映射
- Metropolis light transport
- VCM / UPBP…
未涵盖的话题
- 怎么样在半球上均匀的采样
- 给一个任何函数,怎么对它进行采样
- 对于蒙特卡洛采样方法,对于一个函数,怎么选择 PDF 使得最优
- 重要性采样理论
- important sampling
- 用随机数怎么样
- 随机数有质量之分
- 好的随机数:均匀分布在空间内,随机数之间的距离也能控制得很好
- low discrepancy sequences
- 重要性采样理论
- 能不能把对光源和物体的采样结合起来
- 可以,把不同的采样方法结合起来,使得效果不会比原来的任何一种方法差
- MIS 采样理论
- multiple imp. sampling
- 对于同一个像素的不同
path,简单的做平均行不行,需不需要对靠近中心一点的 path 加一个更大的权
- pixel reconstruction filter
- 最终计算出来的是一个 radiance,怎么转化为颜色
- gamma correction
- color space
- HDR(curve)