可微分渲染技术,让基于真实感图像(photorealistic image)的逆向问题的理论上可以解决,比如上图,通过影像重建几何结构和材质属性等。
然而,可见性而导致的边界不连续性问题是一大瓶颈,特别是当场景中存在复杂的geometry以及对一些重要边缘采样不充分等问题。本论文’ Reparameterizing Discontinuous Integrands for Differentiable Rendering’提供了一种方法,绕开对边缘轮廓(silhouette)的采样,同时提供了一种控制变量技术来减少方差。该方法虽然有偏不一致,但bias和variance都很小。
如上图,我们对下面的积分,对p求导,因为红色部分的不连续性,无法直接求导
我们用y=x-p换元后,可得
此时,该积分仍然不连续,但当p变化时,不连续的区域在该积分域中是静态的,于p无关,而连续区域的采样点则跟p有关。因此,当我们对p求导时,函数前者和后者在采样方式上的对比如下:
这里,要强调的是对y_i的采样和参数p要独立,否则,不连续性会重新引入到被积函数。我们用p_0表示参数p的当前位置时,当p=p_0,我们希望这个换元操作不会有任何变化,比如最简单的平移函数,我们会进行如下设置:
接下来就是如何把这个简单的数学思路引入到微分渲染中。
首先,如上图,论文中假设不连续性都是由微小的物体(黄色区域)造成了。基于该假设前提,我们可以通过球面旋转矩阵建立任意采样点ω(f在球面的投影位置)和不连续区域所在的点θ_0(红线)之间的关联:
类似上一篇的Heaviside step function,这里,我们通过随机数生成r时,r值表示的是相对于θ_0的位置,而非以前的绝对位置,我们可以通过r直接判断该采样点是在不连续区域的左侧还是右侧,而该采样点相对于参数θ是连续的,可以直接求导。由此,我们通过MC对该积分求解,这里,pdf采样针对θ_0,也就是当前参数θ的值,从而消除ω和θ之间的关联,否则,还得对pdf求导:
但现实场景中的geometry往往比较复杂,导致不连续性的几何结构会比较复杂,如上图,这个违背了我们的假设前提,论文中提供了一个新的思路,就是不断放大微小区域,一直到小的足够简单为止,然后在该区域中应用上面的方式来解决不连续性问题。这相当于用一个卷积来取代单个的采样点,结果仍然是无偏:
对应下图,原本我们对左侧一个点求积分时,我们转为对右侧球面上某一个点采样了,这时,我们对该采样点做一个卷积,在这个微小区域可以采用之前的方式求导。如果卷积的size较小,则variance小,bias大,反之亦然,这是引入bias的一个地方。
这里就有一个问题,我们是不知道不连续点P的位置,所以采用该方法,避免对边界的采样,而该方法需要预知该不连续点P的值,才能使用。论文里采用随机创建N(论文中为4)条ray,根据其intersection对应的法线,材质等属性,来预估这个边界点P的值
,这个过程的计算量很小,但代价是引入了bias。论文中提到了对旋转矩阵R的要求:
这里,任一点在该球面的投影位置为
,
是当前θ在球面的投影位置
,而我们要求该旋转矩阵相对
是单位矩阵,而其他值则保持和不连续点
移动的速度相同(一阶导数相等)。个人的理解是这样,
是当前不连续点的位置,已知值,周边任意一个采样点
,采样值。这样,存在一个
,使得
,然后还有参数θ,这里,我们将
移动到θ位置(未知),则有另一个
,这样,我们可得
,该矩阵表达了采样点
和参数θ的关联。论文附录中给出了旋转矩阵的推导公式。
上图是一个大概的过程:首先是primary ray,我们创建3个射线,根据intersection的结果,构建合适的换元参数,使得被积函数相对于参数p可导,计算其对应的梯度值,然后选取其中一条ray,计算其对应的direct ray,最后是indirect ray。这些用于估算边界的射线还可以复用,用来创建光路。
该方法得到的结果方差仍然较大,因此,论文中采用了控制变量法来减少方差。
如上的公式求某点的radiance,我们用控制变量法,可得:
此时,如果我们指导f函数的值c,让α=c时,其梯度的方差最小,我们对θ求导,这时,只要我们能找到合适的α值,则可以减少其梯度的方差:
这里采用的技术是cross-weighting scheme,参考的是论文‘Image-space Control Variates’。大概是构建两个非相关的光路,这时,我们根据其中一条光路获取对应的α值。
这里, 红色和蓝色光路部分采用相同的随机数构建的两条相似光路,我们套用之前的公式和思路,可得如下的光路的radiance:
这里因为
(这个结论我不太明白,个人感觉是因为采样是围绕不连续点
的uniform分布,所以,其期望值是0)。进而
,我们可以直接对
求导获取其梯度。
上图是采用控制变量法减少方差和不使用该方法的效果对比。
我们利用该算法来解决渲染的逆运算,上图是其效果。
上图是采用该算法和上篇论文中算法的对比,特别是在(d)复杂场景中,该算法的效果很明显。
上图,该场景下使用该算法得到的结果和ref不同,因此,该算法并不保证一致性的(consistent)