Veach1997论文阅读

Veach1997

Abstract

光传输算法通过模拟人造环境中光的发射和散射来生成逼真的图像。应用包括照明设计、建筑和计算机动画,而相关的工程学科包括中子传输和辐射传热。这些算法的主要挑战是通常使用的几何、散射和照明模型的高度复杂性。在本论文中,我们开发了新的蒙特卡罗技术,极大地扩展了光传输模拟实用的输入模型的范围。我们的贡献包括新的理论模型、统计方法和渲染算法。

我们首先为双向光线传输算法(结合直接和伴随技术的算法)建立严格的理论基础。首先,我们提出了一个线性算子公式,它不依赖于任何关于输入场景的物理有效性的假设。我们展示了如何使用各种双向技术获得数学上正确的结果。接下来我们推导出一个不同的公式,这样对于任何物理上有效的输入场景,传输算子都是对称的。这种对称性对于理论和实现都很重要,并且基于我们为透射材料推导出的新的互易性条件(reciprocity condition)。最后,我们展示了如何将光传输表示为路径空间上的一个整体。该框架允许应用新的采样和集成技术,例如 Metropolis 采样算法。我们还使用这个模型来研究无偏蒙特卡罗方法的局限性,并表明某些类型的路径不能被采样。我们的统计贡献包括一种称为多重重要性抽样的新技术,它可以大大提高蒙特卡洛积分的鲁棒性。它使用一种以上的采样技术来评估积分,然后以一种可证明接近最优的方式组合这些样本。这导致估计量对于广泛的被积函数具有低方差。我们还描述了一种新的方差减少技术,称为效率优化俄罗斯轮盘赌

最后,我们将这些想法联系在一起以获得新的蒙特卡洛光传输算法。双向路径追踪使用一系列不同的路径采样技术,这些技术生成一些从光源开始的路径顶点,一些从传感器开始。我们表明,当这些技术结合使用多重重要性采样时,可以有效地处理大范围的困难照明效果。该算法无偏,可以处理任意几何形状和材质,并且实现起来相对简单。

(MLT的描述先跳过)

Conclusion

Multiple Importance Sampling

正如我们所展示的,多重重要性采样可以大大减少蒙特卡洛渲染计算的方差。这些技术很实用,而且额外的成本很小——在我们的测试中,只有不到 5% 的时间用于评估概率和加权函数。使用这些方法也有很好的理论依据。因为我们已经显示出它们相对于所有其他组合策略的性能有很强的界限。

对于大多数蒙特卡罗问题,平衡启发式(balance heuristic)是组合策略的绝佳选择:它具有最佳的理论界限,并且最容易实现。

另一方面,如果给定的积分可能是一个低方差问题(即其中一个 概率密度函数pi 与 被积函数f 匹配),那么幂启发式(power heuristic)是一个很好的选择。

实际上,多重重要性采样为蒙特卡洛积分提供了一个新的观点。普的重要性采样的目标是找到一个单一的“完美”采样技术。MIS的目标是找到一组涵盖被积函数重要特征的技术。是否也有一些不好的抽样技术也没关系——抽样会浪费一些精力,但结果不会受到显着影响。因此,多重重要性抽样提供了使蒙特卡洛软件更可靠的秘诀:每当有一些情况没有得到很好的处理时,我们就可以简单地添加另一种专门为这种情况设计的抽样技术。我们相信有许多应用程序可以从这种方法中受益,无论是在计算机图形学还是其他领域。

Bidirectional Path Tracing

双向路径追踪是一种适用于多种室内场景的有效渲染算法,无论有无强间接照明。通过使用考虑到被积函数的不同因素的一系列不同的采样技术,它可以有效且稳健地渲染各种照明效果。该算法是无偏的,并且支持与标准路径追踪相同的几何形状和材质

可以构建双向路径跟踪以任意量改进标准路径跟踪的方差的场景。为此,增加间接照明的强度就足够了。例如,在 [图 10.3] 的测试用例中,随着我们减小天花板上直接照明区域的大小,路径跟踪的方差显着增加,而双向路径跟踪相对不受影响。

另一方面,基本双向路径追踪算法的一个缺陷是没有对光源的智能采样。例如,如果我们要模拟一栋大型建筑物的单个房间的照明,大多数光源出发的子路径将从远离正在渲染的场景部分的房间中的光源开始,因此不会有贡献。这暗示了根据间接照明贡献的某种估计对光源进行采样的想法。请注意,已经有工作开发了一些方法来在有很多灯光时加速直接照明组件,例如通过在空间细分中记录信息 [Shirley等. 1996]。但是,这些方法无助于选择光子路径的初始顶点。通常,我们希望选择物理上就在附近但不一定对观察者直接可见的光源。

类似地,双向路径追踪不适用于室外场景,或者光源和观察者被困难的几何体隔开的场景(例如门稍微半开)。在这些情况下,独立选择的相机和光子路径可能彼此不可见。

最后,请注意,如果允许点光源和完美的镜面表面,双向路径跟踪可能会错过某些路径的贡献(标准路径追踪也是如此)。例如,当使用针孔相机通过镜子间接观察时,该算法无法从点光源渲染焦散。这是因为双向路径追踪基于局部路径采样技术(local path sampling techniques),因此会遗漏不包含两个相邻非镜面反射顶点的路径的贡献(two adjacent non-specular vertices)(见第 8.3.3 节)。但是,请回想一下,如果使用有限孔径镜头(finite-aperture lens),或者仅使用面光源,或者在给定场景中没有完美的镜面表面,则此类路径不存在。因此,双向路径跟踪对于所有物理上有效的场景模型都是无偏的

Metropolis Light Transport

…先不看这部分

概括一下

上面基本都是机翻…结论讲了些啥呢…

MIS是一种非常实用的,减少蒙特卡洛法方差的办法,尤其是存在多种采样方案的情况下,它的原理就是组合所有方案,让概率密度在任何情况下都更靠近被积函数的形状

BDPT和PT一样是无偏的蒙特卡洛估计器,支持任意几何场景,支持任何物理上有效的材质。在室内,光照相对可见的条件下,任何情况下都可以得到比PT更低的方差,尤其是针对焦散。但间接光太远了,或者室外,也就是光源出发的路径被遮挡的情况下,方差会增大

第一章:Introduction

光线传输算法的主要目标之一是提高人类在虚拟环境建模逼真场景的效率。光栅化渲染和传统光线追踪无法高效且有效的模拟间接光照。如果有一种高鲁棒性光线传输算法,那么计算间接光照的任务就会非常简单。

光线传输算法还可能为物理与工程带来更好的方法

光线传输算法不会模拟光线的所有行为(严格来说目前这是不可能的),只基于几何光学,假设光线只会在物体表面发射、散射、吸收,沿直线传播,没有参与介质,忽略波动光学的所有行为。

BDPT的理论基础包括:

  • 一个通用的线性算子公式

  • 非对称散射的新例子:光在折射时,表面存在着色法线时,都会发生非对称散射

  • A reciprocity principle for general materials (通用材质的互反原则):没搞懂在说啥

  • 自伴算子公式:线性算子对于所有物理有效场景都是自伴随的(对称的)

  • The path integral formulation (路径积分公式):如何将其表述为路径空间上的集成问题

  • 无偏蒙特卡罗方法的固有局限性:某些路径无法使用标准采样方法得到,图像结果会丢失信息

文章结构

  • 导言和背景
    • 第一章:讨论各种光传输算法的优缺点
    • 第二章:蒙特卡洛积分
  • 双向光线传输算法的理论模型
    • 第三章:辐射度量学
    • 第四章:基于线性算子的光传输模型
    • 第五章:非对称性材质
    • 第六章:材质的互反原则
    • 第七章:光线传输框架
    • 第八章:路径积分
  • 实践
    • 第九章:多重重要性采样
    • 第十章:双向路径追踪
    • 第十一章:Metropolis 光线传输

第二章:蒙特卡洛积分

这章内容先不看了,之前有详细学习过

第三章:辐射度量学与光线传输

3.1 Domains and measures

这小节在说啥呢…看了半天像是在定义物体表面,立体角,介绍一下投影立体角,应该可以跳过

3.2 The phase space

看不懂,跳过

3.3 The trajectory space and photon events

跳过

3.4 Radiometric quantities

终于见到些熟悉的了…

Radiant power:定义为每单位时间的能量

Φ=dQdt\Phi=\frac{\mathrm{d}Q}{\mathrm{d}t}

单位是 watts: Js1J\cdot s^{-1}

Irradiance:定义为每单位表面积的功率

E(x)=dΦ(x)dA(x)E(x)=\frac{\mathrm{d}\Phi(x)}{\mathrm{d}A(x)}

单位是:Wm2W\cdot m^{-2}

Radiance:定义为每单位立体角每单位投影面积的功率

L(x,ω)=d2Φ(x,ω)dAωdσ(ω)L(x,\omega)=\frac{\mathrm{d}^{2}\Phi(x,\omega)}{\mathrm{d}A_{\omega}^{\perp}\mathrm{d}\sigma(\omega)}

单位是:Wm2sr1W\cdot m^{-2}\cdot sr^{-1}

其中,dAω\mathrm{d}A_{\omega}^{\perp}表示投影面积(projected area measure)

dAω=ωN(x)dA(x)\mathrm{d}A_{\omega}^{\perp}=|\omega\cdot N(x)|\mathrm{d}A(x)

3.5 Incident and exitant radiance functions

emm讲了一大堆看不懂,就看懂一个方程

Li(x,ω)=Lo(x,ω)L_i(x,\omega)=L_o(x,-\omega)

入射出射倒过来结果相等

3.6 The bidirectional scattering distribution function

双向散射分布函数 (BSDF) 是对光在物体表面散射特性的数学描述

光线入射的Irradiance

dE(ωi)=Li(ωi)dσ(ωi)\mathrm{d}E(\omega_i)=L_i(\omega_i)\mathrm{d}\sigma^{\perp}(\omega_i)

通过实验观察到,随着dE(ωi)\mathrm{d}E(\omega_i)的增加,出射的Radiance dLo(ωo)\mathrm{d}L_o(\omega_o)也会成比例增加

BSDF可以很简单的定义为比例常数

fs(ωiωo)=dLo(ωo)dE(ωi)=dLo(ωo)Li(ωi)dσ(ωi)f_s(\omega_i\to\omega_o)=\frac{\mathrm{d}L_o(\omega_o)}{\mathrm{d}E(\omega_i)}=\frac{\mathrm{d}L_o(\omega_o)}{L_i(\omega_i)\mathrm{d}\sigma^{\perp}(\omega_i)}

散射方程

dLo(ωo)=Li(ωi)fs(ωiωo)dσ(ωi)\mathrm{d}L_o(\omega_o)=L_i(\omega_i)f_s(\omega_i\to\omega_o)\mathrm{d}\sigma^{\perp}(\omega_i)

在半球上积分

Lo(ωo)=S2Li(ωi)fs(ωiωo)dσ(ωi)L_o(\omega_o)=\int_{S^{2}}L_i(\omega_i)f_s(\omega_i\to\omega_o)\mathrm{d}\sigma^{\perp}(\omega_i)

BSDF分为BRDF和BTDF,区别是定义的域不一样。BSDF是它们的并集

BRDF的属性:

fr(ωiωo)=fr(ωoωi)f_r(\omega_i\to\omega_o)=f_r(\omega_o\to\omega_i)

为了物理正确性,也就是能量守恒,BRDF必须

Ho2fr(ωiωo)dσ(ωo)1\int_{H_{o}^{2}}f_r(\omega_i\to\omega_o)\mathrm{d}\sigma^{\perp}(\omega_o)\le1

请注意,这些条件是反射所特有的,并不适用于透射光的表面。因此,不能假设 BSDF 或 BTDF 满足上述简单规则,第六章会详细介绍为什么

3.7 Introduction to light transport

3.7.1 The measurement equation

https://zhuanlan.zhihu.com/p/73025214

I=M×S2We(x,ω)Li(x,ω)dA(x)dσx(ω)I=\int_{M\times S^{2}}W_e(x,\omega)L_i(x,\omega)\mathrm{d}A(x)\mathrm{d}\sigma_x^{\perp}(\omega)

这个方程描述了radiance如何在胶卷上转换成颜色,或者说,相机如何测量入射的radiance

3.7.2 The light transport equation

就是渲染方程

Lo(x,ωo)=Le(x,ωo)+S2Lo(x,ωi)fs(x,ωiωo)dσ(ωi)L_o(x,\omega_o)=L_e(x,\omega_o)+\int_{S^{2}}L_o(x,-\omega_i)f_s(x,\omega_i\to\omega_o)\mathrm{d}\sigma^{\perp}(\omega_i)

3.7.3 Importance and adjoint methods

We测量了像素的重要性I,所以从光源出发到达相机叫做 importance

这是伴随(adjoint)方法的基础

类似渲染方程传输radiance,importance也有传输方程

W(x,ω)=We(x,ω)+S2W(x,ωi)fs(x,ωoωi)dσ(ωi)W(x,\omega)=W_e(x,\omega)+\int_{S^{2}}W(x,-\omega_i)f_s(x,\omega_o\to\omega_i)\mathrm{d}\sigma^{\perp}(\omega_i)

就是BSDF反过来了而已

3.7.4 Bidirectional methods

双向方法的思路很简单,分别连接从相机出发的radiance与光源出发的importance

3.7.5 Sampling and evaluation of non-symmetric BSDF’s

BSDF可能是非对称的,双向算法处理BSDF时要特别小心,因为这种情况下light与importance的传输规则会不太一样

BSDF用于评估radiance,它散射重要粒子(importance particles)

伴随BSDF评估importance,它散射光线粒子(light particles)

3.7.6 The adjoint BSDF

给定任意BSDF,它的伴随形式被定义为

fs(ωiωo)=fs(ωoωi)f_{s}^{*}(\omega_i\to\omega_o)=f_s(\omega_o\to\omega_i)

它的主要作用是让重要性传输方程具有与光线传输方程相同的形式

第四章:光线传输的通用算子

本章的目标是为双向光传输算法建立严格的理论基础

主要介绍一个框架,描述光传输与重要性传输之间的关系

4.1 Ray space

射线空间定义:

R=M×S2R=M\times S^{2}

射线空间 R 包含从场景表面上的点开始的所有光线,M表示场景几何的表民啊的集合,S是所有单位方向向量的集合

  • The throughput measure. 就是定义了一个度量(measure)μ\mu,它表示射线的起点与方向的组合

  • Other representations of ray space. 就是面积改写立体角

4.2 Functions on ray space

(一个字都看不懂

以目前的知识水平,大概能理解的只有定义了一个运算符,叫做内积(Inner products),它的运算规则是

f,g=Rf(r)g(r)dμ(r)\langle f,g\rangle=\int_{R}f(r)g(r)\mathrm{d}\mu(r)

4.3 The scattering and propagation operators

从物理的角度来看,我们可以认为光线传输是两个步骤在交替进行

第一个是散射,它描述了光子与表面的相互作用

另一种是传播,其中光子在固定介质中沿直线前进

首先定义一个线性算子A\boldsymbol A,它在线性空间F里,将它应用到函数f上,也就是Af\boldsymbol A f,结果是一个新函数,也在线性空间F里

接着定义 The local scattering operator

(Kh)(x,ωo)=S2fs(x,ωiωo)h(x,ωi)dσx(ωi)(\boldsymbol K h)(\mathrm{\boldsymbol x},\omega_o)=\int_{S^{2}}f_s(\mathrm{\boldsymbol x},\omega_i\to\omega_o)h(\mathrm{\boldsymbol x},\omega_i)\mathrm{d}\sigma_{\mathrm{\boldsymbol x}}^{\perp}(\omega_i)

当它应用在入射radiance时,会返回出射的radiance。和反射方程一模一样,唯一不同的是算子可以应用在整个radiance function上(?

然后定义 The propagation operator

(Gh)(x,ωo)={h(xM(x,ωi),ωi)ifdM(x,ωi)<0otherwise(\boldsymbol G h)(\mathrm{\boldsymbol x},\omega_o)= \left\{ \begin{aligned} &h(\mathrm{\boldsymbol x}_{M}(\mathrm{\boldsymbol x},\omega_i),-\omega_i)&\mathrm{if}d_M(\mathrm{\boldsymbol x},\omega_i)<\infty&\\ &0&\mathrm{otherwise}& \end{aligned} \right.

其中

xM(x,ω)=x+dM(x,ω)ω\mathrm{\boldsymbol x}_{M}(\mathrm{\boldsymbol x},\omega)=\boldsymbol x+d_M(\mathrm{\boldsymbol x},\omega)\omega

这玩意是求交函数,dM(x,ω)d_M(\mathrm{\boldsymbol x},\omega)指到下一个最近交点的距离

算子K有个性质是本地性(Locality),也就是把h函数应用在射线上就可以了

4.4 The light transport and solution operators

再定义一个光线传输算子light transport operator

T=KG\mathrm{\boldsymbol T}=\mathrm{\boldsymbol K}\mathrm{\boldsymbol G}

然后渲染方程(或者说光线传输方程(light transport equation))就变成了

L=Le+TLL = L_e + \mathrm{\boldsymbol T}L

让它变形

(IT)L=LeL=(IT)1Le\begin{aligned} (\mathrm{\boldsymbol I}-\mathrm{\boldsymbol T})L&=L_e\\ L&=(\mathrm{\boldsymbol I}-\mathrm{\boldsymbol T})^{-1}L_e \end{aligned}

其中I\mathrm{\boldsymbol I}是单位算子(identity operator)

S=(IT)1\mathrm{\boldsymbol S}=(\mathrm{\boldsymbol I}-\mathrm{\boldsymbol T})^{-1}

S\mathrm{\boldsymbol S}是solution operator

只有当IT\mathrm{\boldsymbol I}-\mathrm{\boldsymbol T}可逆时,公式才有意义。

一个充分条件是

T<1\parallel\mathrm{\boldsymbol T}\parallel<1

看了半天怎么取模,感觉意思大概是BSDF在积分域上积分结果小于等于1

然后根据诺伊曼级数(Neumann series)

S=(IT)1=i=0Ti=I+T+T2+\mathrm{\boldsymbol S}=(\mathrm{\boldsymbol I}-\mathrm{\boldsymbol T})^{-1}=\sum_{i=0}^{\infty}\mathrm{\boldsymbol T}^{i}=\mathrm{\boldsymbol I}+\mathrm{\boldsymbol T}+\mathrm{\boldsymbol T}^{2}+\dots

把它带回去

L=Le+TLe+T2Le+L=L_e+\mathrm{\boldsymbol T}L_e+\mathrm{\boldsymbol T}^{2}L_e+\dots

这一串的意思是,最终radiance等于,直接光,加上已经散射一次的光,加上已经散射两次的光,无限加下去

然后论述了一下这个级数是收敛的

4.5 Sensors and measurements

(机翻开始

光传输算法的目标是估计有限数量的平衡辐射 L 测量值

每次测量都可以被认为是放置在场景某处的假设传感器的响应。

例如,我们可以想象每个像素是虚拟相机中的一小片胶片,并且像素值与其接收的辐射功率成正比。当然,大多数时候相机和镜头系统都没有明确建模。

然而,对于任何给定的像素,仍然可以识别世界空间中对其值有贡献的一组光线,并假设有一个假想的传感器对这些光线的辐射做出响应。

(机翻结束

传感器响应会根据入射辐射的位置和方向而变化。我们将只处理线性传感器,在这种情况下,响应由函数表征:

We(x,ω)=dS(x,ω)dΦ(x,ω)W_e(\mathrm{\boldsymbol x},\omega)=\frac{\mathrm{d}S(\mathrm{\boldsymbol x},\omega)}{\mathrm{d}\Phi(\mathrm{\boldsymbol x},\omega)}

公式说明了从方向omega到达点x的单位功率,S是相机传感器上数值的变化

个人理解,从omega方向来的10能量让传感器读数上升1,We就是1/10

为了计算measurement, 积分响应,使用 The measurement equation 得到所有落在传感器上的入射光

dS(r)=We(r)dΦ(r)=We(r)Li(r)dμ(r)\mathrm{d}S(\mathrm{\boldsymbol r})=W_e(\mathrm{\boldsymbol r})\mathrm{d}\Phi(\mathrm{\boldsymbol r}) =W_e(\mathrm{\boldsymbol r})L_i(\mathrm{\boldsymbol r})\mathrm{d}\mu(\mathrm{\boldsymbol r})

用我们定义的符号来表示 Nicodemus’ measurement equation

I=We,Li=RWe(r)Li(r)dμ(r)I=\langle W_e,L_i\rangle=\int_{R}W_e(\mathrm{\boldsymbol r})L_i(\mathrm{\boldsymbol r})\mathrm{d}\mu(\mathrm{\boldsymbol r})

I是measurement,We是发出的importance,Li是入射的radiance

We和Le都是已知量

根据前面我们得到的solution operator,可以将I改写

I=We,Li=We,GL=We,GSLeI=\langle W_e,L_i\rangle=\langle W_e,\mathrm{\boldsymbol G} L\rangle=\langle W_e,\mathrm{\boldsymbol G\boldsymbol S} L_e\rangle

4.6 Importance transport via adjoint operators

伴随算子是理解光传输算法的强大工具。它们使我们能够以多种方式评估测量结果,从而产生新的见解和渲染算法

啥是伴随算子呢

Hf,g=f,Hg\langle\mathrm{\boldsymbol H}^{*}f,g\rangle=\langle f,\mathrm{\boldsymbol H}g\rangle

self-adjoint operator是

H=H\mathrm{\boldsymbol H}=\mathrm{\boldsymbol H}^{*}

我们用这个算子改写measurement equation

I=We,GSLe=(GS)We,LeI=\langle W_e,\mathrm{\boldsymbol G\boldsymbol S} L_e\rangle=\langle(\mathrm{\boldsymbol G\boldsymbol S})^{*}W_e,L_e\rangle

这表明我们可以通过某种方式传递importance来评估 I

要确定这意味着什么,我们要把(GS)*项改写成我们已知的算子G和K

首先,显而易见的是G是自伴随的

K里面有个BSDF,而BSDF与它的伴随形式也是相等的,所以K也是自伴随的

所以

(GS)=GS(\mathrm{\boldsymbol G\boldsymbol S})^{*}=\mathrm{\boldsymbol G\boldsymbol S}

所以

GSWe,Le=We,GSLe\langle\mathrm{\boldsymbol G\boldsymbol S}W_e,L_e\rangle=\langle W_e,\mathrm{\boldsymbol G\boldsymbol S}L_e\rangle

这种对称性的意义在于任何适用于光线传输的算法也可以用于重要性传输

在这两种情况下,概念、数量和方程之间存在精确的对应关系

importance transport equation

W=We+TWW=W_e+\mathrm{\boldsymbol T}W

类似于radiance传输的等式Li=GLoL_i=\mathrm{\boldsymbol G}L_o,importance也可以列出Wi=GWoW_i=\mathrm{\boldsymbol G}W_o

可以得到

I=We,LiI=\langle W_e,L_i\rangle

I=Wi,LeI=\langle W_i,L_e\rangle

4.7 Summary of the operator framework

我们考虑四个基本输运量 Lo 、 Li 、 Wo 和 Wi ,分别对应出射辐射量、入射辐射量、出射重要性和入射重要性

propagation operator 与它们的关系

Li=GLoWi=GWo\begin{align} L_i=\mathrm{\boldsymbol G}L_o\\ W_i=\mathrm{\boldsymbol G}W_o \end{align}

local scattering operator 与它们的关系

Lo=KLiWo=KWi\begin{align} L_o=\mathrm{\boldsymbol K}L_i\\ W_o=\mathrm{\boldsymbol K}^{*}W_i \end{align}

measurement 的值可以写成表达式

I=We,Li=Wi,Le=We,i,Lo=Wo,Le,iI=\langle W_e,L_i\rangle=\langle W_i,L_e\rangle=\langle W_{e,i},L_o\rangle=\langle W_o,L_{e,i}\rangle

第五章:非对称散射的来源

暂时跳过,不是很重要,非对称性主要是透射和着色法线带来的

第六章:通用 BSDF 的互反和守恒定律

暂时跳过,不是很重要,主要是论述BSDF的能量守恒

第七章:光线传输的自伴随算子公式

(机翻开始

正如我们所提到的,实现对光、重要性和粒子使用相同的散射规则非常方便。这对于理论工作也是可取的,这样我们就可以避免使用伴随算子。

然而,图形中现有的光传输模型无法实现这一点,即使场景模型在物理上是有效的。

为了获得对称性,典型的解决方案是将场景限制在反射表面(或更一般地,要求所有介质具有相同的折射率)。这是一个主要限制,因为它不允许使用图形模型中经常出现的玻璃和水等材料。

在本章中,我们开发了一个框架,其中光、重要性和粒子对于任何物理上有效的场景都遵循相同的散射规则。

从技术上讲,这需要我们定义自伴随的运算符,以便相同的运算符适用于所有情况。

当然,主要问题是如何处理具有不同折射率的介质之间的传输。该解决方案非常简单实用,并且还揭示了与经典几何光学的有趣联系

(机翻结束

大致是在说,开发了一个公式,任何对称非对称的BSDF都可以放进去

7.1 Concepts of the new framework

我们希望找到一个框架,其中光和重要性始终遵循相同的传输方程,即使存在具有不同折射率的介质

问题:第四章的local scattering operator算子K不是self-adjoint的

解决方法:根据第六章论述的BSDF非对称性,把这个性质消除掉就可以了

fs(x,ωiωo)=fs(x,ωiωo)ηo2f_{s}^{'}(x,\omega_i\to\omega_o)=\frac{f_s(x,\omega_i\to\omega_o)}{\eta_{o}^{2}}

7.2 The self-adjoint operator formulation

带回到local scattering operator

(Kh)(x,ωo)=S2fs(x,ωiωo)h(x,ωi)dσx(ωi)(\boldsymbol{K}^{'} h)(\mathrm{\boldsymbol x},\omega_o)=\int_{S^{2}}f_{s}^{'}(\mathrm{\boldsymbol x},\omega_i\to\omega_o)h(\mathrm{\boldsymbol x},\omega_i)\mathrm{d}\sigma_{\mathrm{\boldsymbol x}}^{\perp}(\omega_i)

带回到反射方程

Loηo2=S2fs(x,ωiωo)ηo2Li(x,ωi)ηi2[ηi2dσ(ωi)]\frac{L_o}{\eta_o^2}=\int_{S^{2}}\frac{f_s(x,\omega_i\to\omega_o)}{\eta_o^2}\frac{L_i(x,\omega_i)}{\eta_i^2}[\eta_i^2\mathrm{d}\sigma(\omega_i)]

第八章:光线传输的路径积分公式

在本章中,我们将展示如何将光传输问题转化为积分问题,最终得到一个简洁的积分

Ij=Ωfj(xˉ)dμ(xˉ)I_j=\int_\Omega f_j(\bar{x})\mathrm{d}\mu(\bar{x})

Ω\Omega是所有长度的传输路径的集合(set of transport paths of all lengths)

μ\mu是路径空间上的测量(a measure on this space of paths)

fjf_j是 measurement contribution function

(机翻开始

路径积分模型有几个好处。主要优点是通过将光传输减少到集成问题,它允许应用通用集成方法。

例如,我们将展示如何使用多重重要性采样(第 9 章)更稳健地解决光传输问题,这是一种允许有效组合多种不同采样策略的集成方法

路径积分模型也导致了采样路径的新技术。基于积分方程的模型的问题在于它们一次只描述一个表面的散射。这导致光传输算法通过积分方程的递归采样逐步构建路径。

路径积分模型采用更全局的视角,直接导致了双向路径追踪(第 10 章)和 Metropolis 光传输算法(第 11 章)等技术。这些新技术只能在路径积分框架内正确理解。

最后,路径积分模型是理解无偏蒙特卡罗算法局限性的有用工具。它提供了一种自然的方式来对传输路径进行分类,并识别那些无法通过某些技术进行采样的路径。

(机翻结束

8.1 The three-point form of the transport equations

首先,用箭头符号消除掉方向变量

L(xx)=L(x,ω)L(x\to x^{'})=L(x,\omega)

BSDF就变成了

fs(xxx)=fs(x,ωiωo)f_s(x\to x^{'}\to x^{''})=f_s(x^{'},\omega_i\to\omega_o)

The three-point form of the light transport equation 可以写成

L(xx)=Le(xx)+ML(xx)fs(xxx)G(xx)dA(x)L(x^{'}\to x^{''})=L_e(x^{'}\to x^{''})+\int_M L(x\to x^{'})f_s(x\to x^{'}\to x^{''})G(x\leftrightarrow x^{'})\mathrm{d}A(x)

M是所有表面积总和

G是立体角到面积的积分式转换产生的几何项

dσx(ωi)=G(xx)dA(x)\mathrm{d}\sigma_x^{'}(\omega_i)=G(x\leftrightarrow x^{'})\mathrm{d}A(x)

其中

G(xx)=V(xx)cos(θo)cos(θi)xx2G(x\leftrightarrow x^{'})=V(x\leftrightarrow x^{'})\frac{\vert\mathrm{cos}(\theta_o)\mathrm{cos}(\theta_{i}^{'})\vert}{\Vert x-x^{'}\Vert^{2}}

measurement equation 也可以改写成

Ij=M×MWe(j)(xx)L(xx)G(xx)dA(x)dA(x)I_j=\int_{M\times M}W_e^{(j)}(x\to x^{'})L(x\to x^{'})G(x\leftrightarrow x^{'})\mathrm{d}A(x)\mathrm{d}A(x')

8.2 The path integral formulation

对于目标积分形式:

Ij=Ωfj(xˉ)dμ(xˉ)I_j=\int_\Omega f_j(\bar{x})\mathrm{d}\mu(\bar{x})

Ωk\Omega_k表示 长度为k的全部路径,路径集合可以写成

xˉ=x0x1xk\bar{x}=x_0x_1\dots x_k

其中,1k1\leq k\leq\infty,且任意xiMx_i\in M

再定义一个μk\mu_k,表示这个路径集合的度量(measure),称为area-product measure

μk(D)=DdA(x0)dA(xk)\mu_k(D)=\int_D\mathrm{d}A(x_0)\dots\mathrm{d}A(x_k)

其中,DΩkD\subset\Omega_k,也可以将μk\mu_k写成

dμk(x0xk)=dA(x0)dA(xk)\mathrm{d}\mu_k(x_0\dots x_k)=\mathrm{d}A(x_0)\dots\mathrm{d}A(x_k)

之后,定义整个路径空间Ω\Omega

Ω=k=1Ωk\Omega=\bigcup_{k=1}^{\infty}\Omega_k

Ω\Omega的 area-product measure 可以得到所有路径长度的 measure 的和

μ(D)=k=1μk(DΩk)\mu(D)=\sum_{k=1}^{\infty}\mu_k(D\cap\Omega_k)

接着,递归展开 measurement equation

Ij=k=1Mk+1Le(x0x1)G(x0x1)i=1k1fs(xi1xixi+1)G(xixi+1)Wej(xk1xk)dA(x0)dA(xk)\begin{align} I_j=\sum_{k=1}{\infty}\int_{M^{k+1}}L_e(x_0\to x_1)G(x_0\to x_1)\prod_{i=1}^{k-1}f_s(x_{i-1}\to x_i\to x_{i+1})G(x_i\leftrightarrow x_{i+1})\\ \cdot W_e^{j}(x_{k-1}\to x_k)\mathrm{d}A(x_0)\dots\mathrm{d}A(x_k) \end{align}

这么长一串怎么用呢

比如一条长度为3的路径xˉ=x0x1x2x3\bar{x}=x_0x_1x_2x_3,可以令k=3

fj(xˉ)=Le(x0x1)G(x0x1)fs(x0x1x2)G(x1x2)fs(x1x2x3)G(x2x3)We(j)(x2x3)\begin{align} f_j(\bar{x})=L_e(x_0\to x_1)G(x_0\to x_1)f_s(x_0\to x_1\to x_2)\\ \cdot G(x_1\to x_2)f_s(x_1\to x_2\to x_3)G(x_2\to x_3)W_e^{(j)}(x_2\to x_3) \end{align}

8.2.1 Advantages of the path integral formulation

(机翻开始

路径积分公式有几个优点

首先,每个测量的表达式都有积分的形式(与其他一些数学对象相反)。这使我们能够通过应用通用集成技术(例如多重重要性采样(第 9 章))推导出新的渲染算法

其次,路径积分模型具有更简单的结构:单个表达式定义了每个测量的值。相反,积分方程方法需要两个方程(光传输方程和测量方程),其中一个是递归定义的

使用路径积分方法,没有伴随方程,没有光或重要性等中间量,也不需要在这些替代方案之间进行选择。通过围绕几何基元(路径)而不是辐射量来组织计算,直接定义和计算测量值。

通过处理整个路径而不是光线,路径积分框架还提供了对光传输的更明确和完整的描述。每条路径指定沿完整光子轨迹的发射、散射和测量事件

另一方面,积分方程通过分别指定光与每个表面的相互作用来单独描述散射事件

这对采样路径有实际影响:求解积分方程的自然策略是递归地对方程进行采样,导致路径完全从镜头开始,或者完全从光源开始(取决于光传输方程或其伴随采样)

另一方面,使用路径积分方法,可以以任意方式构造路径,例如从中间的顶点开始,并在两个方向上向外构建路径

这直接导致了采样策略,例如双向路径跟踪(第 10 章)和 Metropolis 算法(第 11 章)

此外,路径积分方法为计算路径上的概率密度提供了一个方便的框架(如下一节所述)。

这使我们能够轻松地比较给定路径被不同技术采样的概率。这是使用多重重要性抽样和 Metropolis 技术的必要前提。

(机翻结束

8.2.2 Applying the path integral formulation

首先是使用蒙特卡洛法求解积分

Ijfj(Xˉ)p(xˉ)I_j\approx\frac{f_j(\bar{X})}{p(\bar{x})}

对于每个测量 Ij ,蒙特卡洛策略是首先根据一些选择的密度函数 p 对随机路径 X 进行采样,它肯定是无偏估计

那么如何选择概率密度函数呢?这取决于具体的路径Xˉ\bar{X}和路径生成方式

例如,对于长度k的路径,xkx_k在镜头上,而后续顶点xk1x1x_{k-1}\dots x_1是随机弹射生成的,直到最终与光源上的随机顶点x0x_0相连,所以p(Xˉ)p(\bar{X})的表达式取决于这个过程中的所有随机选择

8.2.2.1 Local path sampling

(机翻开始

我们将专注于生成路径的特定方法族(family),称为局部路径采样算法(local path sampling algorithms)

这些方法一次生成一个顶点,基于现有顶点的局部信息(例如 BSDF)

在此框架中可以使用三种基本机制来构建路径:

  • 可以根据场景表面上的一些先验分布(priori distribution)来选择顶点。例如,这可用于对光源上的顶点进行采样,其概率密度与辐射出射率(即光源上发射的每单位面积的功率)成正比。类似地,该技术可用于对有限孔径透镜(finite-aperture lens)上的初始顶点进行采样。它还可以用于沿路径对中间顶点进行采样,例如在两个相邻房间之间的窗口上采样一个顶点。

  • 生成顶点的第二种方法是根据本地定义的概率分布在现有顶点 x 处采样一个方向,然后投射一条射线以找到第一个表面交点 x0(它成为新顶点)。例如,当对现有顶点处的 BSDF 进行采样(或 BSDF 的近似值)时,就会发生这种情况。一旦选择了光源上的顶点,这种机制也可以用于对发射方向进行采样。

  • 路径采样的第三种机制是连接两个现有顶点,通过检查它们之间的可见性。实际上,此步骤验证两个顶点之间是否存在边,而不是生成新顶点。

通过结合这三种简单的技术,可以以多种方式对路径进行采样。可以从光源、镜头或任意场景表面开始构建子路径。然后可以将这些子路径连接在一起以创建从光源到镜头的完整路径。这种局部采样框架足够通用,几乎可以适应实践中使用的所有路径采样技术。

(机翻结束

讲了些啥呢…

简单来说,就是根据现有顶点,一次生成一个新顶点,依次类推逐渐构筑出完整光路的过程,这个方法有三个机制:

  • 首先是根据先验分布选择起点

  • 然后根据顶点的 局部概率分布 来采样一个方向,在这个方向上寻找下一个顶点

  • 检查可见性,确定两个顶点之间存在边

结合这三个机制就能用来采样路径,可以通过在光源或镜头或任意顶点出发建立子路径,然后连接子路径形成从光源到镜头的完整路径。

8.2.2.2 Computing the path probabilities

首先,蒙特卡洛法的期望是

E[fj(Xˉ)p(Xˉ)]=Ωfj(xˉ)p(xˉ)p(xˉ)dμ(xˉ)=Ij\begin{align} E[\frac{f_j(\bar{X})}{p(\bar{X})}]&=\int_{\Omega}\frac{f_j(\bar{x})}{p(\bar{x})}p(\bar{x})\mathrm{d}\mu(\bar{x})\\ &=I_j \end{align}

显而易见,它是无偏估计

我们希望计算一个关于μ\mu的概率密度,根据pdf与cdf的关系,有

p(xˉ)=dPdμ(xˉ)p(\bar{x})=\frac{\mathrm{d}P}{\mathrm{d}\mu}(\bar{x})

对于路径xˉ=x0xk\bar{x}=x_0\dots x_k,可以将等式扩展为

p(xˉ)=dPdμ(x0xk)=i=0kdPdμ(xi)\begin{align} p(\bar{x})&=\frac{\mathrm{d}P}{\mathrm{d}\mu}(x_0\dots x_k)\\ &=\prod_{i=0}^{k}\frac{\mathrm{d}P}{\mathrm{d}\mu}(x_i) \end{align}

所以,要计算顶点xix_i的单位面积概率dPdA\frac{\mathrm{d}P}{\mathrm{d}A},再把所有顶点的单位面积概率乘起来,得到路径的概率密度p(Xˉ)p(\bar{X})

现在的问题是如何计算单位面积概率,根据前面生成顶点的规则,存在两种生成方法

其中先验概率生成顶点的方法,概率密度是已知的

第二种通过顶点的局部概率分布生成新顶点则需要单独计算

xx为当前顶点,x=xix^{'}=x_i表示新顶点,ωo\omega_o表示方向

ωo=xx\omega_o=x^{'}-x

将立体角概率密度转换为面积概率密度

dPdA(x)=dPdσ(ωo)dμ(ωo)dA(x)p(x)=p(ωo)(cos(θi)xx2)\begin{align} \frac{\mathrm{d}P}{\mathrm{d}A(x^{'})}=\frac{\mathrm{d}P}{\mathrm{d}\sigma}(\omega_o)\frac{\mathrm{d}\mu(\omega_o)}{\mathrm{d}A(x^{'})} \\ \Rightarrow p(x^{'})=p(\omega_o)(\frac{|\mathrm{cos}(\theta_i^{'})|}{\parallel x-x^{'}\parallel^{2}}) \end{align}

在许多情况下,将方向分布表示为相对于投影立体角的密度更方便

直接放结论

p(x)=p(ωo)cos(θo)cos(θi)xx2=p(xx)G(xx)p(x^{'})=p^{\perp}(\omega_o)\frac{\vert\mathrm{cos}(\theta_o)\mathrm{cos}(\theta_{i}^{'})\vert}{\Vert x-x^{'}\Vert^{2}}=p^{\perp}(x^{'}-x)G(x\leftrightarrow x^{'})

8.3 The limitations of path sampling

路径追踪无法渲染SDS路径,考虑一个点光源从镜子反射的场景,在漫反射表面上产生焦散。尽管诸如双向路径追踪之类的算法能够在直接查看时渲染这些焦散线,但如果通过第二个镜子间接查看焦散线,它们将失败

8.3.1 Heckbert’s regular expression notation for paths

不细看了,大致就是如何描述一条光路

第九章:多重重要性采样

https://zhuanlan.zhihu.com/p/379681777

我们引入了一种称为多重重要性采样的技术,它可以极大地提高蒙特卡洛积分的可靠性和效率。它基于使用多种采样技术来评估给定积分的想法,并以可证明的良好方式组合样本值。

9.1 Application: glossy highlights from area light sources

这里通过一个经典案例来阐述MIS技术,即面光源对光泽(glossy)表面的高光效果。通常来说计算这种高光有两种方法,第一种是对光源采样,第二种是对BSDF采样,这两种方法在各自擅长的情况下有不错的表现,而MIS则能在所有情况下都有不错的表现。

两种采样策略:

  • BSDF采样就是根据PDF随机采样出射方向,pdf尽量与BSDF成正比。如果采样方向能击中光源则光路有贡献

  • 因为BSDF随机采样存在大量的计算量浪费,所以直接对光源进行采样更加高效,即将积分域转换到光源上

显然,对于小光源来说,BSDF采样未命中光源的部分都是浪费的采样光线,尤其对于BSDF很粗糙的表面(左下角)。

而对于大光源来说,此时虽然对光源采样了,但如果BSDF在该方向的值很小或没有,尤其是BSDF很集中的光滑表面(右上角)。

这些大方差产生的原因,是反射方程中的被积函数是BSDF项fsf_s和入射光LeL_e的乘法,只有当我们采用完全正比于这个乘法的pdf的时候才能得到一个无方差的结果。而BSDF方法则是尽可能正比于BSDF项,忽略了入射光项;光源采样方法尽量正比于入射光项,忽略了BSDF项,因此都无法考虑所有的被积函数项而在某些特定情况表现欠佳

因此,这两种方法都可以认为是重要性采样方法,目的是近似被积函数的某个项,当另外的项在这个函数中占据主导的情况则会表现不佳

但是对于获取整个被积函数的近似函数是不现实的,因此引出了结合不同近似函数的多重方法,其中每一个近似函数尽可能正比于被积函数的一个项,从而在各种情况下得到一个低方差的结果,即多重重要性采样

9.2 Multiple importance sampling

9.2.1 The multi-sample model

考虑被积函数

Ωf(x)dμ(x)\int_{\Omega}f(x)\mathrm{d}\mu(x)

在它的积分域Ω\Omega内,我们可以给出n个不同的采样分布,它们的pdf表示为p1,,pnp_1,\dots,p_n

所有的f(x)f(x)pi(x)p_i(x)都存在且都能计算

不同的策略pip_i,其采样点个数为nin_i,采样点总和为N=niN=\sum n_i

ii个分布的第jj个采样点表示为Xi,jX_{i,j},每个采样点独立分布

9.2.1.1 The multi-sample estimator

对于每一个采样点都有不同权重的估计器,其权重wi(x)w_i(x)pip_i决定

这个估计器的表达式为

F=i=1n1nij=1niwi(Xi,j)f(Xi,j)pi(Xi,j)F=\sum_{i=1}^{n}\frac{1}{n_i}\sum_{j=1}^{n_i}w_i(X_{i,j})\frac{f(X_{i,j})}{p_i(X_{i,j})}

想要估计器是无偏的,权重函数要满足

  • f(x)=0f(x)=0i=1nwi(x)=1\sum_{i=1}^{n}w_i(x)=1

  • pi(x)=0p_i(x)=0wi(x)=0w_i(x)=0

9.2.1.2 Examples of weighting functions

略过

9.2.2 The balance heuristic

wi(x)=nipi(x)knkpk(x)w_i(x)=\frac{n_i p_i(x)}{\sum_k n_k p_k(x)}

第十章:双向路径追踪

(机翻开始

在本章中,我们描述了一种新的光线传输算法,称为双向路径追踪。该算法是前两章思想的直接组合:即,将光线传输表示为一个积分问题,然后应用一种以上的重要性采样技术估计函数值。生成的算法可以处理任意几何和材质,实现起来相对简单,并且可以比普通路径追踪更有效、更稳健地处理间接照明问题。

为了对每条传输路径进行采样,我们生成一个从光源开始的子路径,第二个从眼睛开始的子路径,并将它们连接在一起。通过改变从每一侧生成的顶点数量,我们获得了一系列针对所有长度路径的采样技术。每种采样技术在路径空间上都有不同的概率分布,并考虑了被积函数的不同子集(即测量贡献函数)。然后使用多重重要性采样组合来自所有这些技术的样本。

本章安排如下。我们从 10.1 节开始,概述双向路径跟踪算法。随后在第 10.2 节中进行了更详细的数学描述,我们在其中推导出了样本贡献的显式公式。然后第 10.3 节讨论了实现算法时出现的问题,包括如何生成子路径并有效地评估它们的贡献,如何处理镜面反射材料,以及如何实现光或眼睛子路径包含的重要特殊情况。两个顶点。在第 10.4 节中,我们描述了一个重要的优化,以减少可见性测试的数量,使用一种称为效率优化俄罗斯轮盘赌的新技术。然后第 10.5 节介绍了算法的一些结果和测量结果,第 10.6 节将我们的算法与该领域的其他相关工作进行了比较,第 10.7 节总结了我们的结论。

(机翻结束

10.1 Overview

回顾一下第八章的路径积分公式

Ij=Ωfj(xˉ)dμ(xˉ)I_j=\int_\Omega f_j(\bar{x})\mathrm{d}\mu(\bar{x})

其中,xˉ=x0xk\bar{x}=x_0\dots x_k表示顶点构成的路径

Ω\Omega表示这些路径任意长度的集合

μ\mu表示面积点乘度量值dμ(xˉ)=dA(x0)dA(xk)\mathrm{d}\mu(\bar{x})=\mathrm{d}A(x_0)\dots\mathrm{d}A(x_k)

fjf_j表示度量贡献函数(measurement contribution function),它的表达式为

fj(xˉ)=Le(x0x1)G(x0x1)We(j)(xk1xk)i=1k1fs(xi1xixi+1)G(xixi+1)\begin{align} f_j(\bar{x})&=L_e(x_0\to x_1)G(x_0\to x_1)W_e^{(j)}(x_{k-1}\to x_k)\\ &\cdot\prod_{i=1}^{k-1}f_s(x_{i-1}\to x_i\to x_{i+1})G(x_i\leftrightarrow x_{i+1}) \end{align}

双向路径追踪的积分由一系列不同的重要性采样组成

每一个MIS由两个独立的子路径组成,一个从光源,一个从相机

光源子路径x0x1x_0 x_1和相机子路径x2x3x4x_2 x_3 x_4连接形成完整光路。如果x1x_1x2x_2之间不可见,则被积函数为0

通过改变光照和眼睛子路径中的顶点数量,就能得到一系列路径组合及其采样分布

令 整体路径长度为kk

光源子路径的顶点数量为ss

相机子路径的顶点数量为tt

它们满足k=s+t1k=s+t-1

显然,排列组合一下,对于长度为kk的光路,存在k+2k+2种不同的采样分布

即令s=0,,k+1s=0,\dots,k+1

双向路径追踪使用所有的样本ps,tp_{s,t},并使用MIS结合起来,具体来说,为每个测量值IjI_j计算

F=s0t0ws,t(xˉs,t)fj(xˉs,t)ps,t(xˉs,t)F=\sum_{s\geq 0}\sum_{t\geq 0}w_{s,t}(\bar{x}_{s,t})\frac{f_j(\bar{x}_{s,t})}{p_{s,t}(\bar{x}_{s,t})}

其中,xˉs,t\bar{x}_{s,t}表示光路

它生成的概率密度函数是ps,tp_{s,t}

ws,tw_{s,t}是MIS权重函数

高效生成采样路径。除了单独采样生成每一条子路径的方式,在实际应用中会使用一种更加高效的方法来生成采样路径

首先生成一条包含nLn_L个顶点的光源子路径

y0ynL1y_0\dots y_{n_L -1}

然后生成一条包含nEn_E个顶点的相机子路径

znE1z0z_{n_{E-1}}\dots z_0

其中,y0y_0是是光源,z0z_0是相机

每个子路径的长度是,通过定义在每个顶点处终止子路径的概率来随机确定的(详细信息在第 10.3.3 节中给出)

然后对所有顶点排列组合一下,简单的将光源起点和相机终点

xˉs,t=y0ys1zt1z0\bar{x}_{s,t}=y_0\dots y_{s-1}z_{t-1}\dots z_0

路径包含了s+ts+t个顶点,和k=s+t1k=s+t-1个边

顶点ys1y_{s-1}zt1z_{t-1}称为连接顶点(connecting vertices),它们之间的边称为连接边(connecting edge)

然后根据多样本估计器 (10.3) 计算和求和所有样本xˉs,t\bar{x}_{s,t}的贡献。为了评估每条路径的贡献,必须测试连接边的可见性(s = 0 或 t = 0 时除外)。如果连接边被阻挡,或者如果任一连接顶点处的 BSDF 没有向另一边散射任何光,则该路径的贡献为零。(之后的部分提供了更多详细信息。)

10.2 Mathematical formulation

(机翻开始

在本节中,我们推导出用于确定每个样本的贡献的公式,并展示如何组织计算以便可以有效地完成计算。

(机翻结束

首先,对于一条由ps,tp_{s,t}生成的光路xˉs,t\bar{x}_{s,t},它对积分的贡献(contribution)是:

Cs,tws,t(xˉs,t)fj(xˉs,t)ps,t(xˉs,t)C_{s,t}\equiv w_{s,t}(\bar{x}_{s,t})\frac{f_j(\bar{x}_{s,t})}{p_{s,t}(\bar{x}_{s,t})}

所以上面的公式可以被改写为

F=s0t0Cs,tF=\sum_{s\geq 0}\sum_{t\geq 0}C_{s,t}

再定义一个无权重贡献函数(unweighted contribution)

Cs,tfj(xˉs,t)ps,t(xˉs,t)C_{s,t}^{*}\equiv \frac{f_j(\bar{x}_{s,t})}{p_{s,t}(\bar{x}_{s,t})}

那么显而易见的

Cs,t=ws,tCs,tC_{s,t}=w_{s,t}C_{s,t}^{*}

还可以把改写成

Cs,t=asLcs,tatEC_{s,t}^{*}=a_{s}^{L}c_{s,t}a_{t}^{E}

其中,asLa_{s}^{L}取决于光源子路径

atEa_{t}^{E}取决于相机子路径

cs,tc_{s,t}取决于 连接边(connecting edge)ys1zt1y_{s-1}z_{t-1}

此外,ws,tw_{s,t}取决于所有生成路径的采样分布

我们首先展示如何计算概率密度

ps,tps,t(xˉs,t)p_{s,t}\equiv p_{s,t}(\bar{x}_{s,t})

8.2章节已经推导了,它是各个顶点的密度PA(xi)P_A(x_i)的乘积

端点y0y_0z0z_0可以直接计算得到PA(y0)P_A(y_0)PA(z0)P_A(z_0)

中间的顶点yiy_i由顶点yi1y_{i-1}采样某个方向并投射光线来得到

Pσ(yi1yi)P_{\sigma^{\perp}}(y_{i-1}\to y_i)来表示这个采样方向上 投影立体角的分布情况

PA(yi)P_A(y_i)可以写成

PA(yi)=Pσ(yi1yi)G(yi1yi)P_A(y_i)=P_{\sigma^{\perp}}(y_{i-1}\to y_i)G(y_{i-1}\leftrightarrow y_i)

根据8.1推导的

G(xx)=V(xx)cos(θo)cos(θi)xx2G(x\leftrightarrow x^{'})=V(x\leftrightarrow x^{'})\frac{\vert\mathrm{cos}(\theta_o)\mathrm{cos}(\theta_{i}^{'})\vert}{\Vert x-x^{'}\Vert^{2}}

定义符号piLp_i^L表示从光源出发的第ii个顶点

符号piEp_i^E表示从相机出发的第ii个顶点

这些符号的值等于

p0L=1p1L=PA(y0)piL=Pσ(yi2yi1)G(yi2yi1)pi1L\begin{align} p_0^L&=1\\ p_1^L&=P_A(y_0)\\ p_i^L&=P_{\sigma^{\perp}}(y_{i-2}\to y_{i-1})G(y_{i-2}\to y_{i-1})p_{i-1}^L \end{align}

类似的,从相机出发的顶点是

p0E=1p1E=PA(z0)piE=Pσ(zi2zi1)G(zi2zi1)pi1E\begin{align} p_0^E&=1\\ p_1^E&=P_A(z_0)\\ p_i^E&=P_{\sigma^{\perp}}(z_{i-2}\to z_{i-1})G(z_{i-2}\to z_{i-1})p_{i-1}^E \end{align}

通过这种递归的表达式,可以将路径xˉs,t\bar{x}_{s,t}的概率密度简单表示为

ps,t(xˉs,t)=psLptEp_{s,t}(\bar{x}_{s,t})=p_s^L p_t^E

回顾一下无权重的贡献函数(就在上面不远的地方)

类似定义顶点的符号,我们再定义aiLa_i^L是光源子路径第ii个顶点的无权重贡献值CC^{*}

带入我们的路径概率密度公式,观察无权重的贡献函数,会发现分子分母把G项约去了,可以很高兴的写出从光源出发的贡献

a0L=1a1L=Le(0)(x0)PA(y0)aiL=fs(yi3yi2yi1)Pσ(yi2yi1)ai1L\begin{align} a_0^L&=1\\ a_1^L&=\frac{L_e^{(0)}(x_0)}{P_A(y_0)}\\ a_i^L&=\frac{f_s(y_{i-3}\to y_{i-2}\to y_{i-1})}{P_{\sigma^{\perp}}(y_{i-2}\to y_{i-1})}a_{i-1}^L \end{align}

类似的,从相机出发的贡献

a0E=1a1E=We(0)(z0)PA(z0)aiE=fs(zi1zi2yz3)Pσ(yi2yi1)ai1E\begin{align} a_0^E&=1\\ a_1^E&=\frac{W_e^{(0)}(z_0)}{P_A(z_0)}\\ a_i^E&=\frac{f_s(z_{i-1}\to z_{i-2}\to y_{z-3})}{P_{\sigma^{\perp}}(y_{i-2}\to y_{i-1})}a_{i-1}^E \end{align}

我们使用了前面 8.3.2 节中描述的约定:发射光被分解成乘法

Le(y0y1)=Le(0)(y0)Le(1)(y0y1)L_e(y_0\to y_1)=L_e^{(0)}(y_0)L_e^{(1)}(y_0\to y_1)

Le(0)L_e^{(0)}表示空间分量(spatial component),Le(1)L_e^{(1)}表示方向分量(directional component)

并且定义

fs(y1y0y1)Le(1)(y0y1)fs(z1z0z1)We(1)\begin{align} f_s(y_{-1}\to y_0\to y_1)&\equiv L_e^{(1)}(y_0\to y_1)\\ f_s(z_{-1}\to z_0\to z_1)&\equiv W_e^{(1)} \end{align}

此处将方向属性解释为BSDF,这样定义的好处在于统一格式,消除特殊情况对表达式带来的额外参数

再回顾一下无权重贡献函数的表达式

Cs,t=asLcs,tatEC_{s,t}^{*}=a_{s}^{L}c_{s,t}a_{t}^{E}

其中,cs,tc_{s,t}包含了fjf_j函数中,除了aiLa_i^LaiEa_i^E之外的所有项,因此可以得到

c0,t=Le(zt1zt2)cs,0=We(ys2ys1)cs,t=fs(ys2ys1zt1)G(ys1zt1)fs(ys1zt1zt2)\begin{align} c_{0,t}&=L_e(z_{t-1}\to z_{t-2})\\ c_{s,0}&=W_e(y_{s-2}\to y_{s-1})\\ c_{s,t}&=f_s(y_{s-2}\to y_{s-1}\to z_{t-1})G(y_{s-1}\leftrightarrow z_{t-1})f_s(y_{s-1}\to z_{t-1}\to z_{t-2}) \end{align}

G项包含了可见性测试

对于权重函数ws,t(xˉs,t)w_{s,t}(\bar{x}_{s,t}),类似的,我们把它缩写成

ws,tws,t(xˉs,t)w_{s,t}\equiv w_{s,t}(\bar{x}_{s,t})

它的值取决于该路径xˉ\bar{x}上,所有s+t+1s+t+1种可能的组合生成的概率密度

我们定义pip_i是从光源出发的ii个顶点,从相机出发具有s+tis+t-i个顶点的概率密度

pi=pi,(s+ti)(xˉs,t)p_i=p_{i,(s+t-i)}(\bar{x}_{s,t})

具体来说,psp_s表示已生成的路径的概率,而p0ps1p_0\dots p_{s-1}ps+1ps+tp_{s+1}\dots p_{s+t}表示其他 可能 生成这条路径的概率

可以使用MIS简化计算,例如 power heuristic

ws,t=ps2ipi2=1i(pips)2w_{s,t}=\frac{p_s^2}{\sum_i p_i^2}=\frac{1}{\sum_i(\frac{p_i}{p_s})^{2}}

通过观察,它们的值仅与整体比例有关系,可以令ps=1p_s=1计算相对的pip_i

为了计算这个比例关系,我们需要考虑pi+1/pip_{i+1}/p_i

首先忽略光源和镜头,则路径xˉs,t\bar{x}_{s,t}可以表示为

xˉ=x0xk,k=s+t1\bar{x}=x_0\dots x_k,k=s+t-1

在这种符号表示下,pip_ipi+1p_{i+1}的区别在于顶点xix_i的生成方式

对于pip_i来说,它由相机子路径xixkx_i\dots x_k生成,pi+1p_{i+1}由光源子路径x0xix_0\dots x_i生成

其他所有顶点都采用同样的概率分布

pi+1p_{i+1}pip_i的比例关系表示为

p1p0=PA(x0)Pσ(x1x0)G(x1x0)pi+1pi=Pσ(xi1xi)G(xi1xi)Pσ(xi+1xi)G(xi+1xi)pk+1pk=Pσ(xk1xk)G(xk1xk)PA(xk)\begin{align} \frac{p_1}{p_0}&=\frac{P_A(x_0)}{P_{\sigma^{\perp}}(x_1\to x_0)G(x_1\leftrightarrow x_0)}\\ \frac{p_{i+1}}{p_i}&=\frac{P_{\sigma^{\perp}}(x_{i-1}\to x_i)G(x_{i-1}\leftrightarrow x_i)}{P_{\sigma^{\perp}}(x_{i+1}\to x_i)G(x_{i+1}\leftrightarrow x_i)}\\ \frac{p_{k+1}}{p_k}&=\frac{P_{\sigma^{\perp}}(x_{k-1}\to x_k)G(x_{k-1}\leftrightarrow x_k)}{P_A(x_k)} \end{align}

重复使用这几条就可以根据psp_s计算ps+1,,pk+1p_{s+1},\dots ,p_{k+1}的相对值,或者使用反比计算ps1,,p0p_{s-1},\dots ,p_0的相对值

获得pip_i后就能根据MIS组合策略计算权重ws,tw_{s,t}

最后的贡献函数表示为

Cs,t=ws,tCs,t=ws,tasLcs,tatEC_{s,t}=w_{s,t}C_{s,t}^{*}=w_{s,t}a_s^L c_{s,t} a_t^E

10.3 Implementation issues

(机翻开始

本节描述了我们实现的几个方面。我们首先解释如何对图像进行采样和过滤。

接下来我们描述如何生成光和眼睛子路径。这包括对每个子路径预先计算和存储的信息的摘要(以便更有效地评估样本贡献),以及用于确定每个子路径长度的方法。

在此之后,我们将描述如何实现光或眼睛子路径最多具有一个顶点的重要特殊情况。

最后,我们考虑如何正确处理镜面,并考虑几种情况,其中权重函数不能精确计算(因此必须使用近似值)。

10.3.1 Image sampling and filtering

到目前为止,我们对双向路径跟踪的讨论可以应用于任何类型的测量 Ij。在这里,我们讨论计算图像时出现的特殊问题(与其他一些测量值相反)。

(跳过

10.3.2 Estimation of the image function

(跳过

10.3.3 Determining the subpath lengths

为了控制光和眼睛子路径(nL 和 nE)的长度,我们定义了在每个顶点生成后子路径被终止或吸收的概率。

我们让 qi 表示子路径继续经过顶点 xi 的概率,而 1 qi 是子路径终止的概率。这是俄罗斯轮盘赌的一种形式(第 2 章)。

在我们的实现中,我们为每个子路径的前几个顶点设置 qi = 1,以避免短子路径上的任何额外变化(通常对图像的贡献最大)

之后,通过首先对候选方向 xi 进行采样来确定 qi! xi+1 ,然后让 q1=… 其中 P 是用于对方向 xi 进行采样的密度函数! xi+1 。请注意,如果 P ?(xi ! xi+1 ) 与 BSDF 成比例,则 qi 只是材料的反照率,即对于给定入射方向散射而不是吸收的能量分数。

此过程不需要对第 10.2 节中描述的样本贡献的公式进行任何修改。然而,重要的是要意识到每个方向采样的最终概率密度现在是一个乘积:

密度 P?(xi ! xi+1 ) 可以积分到小于 1,因为存在与在 xi 处终止子路径相关的离散概率

10.3.4 Special cases for short subpaths

由于各种原因,少于两个顶点的子路径需要特殊处理。最重要的问题是:在光子路径只有一个顶点时利用直接光照计算,并在眼睛子路径有零个或一个顶点的情况下允许样本对图像的任何像素做出贡献。此外,光或眼睛子路径为空的情况需要特殊处理,因为不需要可见性测试。

10.3.4.1 Zero light subpath vertices (s = 0)

这些样本发生在眼睛子路径随机与光源相交时。为此,必须将光源建模为场景的一部分(以便光线与它们相交)。我们还需要能够确定当前眼睛子路径端点 zt1 是否在光源上,并评估沿射线 zt1 发射的辐射! zt2

为了评估组合权重 w0;t,我们还必须计算生成点 zt1 和方向 zt1 的概率密度! zt2 通过对光源进行采样(以计算其他采样技术生成此路径的密度 pi)。

s = 0 采样技术对于某些光照效果的渲染非常重要。其中包括:直接可见光源;通过镜面反射或折射看到的光;大面积光源造成的焦散;以及通过镜面反射间接观察到的焦散。这种采样技术的一个好处是不需要可见性测试。因此,与其他 Cs;t 相比,它的贡献评估起来很便宜。在我们的实现中,我们在生成眼睛子路径时累积这些贡献。

10.3.4.2 One light subpath vertex (s = 1)

这种采样技术将给定的眼睛子路径 zt1:::z0 连接到光源上随机选择的点。回想一下,在基本算法中,这个点只是光子路径的第一个顶点 y0(根据发射功率选择)。然而,这些样本的方差可以通过使用特殊的直接照明技术选择顶点来大大降低。也就是说,我们简单地忽略顶点 y0,并将眼睛子路径连接到使用更复杂的方法(例如 Shirley 等人 [1996] 描述的方法)选择的新顶点 yd0。通过为每个子路径选择不同的光源顶点,该策略分别应用于每个眼睛子路径后缀 zt1:::z0。


Veach1997论文阅读
https://ksgfk.github.io/2022/10/11/Robust_Monte_Carlo_Methods_For_Light_Transport_Simulation阅读/
作者
ksgfk
发布于
2022年10月11日
许可协议