计算机图形学入门XIII

Ray Tracing 4 (Monte Carlo Path Tracing)

一、蒙特卡洛积分

  1. Monte Carlo Integration:给任意一个函数,但写不出函数解析式,如何算出其定积分?找到$x_i$对应的$f(x)$值将其作为矩形的高,近似整个定积分的值,然后多次采样,平均长方形面积即可得到相对准确的结果
    $$
    F_N = \frac{b-a}{N} \sum_{i=1}^Nf(X_i)
    $$
    ${b-a}$是矩形的长,后面的求和是函数值采样和,除以N即可求得矩形平均值
  2. Tip:若不均匀采样则推出蒙特卡洛一般形式
    $$
    \int f(x)dx=\frac{1}{N} \sum_{i=1}^{N} \frac {f(X_i)}{p(X_i)} \quad X_i \sim p(x)
    $$

二、路径追踪

  1. 上一节课学到的Whitted-Style Ray Tracing理论是错误的,但它的方程式是对的

  2. 使用蒙特卡洛积分则可得出新的算法:
    $$
    L_o=\int_{\Omega^+}L_i(p,w_i)f_r(p,w_i,w_o)(n\cdot w_i)dw_i
    \
    \approx \frac{1}{N} \sum_{i=1}^{N} \frac{L_i(p,w_i)f_r(p,w_i,w_o)(n\cdot w_i)}{p(w_i)}
    $$

  3. 但这种递归算法也存在一些问题:

    • 随递归深度增加光线数量爆炸
    • 迭代永远不会停(因为实际光线弹射次数也是无上限的)
  4. 俄罗斯轮盘赌解决上述提到的第二个问题:以一定的概率$P$向某方向射出以光线$L_o$,最后返回其均值$L_o / P$,那么有$1-P$的概率不会在该方向射出光线,此时结果为0,那么最后期望的结果仍为:
    $$
    E = P*(L_o / P) + (1-P)*0 = L_o
    $$

  5. 解决以上问题后我们得到正确的路径追踪方程,但目前的形式效率不高,我们需要转换到在光源上采样在光源上积分,就可以得到效率更高的方法:
    $$
    L_o(x,w_o)=\int_{\Omega^+}L_i(x,w_i)f_r(x,w_i,w_o)cos\theta d w_i
    \
    = \int_{A}L_i(x,w_i)f_r(x,w_i,w_o)\frac{cos\theta cos\theta’}{\Vert x’ - x \Vert^2}dA
    $$

  6. 改进后的算法相当于在光照区域不采用俄罗斯轮盘赌,在其他区域使用轮盘赌,这样就可以有效提高采样处理效率
    闫老师灵魂手绘

(下接 计算机图形学入门XIV)

キンギョ Pid:46985381


计算机图形学入门XIII
https://baifabaiquan.cn/2021/04/23/计算机图形学入门XIII/
作者
白发败犬
发布于
2021年4月23日
许可协议