Path-Space Differentiable Rendering of Implicit Surfaces论文解读

 〇、论文摘要

Physics-based differentiable rendering is a key ingredient for integrating forward rendering into probabilistic inference and machine learning pipelines. As a state-of-the-art formulation for differentiable rendering, differential path integrals have enabled the development of efficient Monte Carlo estimators for both interior and boundary integrals. Unfortunately, this formulation has been designed mostly for explicit geometries like polygonal meshes. In this paper, we generalize the theory of differential path integrals to support implicit geometries like level sets and signeddistance functions (SDFs). In addition, we introduce new Monte Carlo estimators for efficiently sampling discontinuity boundaries that are also implicitly specified. We demonstrate the effectiveness of our theory and algorithms using several differentiable-rendering and inverse-rendering examples.

        先po一段摘要,中文大意是:(物理基础的)可微渲染中,微分路径积分是最新的先进技术,但主要用于显式几何体。本文将其扩展到隐式几何体,并引入新蒙特卡罗估计器。

从中我们可以提取出几个关键词:

  • 可微渲染
  • 微分路径积分
  • 微分路径积分在隐式几何体上的扩展
  • 蒙特卡罗估计器

那接下来我们先来对前两个词进行简单的引入:

一、可微渲染和微分路径积分

a. 可微渲染

        可微渲染,简单来说就是一种可以计算图像中每个像素对输入参数变化的敏感度的渲染方法。更通俗地说,就是如果场景内的某些结构参数\omega(如光源、材质、相机位置等等)发生了变化,这会引起输出的图像Image(\omega)也有对应的变化。那可微渲染就是在图像Image(\omega)中像素变化过程相对于参数\omega可微的前提下,找到一个方式去求它的导数

        实际上衡量图像像素变化的可微性质,我们只需要得到在摄像机某像素接收到的光强关于参数\omega是如何变化的即可。也就是说,我们的目标转化成了:如何计算光照强度(Intensity)关于参数\omega的导数?

b. 路径积分(Path Integral)

        Eric Veach在Robust Monte Carlo Methods for Light Transport Simulation中,利用三点式渲染方程,将积分变量从立体角变为面积,结合辐射传感器响应积分,得到了一个非常简短的路径积分公式:

I=\int_{\Omega}f(\overline{x}) d\mu(\overline{x})

其中:

        积分区域满足:\Omega =\bigcup_{N\ge1}\mathbf{M}^{N+1}指代所有可能的不超过N段的光线传播路径构成的空间\mathbf M指代所有物体表面的集合,元素\overline{x} = (x_0,x_1,...,x_N)\in \Omega表示从物体表面\mathbf{M}上弹射N次所形成的光线路径。

        积分变量满足如下公式(A是曲面表面的面积测度):

d\mu(\overline{x})=\prod_{n=0}^{N}dA(x_n)

        被积函数满足:(具体推导过程详见原文)

 f(\overline{x})=\prod_{n=0}^{N-1}g(x_{n+1}; x_{n-1}, x_n)W_e (x_N \rightarrow x_{N-1})

其中:W_e (x_N \rightarrow x_{N-1})是传感器响应函数,并且:

g(x_{n+1}; x_{n-1}, x_n)=f_s (x_{n-1} \rightarrow x_n \rightarrow x_{n+1})\cdot G( x_n \leftrightarrow x_{n+1})

其中:G( x_n \leftrightarrow x_{n+1})被称为geometric term,其含义包含了可见性函数\mathbb{V}与积分变量变换的Jacobi量,并且有:

f_s (x_{n-1} \rightarrow x_n \rightarrow x_{n+1})=\left\{\begin{matrix} L_e (x_0 \rightarrow x_1) \quad (n=0) \\ BSDF \quad (n>0) \end{matrix}\right.


        综上,路径积分这个积分公式是本论文的最基本的公式,其优点在于直接表示成了高维积分的结果,后续一系列求解思路均由该公式决定。

        上文中提到,可微渲染的目标为如何计算光照强度(Intensity)关于参数\omega的导数,在路径积分的加持下,我们只需要考虑对路径积分求导即可。(为了简化表述,在本文中只计算参数\omega = 0时的导数,其余情况通过简单的参数变换即可实现)

c. 重新参数化(Reparameterization)

        对路径积分求导并不是那么容易。为了简化求导的过程,我们需要减少和参数相关的量出现,因此第一步是进行对物体表面重新参数化,尽可能让物体所有的表面和参数无关。

        但是往往事与愿违,很多时候参数会直接控制场景中物体的形状。我们先使用简单的显式曲面举个例子,假如场景物体中有一个球,球的显式表示如下:

\bf{x}(\omega)=\omega (\sin\varphi \cos\theta,\sin\varphi \sin\theta,\cos\varphi),\omega\in[a,b],(0<a<b)

而待求导的参数是球的半径 \omega,此时球的表面一定是随着参数变化而变化的。在这种情况下,我们希望能“让球的大小和参数(半径)无关”,最简单的方案是什么呢?

        为了解决这个问题,Cheng Zhang等人在Path-space differentiable rendering.中使用了一个简单粗暴的方案:在场景表面和参数随着参数变化而变化时,先直接固定场景为其最初始的形态,然后再找到一个可微一一映射,将初始场景中的点一一映射至实际场景中的点

通过这种方式我们就把随参数变化的场景转化成了两部分:

  •  一个固定的场景
  •  固定场景和原始场景之间的可微映射

        还是使用上述例子来举例,我们希望让球的大小和参数无关,我们令

\bf{p}=a \cdot (\sin\varphi \cos\theta,\sin\varphi \sin\theta,\cos\varphi)=\bf{x}(\omega)|_{\omega=a}

        并且将\bf{x}\bf{p}间建立双射\bf{x}=\mathbb{X}(\bf{p},\omega),该例子下映射可以如下表示:

\bf{x}=\frac{\bf{p}}{a}\cdot \omega

        我们在上述过程中改变了我们的参数表示方式,我们先定义一些量:

        在原先的表示方式下,我们使用了\mathbf M指代所有物体表面的集合,\Omega指代所有可能的光线传播路径构成的空间(但是\mathbf M\Omega都可能是随参数变化而变化的)。

  1. 使用参考表面(Reference surface) \mathbf B来表示参数化后所有物体表面的集合(物体表面\mathbf B和参数\omega无关的)。
  2. 相似的,我们也使用\widehat{\Omega}=\bigcup_{N\ge1}\mathbf{B}^{N+1}来定义在参考表面\mathbf{B}上所有可能的光线传播路径构成的空间,我们称之为物质路径空间(Material path space),其中的元素由\overline{p} = (p_0,p_1,...,p_N)\in\widehat{ \Omega}表示。
  3. 我们接下来按照论文中的表述,使用\pi代表待求导的参数

在这种表示下,我们原先的路径积分可以表示为如下形式:

        I=\int_{\widehat{\Omega}}f(\overline{p}) d\mu(\overline{p})

由于积分变量发生了变化,因此需要乘上对应的Jacobi量:

f(\overline{p})=f(\overline{x})\cdot\prod_{n=0}^{N}J(\bf{p_n},\pi)

在这种形式下就可以更方便地进行求导了。

d. 微分路径积分(Differential Path Integral)

接下来我们直接对参数进行求导:

论文中直接引用了Path-space differentiable rendering.中的结果:

\frac{dI}{d\pi}=\int_{\widehat{\Omega}} \frac {d}{dx}\widehat{f}(\overline{p})d\mu(\overline{p})+\int_{\partial \widehat{\Omega}} \widehat{f}(\overline{p}) (n_\partial (p_K)\cdot \frac{dp_K}{d\pi})d\dot{\mu}

其中有一些需要解释的元素:

  • 这两项该如何理解,又该怎么算?
    • 这个形式可以类比一维的“含参积分求导公式”在二维上的拓展,但是第二项看起来有点复杂。
    • 第一项称为内部项,是在路径空间内部进行积分,可以直接仿照ray tracing蒙特卡洛方法进行计算(采样方便)
    • 第二项称为边缘项,是在路径空间的边界上进行积分,积分区域比较难以采样,因此这一项的求解是问题的关键。
  • p_K是什么?
    • \mathbf{\overline{p}} = (p_0,p_1,...,p_N)表示一段在参考表面\mathbf{B}上反射N次的光路,p_K是其中第K+1
    • 在公式中,p_K满足:从p_{K-1}看过去,p_Kp_{K-1}之间有一个物体,并且p_K刚好在物体轮廓上,没有被挡住。论文中称之为:相对p_{K-1}可见性边界,记作\Delta \mathbf{B}(p_{K-1})
      • 这个称呼也好理解,对于点p_{K-1}来说,可见性函数\mathbb{V}(p_{K-1},\cdot )是一个非零即一的函数,从p_{K-1}看过去,当\mathbb{V}(p_{K-1},\cdot )为1则代表了自变量在正面,是能被看见的;否则就是不能被看见的。
      • 当可见性函数\mathbb{V}(p_{K-1},p_{K} )在0和1之间发生跳跃时,代表了p_Kp_{K-1}的视线里“被遮挡物挡住”或者“脱离被遮挡状态”。

  • n_\partial (p_K)\cdot \frac{dp_K}{d\pi}又该如何理解?
    • Path-space differentiable rendering.书中给出的解释如下:"... captures the change rate
      (with respect to θ) of pK along the normal direction of the discontinuity curve or surface
      (under reference configurations)."
    • 通俗地说:就是当参数移动的时候,可见性边界上的p_K处移动的速率。
    • 实际上速率计算的方式是:p_K关于参数的导数在p_{K-1}视线中遮挡物轮廓曲线在被遮挡表面上的投影曲线的法线”方向的分量。因此:
      • \frac{dp_K}{d\pi}代表p_K关于参数的导数
      • n_\partial (p_K)满足n_\partial (p_K)\perp n_{surf} (p_K)n_\partial (p_K)\perp t_{Bound} (p_K)
        • n_{surf} (p_K)代表了p_K所在曲面的法线
        • t_{Bound} (p_K)代表了p_K所在曲面上没有被遮挡的区域的边界的切线方向
      • n_\partial (p_K)的方向指向被遮挡的区域

  • \int_{\partial \widehat{\Omega}} \widehat{f}(\overline{p}) (n_\partial (p_K)\cdot \frac{dp_K}{d\pi})d\dot{\mu}又应该如何求解?
    • ​​​​​​​此处论文更换了记号,将\mathbf{\overline{p}} = (p_0,p_1,...,p_N)写成\mathbf{\overline{p}} = (p_s^S,...,p_0^S,p_0^D,...,p_t^D)
    • 其中p_0^S=p_{K-1},p_0^D=p_K,并且新增了一个切点p_B及其视线方向\omega^B(如图)。
    • 将光路分为Source,Boundary,Detector三段(分别对应上图黄色,红色,蓝色段)。并且将待积函数\widehat{f}(\overline{p}) (n_\partial (p_K)\cdot \frac{dp_K}{d\pi})按照这三段的贡献分解为{\widehat{f}}^S,{\widehat{f}}^B,{\widehat{f}}^D
    • 因此,我们得到以下公式:

\int_{\partial \widehat{\Omega}} \widehat{f}(\overline{p}) (n_\partial (p_K)\cdot \frac{dp_K}{d\pi})d\dot{\mu}=\int_{​{\widehat{\Omega}}^S\times \overline{p_{K-1}p_K}\times{\widehat{\Omega}}^D} {\widehat{f}}^S{\widehat{f}}^B{\widehat{f}}^Dd\dot{\mu}\\=\int_\mathbf{B}\int_{\Delta\mathbf{B}(p_{K-1})}(\int_{​{\widehat{\Omega}}^S}{\widehat{f}}^Sd\mu^S){\widehat{f}}^B(\int_{​{\widehat{\Omega}}^D}{\widehat{f}}^Dd\mu^D)dl(p_0^D)dA(p_0^S) 

  • 为什么如此分解?为什么积分能如此转化?这里给出笔者的理解:
    • 首先,在所有可能的光线中,光线恰好在可见性边界上的概率非常小(简单讨论起见,我们令概率为p,实际上在场景非奇异时p=0,下面使用小量分析)。因此在光路进行多次反弹最终射向传感器的过程中:
      • 有一条光线在路径空间边缘的概率为p,我将其视为一阶小量。
      • 有n条光线在路径空间边缘的概率为p^n,是更小的高阶小量。
    • 因此在求解边界项时,我们只保留“光路中有一条光线在路径空间边缘”的情况,舍弃高阶小量,这个舍弃方案是我们使用新表示方法的基础,也决定了积分函数分解的方式
    • 在这个假设下,只有路径空间边缘处的光线的两端p_0^S,p_0^D受到了限制,其他反射点均可使用蒙特卡洛算法采样。因此我们通过分配积分次序,将S,D区域的光线提前进行积分,最后留下相互制约的p_0^S,p_0^D点在最后进行积分。这就是为什么积分能如此转化。

二、微分路径积分在隐式几何体上的扩展

上面介绍了重新参数化和微分路径积分的求解。但是在隐式几何体上,仍然有两座“大山”:

  • 由于显式几何体的优势,重新参数化在显式几何体上可以简单地进行,但是隐式几何体的重新参数化并不是那么简单;
  • 对于隐式几何体,在微分路径积分的内部项中,对p_K,p_{K-1}的积分难以求解。

因此本章中将着重解决这两个问题:

a. 隐式几何体的重新参数化        

        具体来说,我们研究的对象是对于标量函数簇的零点集。问题在于,已知

\mathbf{M}(\pi) := \{\mathbf{x}\in \mathbb{R} : \varphi(\mathbf{x}; \pi) = 0\}

\mathbf{B}=\mathbf{M}(0) = \{\mathbf{x}\in \mathbb{R} : \varphi(\mathbf{x}; 0) = 0\}\mathbf{M}(\pi)

        如何建立起一个一一映射\mathbb{X}(\cdot;\pi):\mathbf{B}\rightarrow \mathbf{M}(\pi),并且保证其关于参数\pi0处可微?(不失一般性地简化命题)

        论文作者在这里非常幽默地说:

不幸的是,与使用显式几何不同,很难定义一对一的映射(如果不是不可能),将参考面B变换为M(𝜋)。因此我们使用了替代方案:定义了图3中所示的映射,该映射仅在𝜋=0处一一映射

        作者直接从p \in \mathbf{B}向外作切线,并求切线与\mathbf{M}(\pi)的第一个交点,交点:

\mathbb{X}(p;\pi):= p + t(p, \pi) n_\mathbf{B} (p)

即为映射的结果,其中n_\mathbf{B} (p)为单位法向;t(p, \pi)即为n_\mathbf{B} (p)方向上,从p到和M(𝜋)的第一个交点间的距离。可以看出:映射\mathbb{X}(\cdot;\pi)确实在𝜋=0处是一一映射(毕竟是恒等变换)。

        接下来,在已知了重新参数化的方式后还需要干什么?当然是求积分咯,我们在这里就先梳理一下我们还需要了解哪些量,并求出它。

  • 内部项中,Jacobi量代入可以得到内部项为:

\int_{\widehat{\Omega}} \frac {d}{d\pi}\left ( f(\mathbb{X}(\overline{p},\pi))\cdot\prod_{n=0}^{N}J(\bf{p_n},\pi) \right )d\mu(\overline{p})

因此我们需要得到Jacobi量的导数形式,而论文中给出了如下计算方式:

(\partial_\pi J) (p) = \kappa(p) V(p)

  • 当我们研究p点在遮挡物上的情形时,如果能求出p点在法向方向运动的速度,那我们就能方便地算出边界项的值。因此我们令p点的运动速度为:

v(p):= (\partial_\pi t)(p)+n_\mathbf{B} (p)

即为所求,其中:

(\partial_\pi t)(p)= -\frac {(\partial_\pi \phi t)(p)} {\|\triangledown_p\phi(p)\|}

  

b. 隐式几何体的“边界项”积分求解:

        事先说明几点,在蒙特卡洛采样过程中有以下几种采样的可能方式(case 2&3的采样方式将在第三章中介绍):

  • (case 1)对于规则的几何体及其衍生采样方式(球面/半球/圆周等):容易且快速。
  • (case 2)在全局表面上的采样:需要设计算法,总体相对快速。
  • (case 3)对任意视角上,场景中所有物体的轮廓进行采样:同样需要设计算法,耗时较长。

       这三种采样方式中我们可以看出,在采样方式中case 3的采样代价是最大的,case 2次之,case 1 代价最小。如果我们能把代价较大的采样方式变为代价较小的采样方式,我们就能加快算法的效率。这是我们接下来的主要思想。

        接下来回顾一下边界项积分的公式:

 \int_\mathbf{B}\int_{\Delta\mathbf{B}(p_{K-1})}(\int_{​{\widehat{\Omega}}^S}{\widehat{f}}^Sd\mu^S){\widehat{f}}^B(\int_{​{\widehat{\Omega}}^D}{\widehat{f}}^Dd\mu^D)dl(p_0^D)dA(p_0^S)

        我们将中间的被积分式简写成F(p_0^S,p_0^D),则我们可以将积分简写为如下形式:

\int_\mathbf{B}\int_{\Delta\mathbf{B}(p_{K-1})}F(p_0^S,p_0^D)dl(p_0^D)dA(p_0^S)

        这代表了:对于积分中的每次采样,首先在所有表面上采样p_0^S,然后再在p_0^S视角中的场景轮廓的被遮挡面处采样p_0^D很显然,这两次采样分别使用了case 2&3的采样方式,计算此积分的代价是巨大的。

        因此我们需要改变积分(采样)方式为相对快速的(case 1/2)的形式 。接下来三个步骤会彻底将对p_0^S,p_0^D的采样变为对p^B,\omega^B的采样。

步骤一

        由于对p_0^D采样和对p^B采样是等价的,区别仅仅在于dl(p_0^D)dl(p^B)之间差了一个倍数关系,这个倍数关系可以通过简单的方式求出(此处不做细致描述)

        因此我们将“轮廓上对p_0^D采样”变为“轮廓上对p^B采样”。在此步骤后,积分转化为如下形式:

\int_\mathbf{B}\int_{\sum \mathbf{B}}\left (F(p_0^S,p_0^D)\cdot \frac {dl(p_0^D)}{dl(p_0^B)} \right )dl(p_0^B)dA(p_0^S)

        其中这代表了:对于积分中的每次采样,首先在所有表面上采样p_0^S,然后再在p_0^S视角中的场景轮廓的遮挡面处(不是被遮挡面处)采样p^B

步骤二

        由于p_0^Sp^B之间相互约束,我们可以在固定p_0^S,在它视角的轮廓上对p^B采样;那同样也可以固定p^B,在所有满足\overrightarrow{p^Bp_0^S}\in T_ {p^B}\mathbf{B}p_0^S上进行采样。

        我们记:

\Gamma \mathbf{B}(p^B)= \mathbf{B}\cap T_ {p^B}\mathbf{B}

        因此我们将“先采样p_0^S后采样p^B”变为“先采样p^B后采样p_0^S”。在此步骤后,积分转化为如下形式:

\int_\mathbf{B}\int_{\Gamma \mathbf{B}}\left (F(p_0^S,p_0^D)\cdot \frac {dl_n(p_0^S)}{dl_n(p^B)} \frac {dl(p_0^D)}{dl(p^B)} \right )dl_t(p_0^S)dA(p^B)

       具体推导过程详见论文。简单来说就,是将p_0^S处的切空间分为\Gamma \mathbf{B}及其补空间,并且将补空间上的自由度分配至p^B上,这样我们就可以在全体表面上采样p^B了,这是容易采样的。这个积分形式代表了:对于积分中的每次采样,首先在所有表面上采样p^B,然后再在p^B的切空间与表面的交集处采样p_0^S

步骤三

        由于p_0^S\omega^B是一一对应的,同样我们也可以将p_0^S的微分转化为\omega^B的形式。这种转化方式的优点是\omega^B的采样可以视为在单位圆周(0到2\pi)上采样,是非常方便运用蒙特卡洛方法的。

        因此我们将“\Gamma \mathbf{B}上对p_0^D进行采样”变为“单位圆周上对\omega^B进行采样”。在此步骤后,积分转化为如下形式:

\int_\mathbf{B}\int_\mathbb{S}\left (F(p_0^S,p_0^D)\cdot\frac{dl_t(p_0^S)}{d \theta(\omega^B)} \frac {dl_n(p_0^S)}{dl_n(p^B)} \frac {dl(p_0^D)}{dl(p^B)} \right ) d\theta(\omega^B) dA(p^B)

         这个积分形式代表了:对于积分中的每次采样,首先在所有表面上采样p^B,然后再单位圆周上采样\omega^B

        这就是我们需要求解的积分,接下来进行蒙特卡洛算法的求解。

三、蒙特卡罗估计器

        总的来说,我们刚刚将积分边界项转化为了如下两种形式,分别称之为初边界积分次边界积分。特别的,我们将在下文中将(case 3)视线轮廓上的采样方式称为初端采样,将(case 2)全局采样的采样方式称为次端采样

\int_\mathbf{B}\int_{\Delta\mathbf{B}(p_{K-1})}F(p_0^S,p_0^D)dl(p_0^D)dA(p_0^S)

\int_\mathbf{B}\int_\mathbb{S}\left (F(p_0^S,p_0^D)\cdot\frac{dl_t(p_0^S)}{d \theta(\omega^B)} \frac {dl_n(p_0^S)}{dl_n(p^B)} \frac {dl(p_0^D)}{dl(p^B)} \right ) d\theta(\omega^B) dA(p^B)

其中:

  • 初边界积分的积分方式决定了,其需要进行初端采样和次端采样(对应case 2&3)
  • 次边界积分仅需进行单位圆周采样和次端采样的采样(对应case 1&2)——由于主端采样的代价较大,因此相比于初边界积分,次边界积分的代价会更小。

        但是,从初边界积分推导到次边界积分的过程中,隐含了一个条件:“摄像机端 p_0^D的取值是在参考表面上自由取值的”。但是我们在具体解积分时,同样需要讨论一个问题:p_0^D 会不会是摄像机?

  • 如果p_0^D是摄像机,那么p_0^D的取值是固定的,这种情形下我们无法使用次边界积分,只能进行初边界积分。因此我们需要给出初端采样(case 3)和次端采样(case 2)的方案来计算初边界积分。
  • 如果p_0^D不是摄像机,那么p_0^D的取值是自由的,这种情形下我们就可以使用次边界积分。此处同样需要次端采样(case 2)的方案来进行计算初边界积分。

      因此接下来我们分别对初端采样/次端采样的方案进行详细阐述:

a. 初端采样

        初端采样指的是对给定视角上,场景中所有物体的轮廓S进行采样。实际上问题的本质在于,我们需要找到合适的方式来刻画“轮廓集合”。

        那我们如何将轮廓S刻画成一个方便采样的形式呢?第一步当然是要给出S的清晰定义。论文中给出了如下的解释:如果曲面上的点到相机的方向和该点的法向是垂直的,那么在这个点就在“轮廓”上。数学表述即为:

        记v_c(p)=pos_{camera}-p为坐标点到相机的向量,那么记:

\psi (p)=\left \langle \triangledown \phi (p), v_c (p) \right \rangle

S=\{p\in \mathbb{R}^3|\phi(p)=\psi (p)=0\}

        以上定义中,S就是我们想要的“轮廓”。为了方便想象我们可以考虑二维情形,在二维情形下,轮廓即为\{p_1,p_2\},如下图:

       
        接下来,我们需要解决如何对已有的定义S进行采样。我们不妨假设场景中的曲面外有一个AABB包围盒,如下图,这个包围盒内部有\phi ,\psi两个曲面,我们需要采样的轮廓即为图中玫红色的交线:

        但是问题在于:S是一个表达式未知的空间曲线,难以采样。那要怎么办呢?由于空间曲线实际上可以投影到包围盒的某个面上,因此我们将S投影到长方形面F上(图中包围盒右侧面)。

        但是投影后仍然无法采样,于是我们再将这个投影曲线投至线段\epsilon上,也即图中红线处。因此,当我们采样时,可以先在红色线段\epsilon上采样一点q_1,并向垂直方向不断步进,步进过程中将点q_i向法向延伸并与曲面\phi求交,直到得到两曲面交点即为所采样点。具体算法如下图:

        于此同时,我们也要考虑一个问题:如果将S投影到长方形面F上时,投影曲线和空间点并不是一一对应的,投影曲线发生了自交,那么最终结果就会导致采样点不唯一。为了杜绝这样的情况,我们可以让AABB包围盒尽量的小,小到包围盒内的曲面足够的平坦,并假设在如此小的包围盒内投影曲线和空间点一一对应即可。

        如下图,我们可以直接将空间分成足够小的轴向包围盒,然后应用仿射算术计算包围盒内的函数值是否包含其零点,就可以得到足够小的AABB包围盒。

        总的来说,实际采样过程中的采样方式如下:

  1. 先构造大包围盒,并且将大包围盒逐步细分,使用仿射算术排除与曲面\phi ,\psi无交的包围盒,反复细分排除,直至包围盒足够小,此时我们可以得到上图中右侧所表示的“边缘包围盒集合”。
  2.  然后我们在“边缘包围盒集合”中,采样出若干个包围盒。
  3.  最后在其中利用Algorithm 1采样出轮廓上的点,将其作为采样的最终结果。

b. 次端采样

       次端采样指的是对场景中所有物体的表面进行采样。但是隐式几何体表面很难直接进行采样,因此,我们同样需要找一些替代的参数域作为采样区域。

        具体来说,如果我们求如下积分:

\int_{\mathbf{B}}h(p)dp

        论文中采取了一种独特的方法。假设F是隐式几何体的包围盒的某个面,那么从F上的点q出发向\mathbf{B}投射出射线:

r(q,t)= q+ t\cdot n_F(q) \quad (q\in F, t \in \mathbb{R}^+)

        我们记从F上的点q发出的射线和\mathbf{B}的第一个交点的集合为\mathbf{T_1}(q),满足:

\mathbf{T_1}(q)=\{r(q,t)\in \mathbf{B}|\forall t_0<t,r(q,t)\notin \mathbf{B}\}

        同理,我们记\mathbf{T_n}(q)代表点q发出的射线和\mathbf{B}的第n个交点(如果有的话)。记n的最大值为N。那么:

\int_{\mathbf{B}}h(p)dp=\sum_{n=1}^{N}\int_{\mathbf{T_n(F)}}h(p)dp=\sum_{n=1}^{N}\int_{F}g_n(q)dq

其中

g_n(q)=\left\{\begin{matrix} h(\mathbf{T_n}(q))J_{\mathbf{T_n}}(q) \quad \mathbf{T_n}(q) \ \rm{ defined}\\ 0 \quad \quad \quad \quad \quad \quad else \end{matrix}\right.

这就是次端采样的方案。

c. 下次事件评估

       当我们求解次端采样时,如下式:

\int_\mathbf{B}\int_\mathbb{S}\left (F(p_0^S,p_0^D)\cdot\frac{dl_t(p_0^S)}{d \theta(\omega^B)} \frac {dl_n(p_0^S)}{dl_n(p^B)} \frac {dl(p_0^D)}{dl(p^B)} \right ) d\theta(\omega^B) dA(p^B)

        当我们确定了p^B后,可以直接在圆周上取点。但是可能和场景无交,减慢求解效率。因此,可以更换采样方法:直接计算切平面和场景之间的交线,从交线处采样即可。

四、实验效果:

        文中进行了可微渲染的正向估计逆向渲染两类实验,都给出了很好的结果。(使用了有限差分方法作为对比方法)

        正向估计过程中,分别使用了单向和双向估计器,计算了以下场景下对物体进行平移和旋转作用的微分结果:

        并在难以采样的光源下,验证了在该算法中,双向估计器的结果优于单向估计器的结论:

         逆向渲染中,该方法(尤其是双向估计器)所得出的Loss的趋零性质也显著优于DiffSDF方法,文中使用了以下四个逆向渲染的模型,并都给出了不错的效果。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值