Q124:PBRT-V3,“路径追踪”积分器(14.5章节)

198 篇文章 12 订阅
195 篇文章 27 订阅

〇、概述

路径形式的LTE:

这里写图片描述

由这个方程得知,要求解从撞击点p1返回到相机p0的辐射率,需要解决两个问题:

问题1,怎么对无穷条路径返回的辐射率进行求和?

问题2,怎么求某一条路径返回的辐射率?

一、怎么求和?

可以使用Russian roulette方法。

参考: Q122:PBRT-V3,提高Monte Carlo积分计算效率的方法——Russian Roulette和Splitting(13.7章节)

那么,求和的式子等价于:

这里写图片描述
这里的qn即为“Q122”中提到的beta(n)。

二、怎么求某一条路径返回的辐射率?

2.1 构建递增的路径

光线从相机p0出发,撞击到场景中最近距离的某表面上的p1;
对p1点的BSDF1进行采样,得到一个方向wi1;
光线从p1出发,沿着wi向外撞击场景中最近距离的某表面上的p2;
对p2点的BSDF2进行采样,得到一个方向wi2;
光线从p2出发,沿着wi2向外撞击场景中最近距离的某表面上的p3;
……

当光线到达p1是得到长度为1的路径;
当光线到达p2是得到长度为2的路径;
当光线到达p3是得到长度为3的路径;
……

发现:
1-长度为n的路径是在长度为n-1的路径的基础上构建得到的。
2-当完成长度为n的路径的构建时,其实在这过程中已经完成了n条长度一次递增的路径的构建。
3-相邻两个撞击点p(n-1)、p(n)是彼此可见的,所以路径形式的LTE中的几何因子G中的可见因子V是等于1的。

考虑到,在构建长度为n的路径的过程中在前面(n-1)个撞击点(p1、p2、……、p(n-1))处都是基于立体角对BSDF进行采样的(最后一个点是打在光源上,对光源还是基于面积的采样)。

所以,需要将长度为n的路径上返回的光的表达式中的前(n-1)个积分换成立体角形式:
这里写图片描述

这里写图片描述

所以,
这里写图片描述

三、C++代码实现

特别注意的是:
单条路径的最后一个顶点p(n)是在光源上,所以p(n-1)处的渲染即为“直接光照”。
直接调用 Q120:PBRT-V3,“直接光照”积分器(14.3章节)中实现的UniformSampleOneLight()

另外,对for()循环整体的理解截图如下:
这里写图片描述

接下来直接看PathIntegrator::Li()

这里写图片描述
这里写图片描述
这里写图片描述
(缺失的这段代码是subsurface相关,略去先)
这里写图片描述

四、总结

PathIntegrator的大概步骤总结如下:

1,构建递增的路径

当完成长度为n的路径的构建时,其实在这过程中已经完成了n条长度一次递增的路径的构建。

2,求长度为n的路径的贡献

用式子14.19求出长度为n-1的路径对应的β,然后用“直接光照”的方式求得长度为n的路径的贡献。

3,所有长度的路径的贡献的累加

PBRT-V3提供的程序中巧妙的地方在于:一边构建路径,一边进行相应路径贡献的累加;构建完成时,累加也完成了。

4,Russian Roulette终止继续构建路径


内容概要的另一个版本:

这里写图片描述


另外,

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值