The Light Transport Equation笔记

直接光照的渲染方程:

其中,Ld(直接光照)可以写成:

其中t(p, ωi)是The ray-casting function  gives the point p' on the first surface that the ray (p, ωi) intersects.

如下图所示:

由于p' = t(p, \omega _i)

渲染方程可以先写成:

我们把向量的积分换成按面积的积分,如下图,到达p点的radiance是L(p' -> p)

原来的光照方程:

L(p'\rightarrow p) = L_e(p'\rightarrow p) + \int_{S^2} f(p', \omega _o, \omega ')L_e(t(p',\omega '), -\omega ')\left | cos\theta ' \right |d\omega '   

因为根据dω和dA的关系,有:

d\omega '=\frac{cos\theta ''dA}{\left | p''-p' \right |^2}

代入上面的dω'得到:

L(p'\rightarrow p) = L_e(p'\rightarrow p) + \int_{S^2} f(p', \omega _o, \omega ')L_e(t(p',\omega '), -\omega ')\frac{\left | cos\theta ' \right |\left | cos\theta '' \right |}{\left | p'-p'' \right |^2}dA(p'')

因为p''对p'只有可见和不可见两种情况,我们定义一个函数V(p', p'')代表可见性,V = 0不可见,V = 1可见。

上面式子中,定义一个G函数如下:

G(p',p'') = V(p',p'')\frac{\left | cos\theta ' \right |\left | cos\theta '' \right |}{\left | p'-p'' \right |^2}

把G(p', p'')代入渲染方程中可得:

L(p'\rightarrow p) = L_e(p'\rightarrow p) + \int_{S^2} f(p', \omega _o, \omega ')L_e(t(p',\omega '), -\omega ')G(p', p'')dA(p'')

下面看路径是3条或以上的情况:

假如我只考虑P3是光源的情况,那么P1到P0的radiance的计算如下:

一条一条路径拆分:

由p3光源贡献的p2到p1的radiance是:

L(p_2\rightarrow p_1) = \int _AL_e(p_3\rightarrow p_2)f(p_3\rightarrow p_2\rightarrow p_1)G(p_3,p_2)dA(p_3)

由p3光源贡献的p1到p0的radiance:

L(p_1\rightarrow p_0) = \int _AL(p_3\rightarrow p_2)f(p_2\rightarrow p_1\rightarrow p_0)G(p_2,p_1)dA(p_2)

按上面的写法会有问题,因为L(p3->p2)已经是固定的,那么dA(p2)的积分就变得无效。

因为一条路径是所有点都确定下来,正确的写法如下:

L(p_1\rightarrow p_0) = \int _A\int _AL_e(p_3\rightarrow p_2)f(p_3\rightarrow p_2\rightarrow p_1)G(p_3,p_2) \\ \times f(p_2\rightarrow p_1\rightarrow p_0)G(p_2,p_1)dA(p_3)dA(p_2)

其中积分域中的A是整个场景的几何体的面积。

如果p1,p2在采样到光源的情况下,那么p1到p0的radiance是:

L(p_1\rightarrow p_0) = L_e(p_1\rightarrow p_0) \\ + \int _AL_e(p_2\rightarrow p_1)f(p_2\rightarrow p_1\rightarrow p_0)G(p_2,p_1)dA(p_2)\\ + \int _A\int _AL_e(p_3\rightarrow p_2)f(p_3\rightarrow p_2\rightarrow p_1)G(p_3,p_2) \times f(p_2\rightarrow p_1\rightarrow p_0)G(p_2,p_1)dA(p_3)dA(p_2)

每一项的光照贡献定义成P(\bar{n}),表示从经过n + 1个顶点的一整条路径的radiance。

p1到p0的贡献写成:

L(p_1\rightarrow p_0) = \sum_{n=1}^{\infty }P(\bar{n})

上式每个P(\bar{n})输出可以理解成第n次弹射的输出,每次弹射路径经过的顶点都加1。

 

P(\bar{n})=\underbrace{\int _A\int _A\cdots \int _A}_{n - 1}L_e(p_n\rightarrow p_{n-1})\times \left ( \prod_{i=1}^{n-1}f(p_{i+1}\rightarrow p_i\rightarrow p_{i-1})G(p_{i+1},p_i) \right )dA(p_2)\cdots dA(p_n)

其中

\prod_{i=1}^{n-1}f(p_{i+1}\rightarrow p_i\rightarrow p_{i-1})G(p_{i+1},p_i)

被称为该路径的吞吐量(throughput),描述的是路径承载的radiance的大小。

把路径吞吐量用T来表示:

T(\bar{p_n}) = \prod_{i=1}^{n-1}f(p_{i+1}\rightarrow p_i\rightarrow p_{i-1})G(p_{i+1},p_i)

最后路径P(n)输出的radiance可写成如下:

P(\bar{n})=\underbrace{\int _A\int _A\cdots \int _A}_{n - 1}L_e(p_n\rightarrow p_{n-1}) T(\bar{n})dA(p_2)\cdots dA(p_n)

 

最后看P(\bar{n})的蒙特卡洛估计

如果把P(\bar{n})写成如下:

P(\bar{n})=\underbrace{\int _A\int _A\cdots \int _A}_{n - 2}\underbrace{\int _AL_e(p_n\rightarrow p_{n-1}) f(p_{n}\rightarrow p_{n-1}\rightarrow p_{i-2})G(p_n,p_{n-1})dA(p_n)}_{light \quad estimate} \\f(p_{n-1}\rightarrow p_{n-2}\rightarrow p_{n-3}) G(p_{n-1},p_{n-2})dA(p_{n-1})\cdots dA(p_2)

light estimate的部分写成蒙特卡洛估计:

L_o =\sum_{i=1}^{N} \frac{L_e(p_i\rightarrow p_{i-1})f(p_i\rightarrow p_{i-1}\rightarrow p_{i-2})G(p_i,p_{i-1})}{p_A(p_i)}

注意:如果每次弹射,都采样N个方向来估计,下次弹射还是N个,那经过3次弹射,计算量达到N³。

所以路径追踪一次弹射的蒙特卡卡洛估计,只取N = 1

 

假设两点在相互可见的情况下:

G(p',p'') = \frac{\left | cos\theta ' \right |\left | cos\theta '' \right |}{\left | p'-p'' \right |^2}

dA(p'')=\frac{\left | p''-p' \right |^2d\omega '}{|cos\theta ''|}

\int_A f(p_{n-1}\rightarrow p_{n-2}\rightarrow p_{n-3}) G(p_{n-1},p_{n-2})dA(p_{n-1}) \\ =\int_A f(p_{n-1}\rightarrow p_{n-2}\rightarrow p_{n-3}) |cos\theta _{p_{(n-2)}}|d\omega _{(p_{(n-1)} - p_{(n-2)})}

上式的估计可以写成:

\frac{f(p_{n-1}\rightarrow p_{n-2}\rightarrow p_{n-3}) |cos\theta _{p_{n-2}}|}{p_{\omega(p_{n-1} - p_{n-2})}}

按pbrbook的描述,最终可写成:

 

参考:

pbrbook 14.4

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值