3D GS 技术一般使用数以万计的 3D 高斯基元来紧凑地表达某个场景,然后通过分块并行光栅化的方式实现高效的图像渲染。这种紧凑表达和高效渲染使得 3D GS 技术变得非常实用。在不影响重建质量和视觉效果的前提下,3DGS 实现了实时渲染。另外,3D GS 这种显式场景表达方式提高了场景的可编辑性,在 3 维重建和新视图合成领域达到了新的高度。
一、3D GS 基本框架
1.SfM点云初始化
在获取到场景的一组 2D 图像后,使用 SfM 技术(一种运动结构恢复技术,可以利用多视角图像估计 3D 结构)从这一组 2D 图像中恢复出场景的稀疏 3D 点云。
2.3D 高斯椭球集初始化
对于每个点云,用一个包含位置信息和形状信息的 3D 高斯函数来生成 3D 高斯椭球。
3.自适应密度控制
计算完图像损失之后,梯度会沿着数据流反向传播,对 3D 高斯基元的参数进行优化,而重建不充分的区域往往有着更大的梯度,是需要优化的重点区域。
1.1、3D Gaussian
在光栅化方法中,我们会将点组装为一个个基本图元,其中最常用的图元就是三角形,也就是场景都是由多个三角形面片组成,我们通过光栅化方法将多个三角形画到屏幕上。
但在3DGS算法中,渲染的基本图元变为了3D Gaussian(想象成一个三维空间的椭球体)
多个3D Gaussian会组合重叠
物体表面法线对于场景渲染十分关键,传统的3D重建方法在使用稀疏数据估计物体表面法线上面临挑战,而使用3D Gaussian来表示场景时,可以不需要法线就可以捕获场景的结构。
3D Gaussian的简单公式表示是:
1.2 Splatting-抛雪球法
3D Gaussian是3D物体,要生成图像(就像常规光栅化渲染一样)就需要将其投影到2D平面上。用到了Splatting-抛雪球法。
抛雪球算法的英文名称为Splatting方法,也称为足迹法(Footprint),它与光线投射法不同,是反复对体素的投影叠加效果进行运算。它用一个称为足迹的函数计算每一体素投影的影响范围,用高斯函数定义点或者小区域像素的强度分布,从而计算出其对图像的总体贡献,并加以合成,形成最后的图像。由于这个方法模仿了雪球被抛到墙壁上所留下的一个扩散状痕迹的现象,因而取名为“抛雪球法”。
该方法把数据场中每个体素看作一个能量源,当每个体素投向图像平面时,用以体素的投影点为中心的重建核将体素的能量扩散到图像像素上。
这种方法之所以叫溅射是因为把能量由中心向四周逐渐扩散的状态形象地比喻为溅射的雪,就好像把一个雪球(体素) 扔到一个玻璃盘子上,雪球散开以后,在撞击中心的雪量(对图像的贡献) 最大,而随着离撞击中心距离的增加,雪量(贡献) 减少。
Splatting的特点:
1)速度快
2)图像质量不如光线投射
3) 色彩扩散
4)渐进细化
5)效率问题
1.3 FAST DIFFERENTIABLE RASTERIZER (快速可区分光栅)
假设现在我们已经得到了用于表示整个场景的大量3D Gaussian,现在我们要将其渲染到image上。
为了加速渲染,3DGS选择使用Tile-based rasterization,将Image切为一个个16 * 16的tile,每个tile像一个小image一样独立计算颜色值,最后多个Tile拼成image的颜色。
考虑到每个3D Gaussian投影到2D image时可能会投影到多个tile,处理方法是如果一个Gaussian投影与多个tile相交,就实例化多次Gaussian,每个Gaussian instance都会得到一个结合view space depth和tile ID得到的key。然后基于这些key,使用single fast GPU Radix sort进行排序。
如下图中,黄色Gaussian投影影响了Tile1和2,其他Guassian投影同理;在另一张图中,我们给出了一个Gaussian投影到多个Tile后,多次实例化以及排序的操作。
之后,每个Tile分别进行Alpha Blending,计算像素颜色值得到图像。
1.4 Initialization(初始化)——Sfm
假如我们已经有方法对3DGS模型进行一步步的优化,那我们要如何开始呢?
在3DGS中,使用的是一种cv算法,Structure from Motion (SfM)算法来从输入图像中得到一组点云。SfM的基本思路是利用多张包含相同场景不同部分的图像,通过追踪图像中的共同特征,估算出相机的运动路径(即相机的外参,包括位置和平移)以及场景的三维点云结构。而3DGS算法就要利用从SfM算法中得到的初始点云进行初始化。
得到三维点云结构后,算法会将每个点云转换为3D Gaussian,以此为基础训练模型优化。
1.4 Adaptive Densification(自适应增密)
使用SfM算法初始化了一系列稀疏点之后,adaptive densification方法会动态调整3D Gaussians的数量和密度。
二、特点
3D高斯溅射实现了辐射场的实时渲染,质量好,且优化时间更短。这种性能的关键是新颖的 3D 高斯场景表示与实时可微渲染器相结合,这为场景优化和新颖的视图合成提供了显著的加速。对于与 InstantNGP 相当的训练时间,我们实现了与他们相似的质量;实现了最先进的质量,甚至比 Mip-NeRF360 略好 。
三、神经辐射场 (NeRF)
NeRF 是一种利用稀疏视角图像重建场景的 3 维表示的隐式学习技术,通过对场景的光照和颜色信息进行编码,实现高质量的 3 维重建和视角合成效果。输入为空间点的 3D 坐标和观察方向,输出是空间点的颜色和密度信息。
不足:
1.利用神经网络表达场景时需要大量的训练时间和渲染资源,无法实现实时渲染;
2.另一方面,采用隐式辐射场表达方式时很难对场景进行编辑,在一些对实时性要求很强的机器人应用中的发展受到极大的挑战与限制
四、3D GS 与 NeRF 对比
3D GS 技术的出现解决了 NeRF 技术训练和渲染速度慢的缺点,它使用 3D 高斯基元作为实时神经渲染的基元,可在不牺牲图像质量的情况下显着提高渲染速度。
NeRF通过优化一个MLP,并使用volumetric ray-marching方法实现了3D场景的隐式表示,但该方法要求costly训练和渲染才能得到较高质量的结果。
3D Gaussian Splatting的出现解决了NeRF的问题,并且同为Radiance Field,3D Gaussian实现了更快的训练和渲染并且能够保证渲染图象的质量(equal or better quality than the previous implicit radiance field approaches)。这个方法在某些数据集上实现了state-of-art质量(某领域最好的模型)的结果以及real-time rendering。
NeRF的特点就是,它是一个隐式表达的连续的空间,可以使用神经网络进行优化,但无法完全利用GPU进行rendering的加速;传统的使用三角形等Mesh(网格)进行的渲染,是显式的离散的空间,可以利用GPU的并行计算来加速渲染,但无法使用神经网络进行优化。而对于3DGS来说,单个3D Gaussian是连续的,可以使用神经网络优化,多个3D Gaussian可以利用GPU进行并行渲染,在两者之间有一个平衡。