渲染领域最重要的两篇论文,一篇是‘Rendering Equation’,另一篇则是‘Robust Monte Carlo Methods for Light Transport Simulation’,前者奠定了理论基础,后者则涵盖了主要的光纤传输算法,两篇论文可以说是渲染领域的奠基之作。而在可微分渲染领域,个人感觉‘Differentiable Monte Carlo Ray Tracing through Edge Sampling ‘奠定了可微分渲染的理论,而本篇论文则类似Veach的论文,探讨了如何将已有的光线传输算法引入到可微分渲染中。本论文发表于2020年,主要贡献有三:
首先要了解一些基础概念。论文中提出了‘evolving surface’的概念,如上图,
是一个二维流形(manifold),称为reference configuration,对任意
,
是
的一个motion,提供了
的方法
,实现了, 从
到场景表面M的平滑的一一映射。
称为evolving surface,我们还提供了方法
的逆函数
。这里,我们称点
是一个material point,而
是spatial point,对应不同的参数
,会有不同的方法
,这里,会产生一个集合
,该集合可以认为是运动motion X产生的
的轨迹。给定一个
,可能存在无限多的X,形成这个相同的轨迹
。同样,对一个光路积分,它的积分区间可以是基于
的,也可以是基于
的,前者称为material形式的积分,而后者称为spatial形式的积分。
我们的目的是对
求导,因此需要给出
的参数化表达。首先,我们可以基于对应的轨迹
对其参数化,如上图,对给定的
,我们采用
的形式,在
周边(绿色区域)形成了一个集合
,因此,
也构成了
的周边(1),同时,在
附近指定
,
则是一个平滑函数,将
的区域一一对映射到
的子集(2)。而对于给定的
,
则是其附近的平滑函数(对应红色虚线)。
称为local parameterization。
同时,当
有一个可行的motion
,对所有的
,可得
,这里
,
是一个平滑函数,一一映射到reference
,我们称函数
为global parameterization。
这样,对于给定的spatial point
和表面参数化的
(local或global),存在
,满足
,我们称
是
的局部坐标,并且定义
的local velocity为:
如果我们知道
的单位法线
,则对应的scalar normal velocity为
,该值独立于表面参数化表达
,而local tangential velocity
则依赖于
。
接着,我们对
封装一个标量空间场
,则其对应的scene derivative和normal scene 的derivative分别是:
如动图所示,我们可以理解场景变化是一个正在播放的视频流(平滑),表面参数化的
用来表达每一帧的场景效果(scalar value),而速度
来衡量场景随着
的变化(导数),我们实现了对
的求导。这里,
是场景表面的梯度。当
时,
。
如上图,我们定义一个evolving surface
,其单位法线为
,在一个标量空间场
中,对给定
,除了不连续区域
,其方法相对参数
都是
连续,定义一个extended boundary
,包括边界
和该空间中不连续部分
。我们有了速度的概念,就可以通过流体力学中的transport relation来对光路积分求微分:
这里,
是total curvature(principal curvature的总和),
和
是对应的scalar normal velocity。蓝色是interior部分,而橙色是boundary部分。
在特定情况下,当场景表面
和场景参数
独立时,
且
,这样,上述公式则退化为Reynolds transport relation。
另外,本论文有两个基本假设,第一,对空间中任意一点
,都存在表面参数化的方式,让
的切线速度为0。这里,我们通常用MC采样,我们可以获取采样点的法线
以及对应的local velocity,保证切线速度为0。第二,和其他论文一样,认为光源
和材质
相对于参数
都是连续的。基于这两个假设,我们可以获取光路积分导数的path space形式:
(一点是在边界上,其他的都在path space中),而
,是boundary path space:
(所有情况的集合),我们称这样的光路为boundary light path,对应上图(b),
称为boundary segment。
这里,我们积分的作用域是path space,也就是
的形式。上图,通过逆方法
和motion
,已知初始值
,我们可得
,这样,换元法可以用作用域
来替换
,得到光路积分导数的material形式:
这种形式下,因为
的boundary不变,与
无关,我们不需要考虑边缘,而只需要考虑内部不连续区域,同时,相比之前对边缘光路的采样,这种形式更容易生成对应的光路,采样成本更低。这里,因为换元,
需要考虑对应的Jacobian determinant,实质上是将boundary的积分转化为interior的形式。
这样,我们可以用传统的光路积分算法来求解interior部分(蓝色),下图是对应的NEE算法:
下面则需要求解boundary积分,这里,我们把这条光路分为三部分:source subpath
, detector subpath
和boundary segment
:
这里,
,我不太肯定如何对G求导,需要结合代码来理解。
如上图,我们可以找到对应的edge点
,随机一个方向
,得到对应的
和
,然后找到对应的
和
。因此,我们需要对
做一次换元,从material到spatial,这里同样有一个Jacobian determinant:
前者是从
到
,后者是从material point
到spatial point
。论文中给出了如何计算该Jacobian determinant的方法。
另外,论文还给出了
的一种Grid-based IS,因为
是一个3D,类似path guiding的思路,我们可以以离散的形式,估算对应的采样权重,pdf。
最后,我们对
和
采用类似传统光路的算法,如上图,给出对应的算法:
下面是论文给出的结果部分。
上图是采用unidirectional算法的结果,当物体沿着竖直轴旋转时的微分结果。
这个是采用bidirectional算法的结果,相对两个场景中面积光的水平移动。以上两个例子证明了算法的有效性。
这个例子是采用unidirectional的性能对比,Edge是Differentiable Monte Carlo Ray Tracing的效果,Reparam是Reparameterizing Discontinuous Integrands的效果,可见,该算法得到了存在bias但较为平滑的结果。该例子说明了本论文的算法效果和性能。
这个例子是树枝这个复杂场景下绕竖直轴旋转的例子,但上图是旋转0.2弧度,下图是旋转0.6弧度的结果,这里,本论文的算法速度最快,而Reparam则在第二个例子中没有收敛。结果是基于image和参数的收敛效果。
这个例子是一个复杂geometry puffer ball的结果,体现了该算法对复杂geometry的能力。
这个例子体现了复杂光路传输效果下的结果,对比bidir和unidir,以及另外两篇相关论文的结果,可见本算法的巨大优势。
还是相同的例子,体现了在该场景下,bidir算法的收敛效果较好。
这个例子是一个马克杯,杯子内有一盏灯,会产生caustic现象,用bidir方法,收敛到对应的场景参数。
这个例子是一个银环,有四种不同颜色的光源。这两个例子都有specular导致的caustic,参数微小的调整都会带来渲染结果的巨大变化。论文算法仍然可以收敛到正确的效果。
最后,论文也给出了自己的限制和后续工作,简单说,是对volume的扩展,以及如何支持MCMC的光纤传输算法。