从多视角图片中重建带有任意拓扑的三维隐式曲面
从多视角图片中重建带有任意拓扑的三维隐式曲面
任意拓扑:开放曲面和闭合曲面
三维重建在计算机视觉和图形学中是一个非常经典的问题,对于具有非常复杂的拓扑结构的闭合曲面,现在的工作已经可以达到非常好的重建效果,然而现在通过可微分渲染来进行重建的方法,大多数都是针对有符号距离场的SDF,SDF是把空间表示成内部和外部,因此它只能重建闭合曲面,没办法重建开放曲面,比如植物的叶子,花朵,衣服等。
最近几年也出现了可以表征开放曲面的隐式表征,但是没有任何一种可以直接用来与可微分渲染进行结合。因此NeAT就是用来填补了这个缺口。
其基础思想就是为SDF场来补充一个validity function来表示当前这个位置曲面存在的概率,按照图中二维的举例,我们可以把SDF的零值面进行导出,得到一个闭合的曲面,而如果对SDF做了validity的补充,我们知道最下面的这条线,它的空间有效性是0,那我们在进行曲面导出之前,我们就可以把这里的SDF的值设成NaN。这样我们就可以通过marching cubes的方法,导出一个开放曲面的模型出来。
下面是基于体渲染的微分渲染架构,用于从多目图片重建三维开放曲面。最左边是最开始的一幅图像,从上面采样一个像素,然后将这个像素投射到三维,生成了一束光线,得到三维空间中的采样点,最后用包含了三个子网络的NeAT-Net,来为每个采样点预测它的SDF值,validity值,以及颜色值,在训练阶段,将这些值传入渲染器,用体渲染的方法来计算出当前像素的颜色值以及mask值,然后与ground truth对比得到loss,通过梯度回传来更新参数,在模型的导出阶段,把空间有效性概率小于50%的点都设成NAN,再用marching cubes的方法就可以进行三维模型的导出。
下面讲核心的渲染器是如何实现的,首先从渲染闭合曲面和渲染任意曲面的区别讲起,传统的基于SDF的方法,它是不会渲染back face的,back face就是光线方向和法向夹角小于90°的面,对于开放曲面来说,有时候所有法向都是朝着差不多一个方向的,如果在模型后面摆一个相机,那么它所有的面都是back face,第二个区别是对表面内和表面外的定义,开放曲面是没有内外之说的,所以在定义内外时,只在表面的附近定义了法向的内和外,因此在定义对应的概率密度函数时,我们需要对传统的闭合曲面的概率密度函数进行改动,在光线方向和法线方向相同的时候,我们需要进行反号的操作。
之后我们就可以从概率密度函数公式1来推导不透明度函数 公式2,再对公式2做离散化就可以得到离散版的sdf不透明度公式3,再乘以当前空间它有效的概率也就是空间有效性的validity最终得到物体表面的不透明度公式4,然后我们可以用β计算真实颜色。
接下来是实验部分,做了3个实验来验证,第一个实验是从多视角重建闭合曲面,第二个实验是从多视角重建开放曲面,在MGD和Deepfashion 3D两个数据集的不同种类的衣服上都验证了方法,
后续研究方向,第一个是研究一些新的采样和加权机制,来重建这些高度负责的结构,第二个就是探索在没有相机参数的时候进行重建,这样可以提高处理野外图像的能力。