3D Gaussian Splatting

3D高斯溅射(3D Gaussian Splatting )是一种基于显式三维高斯分布的场景表示与渲染方法。与传统的三维重建技术(如多边形网格、点云或隐式神经辐射场NeRF)不同,3DGS将场景表示为大量带有属性的3D高斯椭球的集合,每个高斯椭球包含位置、形状(协方差矩阵)、颜色(球谐系数)和不透明度等信息。

3DGS的核心思想源自计算机图形学中的"溅射"(Splatting)技术,这是一种将离散的点数据转换为连续图像的方法。在3DGS中,每个3D高斯椭球被"溅射"到二维图像平面上,通过可微分的渲染流程生成最终的图像。这种方法结合了点云的直观性和神经渲染的高质量,同时克服了传统方法的诸多限制。

与传统方法相比,3DGS具有几个显著优势:

  • 渲染效率高:支持实时渲染(30FPS以上),比NeRF快数百至数千倍

  • 训练速度快:通常只需几分钟到几十分钟即可完成一个场景的训练

  • 显式表示:场景由明确的高斯椭球构成,便于编辑和控制

  • 高质量细节:能够捕捉场景的精细几何和复杂外观

什么是Splatting?

Splatting流程

选择雪球

为什么选择3D高斯椭球?

3d高斯为什么是椭球?

协方差矩阵?

  • μ表示高斯中心的位置(3D坐标)

  • Σ是协方差矩阵,控制高斯的形状和方向

  • x是空间中的任意点

各向同性和各向异性?

协方差矩阵如何控制椭球形状?

协方差矩阵为什么能用旋转和缩放矩阵表达?

A是旋转R乘以缩放S,已知协方差矩阵可以通过特征值分解来求R,S。

计算协方差矩阵代码

左边是CUDA代码,右边是用Python代码重写。mod是缩放,rot是旋转。协方差矩阵可以控制椭球形状,用旋转和缩放控制协方差矩阵

如何参数估计?

3D到像素

观测变换

投影变换

视口变换

光栅化

3D高斯的观测变换

3D高斯投影变换

均值可以正常变到NDC的坐标系因为他是一个数,但协方差矩阵不行。

雅可比矩阵

投影变换的雅可比矩阵

对高斯核中心做视口变换

高斯中心变换:

观测变换->投影变换->视口变换->光栅化

3D高斯球的颜色

合成图片

  • 不透明度(α):控制该高斯对最终图像的贡献程度

  • 球谐系数(SH):用于表示视角相关的颜色,支持复杂光照效果的建模

  • 颜色(c):基础颜色值

nerf

为什么3dgs更快

机器学习与参数评估

 

3DGS的渲染流程是将3D高斯投影到2D图像平面的过程,主要包括以下步骤:

  1. 投影变换:将3D高斯根据相机参数投影到2D图像平面。投影后的2D高斯协方差矩阵Σ'可表示为:
    Σ' = JWΣW^TJ^T
    其中J是投影变换的雅可比矩阵,W是视图变换矩阵

  2. 光栅化:对每个像素,收集所有重叠的2D高斯,按深度排序后,采用alpha混合公式计算最终颜色:
    C = Σ(ci αi Π(1-αj))
    其中ci是第i个高斯的颜色,αi是其不透明度,j遍历所有前面的高斯

  3. 梯度回传:渲染过程是完全可微分的,允许通过反向传播优化所有高斯参数

3DGS的完整技术流程

3DGS的实现包含一系列精心设计的步骤,从数据准备到最终渲染。下面我们将详细剖析3DGS的完整技术流程,帮助您理解这一技术如何从多视角图像重建出高质量的三维场景。

1. 数据预处理与相机标定

3DGS流程的第一步是场景数据的准备和相机参数的标定。这一阶段通常使用运动恢复结构(Structure from Motion, SfM)技术完成:

  • 输入数据:一组从不同视角拍摄的场景图像(通常需要一定重叠度)

  • 特征提取与匹配:检测图像中的特征点并在多视图间建立对应关系

  • 稀疏重建:通过多视图几何计算相机参数(位置、朝向、内参)和稀疏3D点云

  • 输出:校准后的相机参数和初始稀疏点云(如COLMAP格式)

这一步骤为后续的高斯初始化提供了几何基础视角约束,对最终重建质量至关重要。相机标定的准确性直接影响3DGS的重建效果,因此在实际应用中常需要精心调整SfM参数或进行人工校验。

2. 3D高斯初始化

基于SfM输出的稀疏点云,3DGS开始构建初始的高斯表示:

  • 高斯创建:为每个稀疏3D点创建一个初始高斯椭球

  • 初始参数设置

    • 位置(μ):直接使用点云中的3D点坐标

    • 协方差(Σ):初始化为各向同性小椭球(通常基于点云密度自动确定)

    • 不透明度(α):初始设为中等值(如0.5)

    • 颜色(c):从输入图像中采样对应点的颜色

    • 球谐系数(SH):初始化为产生视角无关的基础颜色

初始高斯的数量通常与稀疏点云中的点数相同,但在后续优化过程中会通过自适应密度控制动态调整。

3. 可微分渲染与优化

初始化后,系统进入迭代优化阶段,通过可微分渲染不断调整高斯参数:

  1. 前向渲染

    • 对于每个训练视角,将3D高斯投影到图像平面

    • 使用alpha混合光栅化生成预测图像

    • 计算预测图像与真实图像之间的差异(L1、SSIM等损失)

  2. 反向传播

    • 通过可微分渲染管道回传梯度

    • 更新高斯的位置、形状、颜色和不透明度等参数

    • 采用类似Adam的优化器进行参数更新

  3. 自适应密度控制

    • 定期评估各高斯对最终渲染的贡献

    • 移除不重要的高斯(透明度高或视角一致性差)

    • 在重建不足的区域分裂高斯(将一个大高斯分裂为多个小高斯)

    • 在过度重建的区域克隆高斯(复制并略微偏移)

这一阶段通常需要数万次迭代,但在现代GPU上只需几分钟到几十分钟即可完成。

4. 场景渲染与后处理

优化完成后,3DGS场景可以高效渲染新视角:

  • 实时渲染:使用优化后的高斯集合,任何新视角都可以通过GPU光栅化管道快速渲染

  • 抗锯齿处理:通过各向异性滤波或超采样减少边缘锯齿

  • 动态效果:支持运动模糊、景深等后处理效果

值得注意的是,3DGS的渲染不需要预先烘焙或复杂预处理,使得它特别适合交互式应用。

流程总结

3DGS的完整流程可以概括为:数据采集→相机标定→高斯初始化→可微分渲染优化→自适应密度控制→最终渲染。这一流程巧妙结合了传统多视图几何与现代可微分渲染技术,实现了高质量且高效的三维重建

3DGS的关键技术与创新点

3DGS之所以能够取得突破性进展,得益于其多项关键技术设计。这些创新点共同解决了传统三维表示和渲染中的诸多难题,使3DGS在质量、速度和灵活性方面都达到了新高度。

1. 自适应密度控制

自适应密度控制是3DGS最核心的创新之一,它动态调整场景中高斯点的分布和密度,以平衡重建质量和计算效率:

  • 高斯分裂:在重建不足的区域(如高频细节处),将大高斯分裂为多个小高斯,提升局部细节表现

  • 高斯克隆:在需要更多覆盖的区域(如边缘处),复制现有高斯并略微偏移,增强连续性

  • 高斯修剪:定期移除对渲染贡献小的高斯(透明度高于阈值或视角一致性差),提高存储和计算效率

这一机制使3DGS能够自动适应不同复杂度的场景区域,无需人工干预。与需要预设分辨率的网格或体素方法不同,3DGS的自适应密度控制使其在简单区域节省资源,在复杂区域增加容量。

2. 可微分高斯溅射渲染

3DGS设计了完全可微分的溅射渲染管道,这是实现端到端优化的关键:

  • 精确投影:将3D高斯准确投影到2D图像平面,保持几何一致性

  • 高效光栅化:利用现代GPU的并行计算能力,快速计算各像素受哪些高斯影响

  • Alpha混合:沿深度方向正确混合重叠高斯的颜色和不透明度

  • 梯度传播:精心设计的导数计算,确保梯度能够有效回传到所有高斯参数

与传统点云渲染不同,3DGS的溅射渲染考虑了高斯形状和视角变化,避免了空洞和走样问题。同时,其可微分特性使优化过程能够同时考虑几何和外观因素。

3. 基于球谐函数的视角相关外观

3DGS使用球谐函数(Spherical Harmonics, SH)建模视角相关的光照效果:

  • 低阶SH系数(通常2-3阶)表示基础颜色和简单光照变化

  • 高阶SH系数捕捉更复杂的光照变化和材质特性

  • 每个高斯存储一组SH系数,在渲染时根据视角方向计算实际颜色

这种方法使3DGS能够以相对紧凑的表示(相比存储所有可能视角的颜色)实现真实的视角相关效果,如镜面高光和漫反射变化。

4. 显式与隐式表示的融合

3DGS巧妙结合了显式和隐式表示的优势

  • 显式方面:高斯参数直接控制几何形状和空间分布,便于编辑和分析

  • 隐式方面:通过可微分渲染和优化,隐式地编码复杂外观和光照效果

  • 混合特性:自适应密度控制实现了类似隐式表示的连续适应性,同时保持显式表示的效率

这种融合使3DGS既能像传统点云一样直接操控,又能达到神经渲染的视觉质量,开辟了三维表示的新范式