《DreamGaussian: Generative Gaussian Splatting for Efficient 3D Content Creation》

摘要:

\quad 在3D content creation方面的最新进展大多利用通过SDS进行的基于优化3D生成。虽然已经显示出了有希望的结果,但这些方法的per-sample optimization往往比较缓慢,限制了它们的实际应用。在这篇文章中,我们提出了DreamGaussian,同时实现efficiency和quality。我们的key insight是设计一个生成的三维高斯溅模型,在UV空间中进行友好的网格提取和纹理细化。与NeRF使用的occupancy pruning优化过程相反,我们证明了在三维生成任务中,3D Gaussians的 progressive densification 收敛速度明显更快。为了进一步提高纹理质量,促进下游应用,我们引入了一种高效的算法,将3D Gaussians转换为textured meshes,并应用一个fine-tuning stage来细化细节。值得注意的是,DreamGaussian在短短2分钟内从单视图图像中生成高质量的纹理网格,与现有方法相比快了大约10倍。

方法:
在这里插入图片描述

\quad DreamGaussian的总体框架如上图所示,分为三个步骤。

\quad 一、Generative Gaussian Splatting

\quad 第一个步骤,像DreamFusion那样,先随机初始化一个模型(本文初始化的是一堆点云,DreamFusion初始化的是一个MLP),然后将这个模型渲染出各个视角的图片,与text/image prompt一同输入至Stable Diffusion中进行优化。这一步的目的是优化出一个良好的3D Gaussians,以此作为几何和外貌的初始化。

\quad 二、Efficient Mesh Extraction

\quad 第二个步骤,从优化的3D Gaussians中抽取textured mesh。

\quad Polygonal mesh是一种广泛应用的三维表示方法,特别是在工业应用中。很多先前的工作【DreamFusion、Magic3D、Textmesh、nerf2mesh】将NeRF表示导出为a mesh-based representation,用于后续的高分辨率的微调。

\quad 到目前为止,从3D Gaussians中提取Polygonal mesh还没有被探索过。由于空间密度是由大量的3D Gaussians来描述的,因此对密集的三维密度网格的强力查询可能是缓慢和低效的。我们也不清楚如何提取3D中的外观,因为颜色混合只用projected 2D Gaussians来定义。在这篇文章中,我们提出了一种基于block-wise local density query和back-projected color的有效纹理网格提取算法。

  1. Local Density Query

\quad 为了提取mesh geometry,需要一个dense density grid来应用 Marching Cubes 算法。3DGS算法的一个重要特征是在优化过程中,超大的高斯分布会被分割或修剪。这是用于快速光栅化的tile-based culling technique的基础。我们也利用这个特征,来执行block-wise density queries。

\quad 我们首先将尺度为 ( − 1 , 1 ) 3 (-1,1)^3 113的空间分为 1 6 3 16^3 163个blocks,然后剔除中心位于每个局部block之外的Gaussians。这有效地减少了每个block中查询的高斯总数。然后,我们在每个block中查询了一个 8 3 8^3 83 dense grid,也就是说最后产生的是一个 12 8 3 128^3 1283 dense grid。在dense grid中,对于每个查询位置x,它的不透明度的计算如下:
在这里插入图片描述

\quad x i x_i xi是所处block内所有剩下的Gaussians的位置, α α α是其对应的不透明度。这里的意思就是根据所处block内的所有Gaussians,按照距离来加权不透明度。然后使用一个经验阈值,通过Marching Cubes来提取网格表面。最后,采用 Decimation and Remeshing【MeshLab: an Open-Source Mesh Processing Tool】 对提取的网格进行后处理,使其平滑。

  1. Color Back-projection

\quad 有了mesh后,可以将渲染出的图像投影到上面,然后再bake它作为纹理。最后得到的纹理图像,作为下个阶段mesh texture 微调的初始化。

\quad 至此,第二个步骤结束,因为我们已经得到了textured mesh。

\quad 三、UV-Space Texture Refinement

\quad 由于SDS优化的模糊性,从3DG中抽取出的mesh通常有着模糊的纹理,如下图stage 1所示。
在这里插入图片描述

\quad 因此,我们提出了一个第二阶段来微调纹理图像。但是,直接用SDS微调UV空间,常常导致伪影,这一点在《Tada! text to animatable digital avatars.》中也有被观察到。这是由于可微分光栅化中的mipmap纹理采样技术。SDS的混淆指导,会导致过饱和的颜色块,如上图中Stage 2(SDS)所示。所以,我们希望找到更明确的指导,来微调 blurry texture。

\quad 因为我们已经有一个初始化的纹理了,所以我们可以从一个随机视角渲染一个模糊图像,然后往里加入噪声,再送到SD中得到一个细化的图像。然后再用这个细化的图像,来优化纹理。
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/DUDUDUTU/article/details/134968520