Hierarchical Russian Roulette for Vertex Connections论文研读

本文介绍了为了解决双向路径跟踪算法在处理反射计算时的效率和质量问题,提出的一种分层俄罗斯轮盘赌技术。该技术通过在眼睛子路径顶点处使用近似散射波瓣,对光顶点进行高效剔除,从而减少采样点,提升渲染质量。算法中涉及到随机散射范围的确定、分层拒绝策略以及实时生成最小随机数的方法,确保了算法的高效性和精度。此外,还探讨了算法在各向异性反射波瓣中的应用以及在双向路径跟踪中的集成,展示了未来可能的改进方向和限制问题。
摘要由CSDN通过智能技术生成

第二篇论文研读文章了,虽然依旧很菜,但这一篇开始就相对轻松一点了。文档种有些问题,其中所有“实时”应该替换为“高效”。

Hierarchical Russian Roulette for Vertex Connections

主要目标

为了解决双向路径跟踪算法在specular-diffuse-glossy或glossy-diffuse-glossy情况下反射计算低效且质量差的问题,提出了一个分层的俄罗斯轮盘赌技术来进行顶点连接。该技术利用在眼睛子路径(或相机子路径)顶点处的近似散射波瓣来与VPL进行连接,不在波瓣中的VPL便可以直接剔除。由于使用了俄罗斯轮盘赌技术,便可以不需要使用太多的采样点就可提升绘制的质量。

算法细节

符号表格

Symbol Domain Description
y y y R 3 R^3 R3 光子路径中的顶点
z z z R 3 R^3 R3 眼睛子路径中的顶点
P ( y , z ) P(y,z) P(y,z) [ 0 , 1 ] [0,1] [0,1] 俄罗斯轮盘的概率
n n n S 2 S^2 S2 表面法线
ω \omega ω S 2 S^2 S2 散射波瓣上的一个方向
ω ′ \omega^{\prime} ω S 2 S^2 S2 入射方向
ρ ( z , ω ′ , ω ) \rho(z,\omega^{\prime},\omega) ρ(z,ω,ω) [ 0 , ∞ ] [0, \infin] [0,] z z z处的BRDF
q z ( ω ) q_z(\omega) qz(ω) [ 0 , ∞ ] [0, \infin] [0,] z z z处的近似散射波瓣
ξ i \xi_i ξi [ 0 , 1 ) [0,1) [0,1) i i i个均匀随机数
R ( ω ; z , ξ i ) R(\omega;z,\xi_i) R(ω;z,ξi) [ 0 , ∞ ] [0, \infin] [0,] z z z处的随机散射范围
D ( ⋅ ) D(\cdot) D() [ 0 , ∞ ] [0, \infin] [0,] GGX分布
K ( ⋅ ) K(\cdot) K() [ 0 , 1 ] [0, 1] [0,1] 平方椭球波瓣(SEL)函数
α x , α y \alpha_x,\alpha_y αx,αy [ 0 , 1 ] [0, 1] [0,1] GGX的粗糙度
α ˙ x , α ˙ y \dot\alpha_x, \dot\alpha_y α˙x,α˙y [ 0 , 1 ] [0, 1] [0,1] SEL的粗糙度
M M M N N N 光子路径的数量

分层的俄罗斯轮盘赌

在这个方法中,对于所有缓存的光顶点,都会执行一次俄罗斯轮盘赌,并且会将眼睛顶点处的BRDF考虑在内。俄罗斯轮盘赌通过基于范围的剔除来加速,因此就可以从大量的光顶点中高效地采样出一些光顶点。现有的光剔除方法都使用光顶点的范围,而我们使用眼睛顶点的范围来对眼睛子路径跟踪中的每个顶点进行光顶点剔除。本节介绍一种高效的分层的俄罗斯轮盘赌算法。

随机散射范围

对于光顶点 y y y和眼睛顶点 z z z的连接,我们使用下面的俄罗斯轮盘赌的接受概率: P ( y , z ) = min ⁡ ( C q z ( z y → ) ∥ y − z ∥ 2 , 1 ) P(\mathrm{y}, \mathrm{z})=\min \left(\frac{C q_{\mathrm{z}}(\overrightarrow{\mathrm{zy}})}{\|\mathrm{y}-\mathrm{z}\|^{2}}, 1\right) P(y,z)=min(yz2Cqz(zy ),1)其中, C ∈ [ 0 , ∞ ) C \in [0, \infin) C[0,)是一个用户指定的参数,可用来控制方差和性能之间的权衡。球函数 q z ( ⋅ ) q_z(\cdot) qz()约等于散射波瓣: q z ( ω ) ≈ ρ ( z , ω ′ , ω ) ∣ ω ⋅ n ∣ q_{\mathrm{z}}(\omega) \approx \rho\left(\mathrm{z}, \omega^{\prime}, \omega\right)|\omega \cdot \mathrm{n}| qz(ω)ρ(z,ω,ω)ωn
公式中出现的符号可以在表格中查询。为了对所有缓存了的光顶点进行俄罗斯轮盘的加速操作,就需要通过眼睛顶点在世界空间中的接受范围来剔除那些不重要(被拒绝)的光顶点。使 ξ i \xi_i ξi表示第 i i i个均匀随机数,那么眼睛顶点 z z z处在世界空间中的范围的界限就是一个椭球函数,并且给定距离 ∥ y − z ∥ \|y-z\| yz满足 P ( y , z ) = ξ i P(y,z)=\xi_i P(y,z)=ξi,其定义如下: R ( ω ; z , ξ i ) = C q z ( ω ) ξ i R\left(\omega ; \mathbf{z}, \xi_{i}\right)=\sqrt{\frac{C q_{\mathbf{z}}(\omega)}{\xi_{i}}} R(ω;z,ξi)=ξiCqz(ω) 因此,只有在 R ( ω ; z , ξ i ) R(\omega;z,\xi_i) R(ω;z,ξi)范围内的光顶点才会进行顶点连接的操作。

分层拒绝
使用BVH剔除

为了快速地在散射范围 R ( ω ; z , ξ i ) R(\omega;z,\xi_i) R(ω;z,ξi)中寻找光顶点,我们构建了一个光顶点的二分层级包围体(BVH)。使用这个BVH,散射范围和光顶点的包围盒之间的相交测试就可以使用一种自上而下的分层方式进行。然而,尽管散射范围的形状只依赖于近似波瓣 q z ( ω ) q_z(\omega) qz(ω),但范围的大小却依赖于随机变量 C / ξ i \sqrt{C/\xi_i} C/ξi 并且对于不同的光顶点(即叶子节点)来说都是不同的。因此,为了适当地对每一个BVH节点执行相交测试,对于内部节点都使用最大的大小,如图3所示。
在这里插入图片描述
这个大小为 C / m i n i ∈ L ξ i \sqrt{C/min_{i \in L}\xi_i} C/miniLξi ,其中 L L L表示该节点包含的叶子节点的索引集。每一个节点都需要能够高效地获得这个最小的随机数 m i n i ∈ L ξ i min_{i \in L}\xi_i miniLξi

预生成随机数的问题

一种低效的获取每一个节点中最小的随机数的方法就是以自下而上的方式进行预计算。首先,在预处理步骤中将单个随机数分配给每个光顶点,其方法类似于随机光剔除方法。然后,在构建BVH的阶段,将最小随机数从叶子节点传播到更上层的节点。然而,因为对于所有的眼睛顶点都是使用相同的预计算的随机数,这种方法就会在眼睛顶点间产生相关性方差。如果眼睛顶点被密集采样(例如超采样)的话,这种相关性方差会影响计算效率,并且在后处理去噪过程中(例如图片去噪)也会极大地降低效率。为了避免相关性方差,就必须为每一对光顶点和眼睛顶点赋予不同的随机数。但是,在每一个眼睛顶点处都进行一次完全自下而上传播的代价明显是非常昂贵的。所以我们提出了一个实时生成最小随机数的方法,该方法是自上而下的方式并且不会对所有光顶点生成随机数,自然也就不需要自下而上地传播随机数了。

实时生成最小的随机数

我们首先讨论一种时间复杂度为O(1)的方法来在均匀随机数之间生成最小值。然后,我们扩展这个方法为一种自上而下的分层算法,并以此来在每一个BVH节点中生成最小的随机数。为了提升这个算法的数值稳定性,我们采用一种半分层的采样方法,并使用重叠层来生成均匀且部分分层的随机数。

最小随机数的PDF

N N N个随机数 { ξ 1 , . . . , ξ N } \{\xi_1,...,\xi_N\} { ξ1,...,ξN}中的最小值可以通过考虑其PDF来生成[问题2]。这个PDF可以通过分析的方法来获得,如下: p min

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值