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图像平面的过程,主要包括以下步骤:
-
投影变换:将3D高斯根据相机参数投影到2D图像平面。投影后的2D高斯协方差矩阵Σ'可表示为:
Σ' = JWΣW^TJ^T
其中J是投影变换的雅可比矩阵,W是视图变换矩阵 -
光栅化:对每个像素,收集所有重叠的2D高斯,按深度排序后,采用alpha混合公式计算最终颜色:
C = Σ(ci αi Π(1-αj))
其中ci是第i个高斯的颜色,αi是其不透明度,j遍历所有前面的高斯 -
梯度回传:渲染过程是完全可微分的,允许通过反向传播优化所有高斯参数
3DGS的完整技术流程
3DGS的实现包含一系列精心设计的步骤,从数据准备到最终渲染。下面我们将详细剖析3DGS的完整技术流程,帮助您理解这一技术如何从多视角图像重建出高质量的三维场景。
1. 数据预处理与相机标定
3DGS流程的第一步是场景数据的准备和相机参数的标定。这一阶段通常使用运动恢复结构(Structure from Motion, SfM)技术完成:
-
输入数据:一组从不同视角拍摄的场景图像(通常需要一定重叠度)
-
特征提取与匹配:检测图像中的特征点并在多视图间建立对应关系
-
稀疏重建:通过多视图几何计算相机参数(位置、朝向、内参)和稀疏3D点云
-
输出:校准后的相机参数和初始稀疏点云(如COLMAP格式)
这一步骤为后续的高斯初始化提供了几何基础和视角约束,对最终重建质量至关重要。相机标定的准确性直接影响3DGS的重建效果,因此在实际应用中常需要精心调整SfM参数或进行人工校验。
2. 3D高斯初始化
基于SfM输出的稀疏点云,3DGS开始构建初始的高斯表示:
-
高斯创建:为每个稀疏3D点创建一个初始高斯椭球
-
初始参数设置:
-
位置(μ):直接使用点云中的3D点坐标
-
协方差(Σ):初始化为各向同性小椭球(通常基于点云密度自动确定)
-
不透明度(α):初始设为中等值(如0.5)
-
颜色(c):从输入图像中采样对应点的颜色
-
球谐系数(SH):初始化为产生视角无关的基础颜色
-
初始高斯的数量通常与稀疏点云中的点数相同,但在后续优化过程中会通过自适应密度控制动态调整。
3. 可微分渲染与优化
初始化后,系统进入迭代优化阶段,通过可微分渲染不断调整高斯参数:
-
前向渲染:
-
对于每个训练视角,将3D高斯投影到图像平面
-
使用alpha混合光栅化生成预测图像
-
计算预测图像与真实图像之间的差异(L1、SSIM等损失)
-
-
反向传播:
-
通过可微分渲染管道回传梯度
-
更新高斯的位置、形状、颜色和不透明度等参数
-
采用类似Adam的优化器进行参数更新
-
-
自适应密度控制:
-
定期评估各高斯对最终渲染的贡献
-
移除不重要的高斯(透明度高或视角一致性差)
-
在重建不足的区域分裂高斯(将一个大高斯分裂为多个小高斯)
-
在过度重建的区域克隆高斯(复制并略微偏移)
-
这一阶段通常需要数万次迭代,但在现代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既能像传统点云一样直接操控,又能达到神经渲染的视觉质量,开辟了三维表示的新范式