Zhytou

Zhytou

May the force be with me.

17 Jul 2026

3D Gaussian Splatting

3DGS

3D高斯溅射(3D Gaussian Splatting,3DGS)是一种新兴的三维场景表示与渲染技术。它通过将场景建模为由大量高斯椭球粒子组成的粒子云,并利用球谐函数(Spherical Harmonics, SH)来编码光照信息,实现了高效、真实感的三维渲染。

本章将详细介绍 3DGS 的数学定义、几何性质、渲染管线以及其在动态场景和生成式任务中的应用。希望通过本章,能够理解下列问题:

  • 什么是splatting?
  • 训练时如何进行参数估计?
  • 为什么3d gassiaan是椭球?
  • 协方差矩阵为什么可以控制椭球的形状?
  • 协方差矩阵如何使用选择和缩放表示?
  • 为什么引入球谐函数?
  • 泼溅在CG中早就存在,为什么3DGS重新提出了就获得了广泛的关注,它相比普通的CG渲染技术有什么优势?
  • 使用3DG粒子表达场景和点云有什么区别,和隐士场等技术有什么不同?

3D Gaussian Distribution

3D高斯分布描述了一个随机变量的在三维空间中的概率分布。其概率密度函数数学表达式为:

$$G(x) = \exp \left( -\frac{1}{2} (x - \mu)^T \Sigma^{-1} (x - \mu) \right)$$

  • $x$:三维空间中的任意坐标点。
  • $\mu$:高斯分布的均值(Mean),直接对应高斯球在三维空间中的中心位置。
  • $\Sigma$:协方差矩阵(Covariance Matrix),它决定了高斯球在三维空间中的几何形态。

协方差矩阵:

对于任意三维随机向量 $x = [x_1, x_2, x_3]^T$,其协方差矩阵 $\Sigma$ 定义为:

$$\Sigma = E \left[ (x - E(x))(x - E(x))^T \right]$$

将 $\Sigma$ 展开后,可得到:

$$\Sigma = \begin{bmatrix} \text{Var}(X_1) & \text{Cov}(X_1, X_2) & \text{Cov}(X_1, X_3) \ \text{Cov}(X_1, X_2) & \text{Var}(X_2) & \text{Cov}(X_2, X_3) \ \text{Cov}(X_1, X_3) & \text{Cov}(X_2, X_3) & \text{Var}(X_3) \end{bmatrix}$$

可见,协方差矩阵是一个 $3 \times 3$ 、包含 6 个自由度的对称矩阵。

几何形态与等高线:

当概率相同时,3D 高斯函数的等高线在空间中表现为一个椭球体,而其协方差矩阵则决定了该椭球的形状和方向。具体而言:

  • 对角线元素:决定了椭球在各个坐标轴方向上的拉伸程度。
  • 非对角线元素:决定了椭球在空间中的倾斜和旋转角度。

Spherical Harmonics

高斯分布及其协方差矩阵主要解决的是场景的几何与体积表示问题,它决定了每个基元位于何处、呈何种椭球形态,以及沿视线方向能贡献多少不透明度。然而,仅凭几何信息还不足以合成逼真的图像,因为真实场景中的表面外观往往随观察方向变化,例如金属高光、镜面反射和各向异性材质都会呈现出明显的视角依赖性。

为此,3DGS 为每个高斯附加一组球谐函数(Spherical Harmonics, SH)系数,将颜色建模为观察方向的函数。球谐函数提供了一组定义在球面上的正交基,能够用有限阶数的系数紧凑地逼近任意方向上的辐射率分布。渲染时,根据当前像素对应的视线方向查询球谐展开,即可得到该高斯在该视角下的颜色贡献。

Training

3DGS 的训练本质上是多视角图像监督下的可微渲染优化:给定相机位姿和初始高斯集合,不断把 3D 高斯投影渲染成图像,再与真实图像比较,通过反向传播更新每个高斯的参数。

训练初始化:

训练所需的相机位姿和初始高斯集合通常通过传统的 SfM(Structure from Motion)方法(如 COLMAP)预先估计得到。

其中,SfM 通过 SIFT 等算子计算图片中特征点,并分析多张图像之间的特征点匹配,恢复出相机的外参(位置和朝向)以及场景中稀疏的三维点云。

损失函数:

为了衡量渲染图像与真实图像之间的差距,3DGS 采用了一种混合损失函数,通常由 L1 损失和结构相似性损失(D-SSIM)加权组合而成:

$$\mathcal{L} = (1 - \lambda) \mathcal{L}1 + \lambda \mathcal{L}{\text{D-SSIM}}$$

其中, $\mathcal{L}1$ 由模型预测图像结果与真实图像间的均方误差构成, $\mathcal{L}{\text{D-SSIM}}$ 则一般由亮度、对比度、结构等指标组成。

优化策略:

在梯度下降优化过程中,如果直接优化 $\Sigma$ 的分量,很难保证其数学上始终保持半正定性。为了优雅地解决这个问题,3DGS 巧妙地将协方差矩阵 $\Sigma$ 拆解为缩放矩阵 $S$ 和旋转矩阵 $R$ 的乘积:

$$\Sigma = R S S^T R^T$$

其中, $S$ 由缩放系数构成对角矩阵,$R$ 由四元数转化而来。这既保证了矩阵恒为半正定,又将优化自由度完美控制在 6 个参数内。

换句话说,损失函数计算完成后,梯度会通过可微光栅化回传,更新每个高斯粒子的参数,具体包括:

  • 位置 $\mu$
  • 旋转四元数 $q$
  • 缩放向量 $s$
  • 不透明度 $\alpha$($ G(x) $的幅度)
  • 球谐函数系数

此外,在训练过程中还伴随着自适应密度控制(Adaptive Density Control):定期对几何欠拟合的区域进行分裂(Split)或克隆(Clone),并对贡献过低或透明度极高的冗余高斯进行剪枝(Pruning),从而动态优化场景的粒子分布。

Rendering Pipeline

本质上,3DGS 将场景特化成由大量高斯椭球组成的粒子云。由于它不具备明确的二维拓扑表面,无法像传统 Mesh 渲染那样在光线与表面的交点处利用 PBR 材质信息直接计算光照颜色,因此必须采用体渲染的方式合成图像。

事实上,除了基于 Mesh 的传统渲染管线外,大多数非网格形式的空间表达,如点云、体素网格和神经隐式场等,也都依赖体渲染框架:它们不再寻找单一的命中点,而是沿视线路径对介质的发射与遮挡进行连续积分或离散累积,从而得到最终的像素颜色。

体渲染:

对于任意一条从相机出发的光线,它在介质中前进时,总是会被介质吸收或散射。因此,相机最终接收到的光线总是沿途能量累积的结果,也即:

$$C = \int_{t_n}^{t_f} T(t) \cdot \sigma(t) \cdot c(t) , dt$$

  • $c(t)$:在位置 $t$ 处的光照/颜色。
  • $\sigma(t)$:体密度(Density / Extinction coefficient),表示光线在该点被阻挡或吸收的概率。
  • $T(t)$:透射率(Transmittance),表示光线从起点 $t_n$ 毫无阻碍地穿透到当前位置 $t$ 的概率,其定义为沿着路径密度的累积指数衰减:

$$T(t) = \exp \left( -\int_{t_n}^{t} \sigma(s) , ds \right)$$

在 3DGS 的具体实现中,体密度由高斯粒子的不透明度 $\alpha$ 与该位置的概率密度一起决定,也即有效不透明度。而光照/颜色则由球谐函数系数计算得到。具体而言,其计算公式如下:

$$C = \sum_{i=1}^{n} c_i \alpha_i \prod_{j=1}^{i-1} (1 - \alpha_j)$$

当累积的不透明度饱和时,透射率 $T$ 归零,光线被完全挡住,从而在宏观上表现出实体物体的硬表面效果。

雅可比近似仿射投影:

由于透视投影是一个非线性变换,直接将三维高斯的协方差矩阵 $\Sigma$ 投影到二维屏幕上无法保持高斯特性。为了在投影后依然保留高斯的数学闭包性并支持端到端可微分,3DGS 采用了一种基于泰勒展开一阶近似(雅可比矩阵 $J$)的仿射近似方法:

  • 视变换(View Transformation):将三维高斯的中心 $\mu$ 和协方差矩阵 $\Sigma$ 通过相机视变换矩阵 $W$ 变换到相机坐标系下。
  • 雅可比线性化投影:利用透视投影在中心点处的导数矩阵(即雅可比矩阵 $J$),将局部的三维空间变化线性映射到屏幕坐标系。
  • 2D 协方差矩阵公式:$$\Sigma' = J W \Sigma W^T J^T$$通过该公式,三维空间中的 $3 \times 3$ 协方差矩阵 $\Sigma$ 被精确地投影并压扁为屏幕上的 $2 \times 2$ 协方差矩阵 $\Sigma'$。这个矩阵直接决定了高斯斑块在二维屏幕上的椭圆形态、长短轴及旋转方向。

分块装箱与逐像素渲染:

为了高效处理数百万个高斯粒子的渲染,3DGS 采用了一种“粗筛-精测”的管线设计:

  • 分块装箱(Tile-based Binning,粗筛):屏幕被划分为 $16 \times 16$ 像素的小方块(Tile)。根据 2D 协方差矩阵 $\Sigma'$ 计算出高斯的 2D 轴对齐包围盒(AABB),检查其与哪些 Tile 相交。相交的高斯被分发到对应 Tile 的待处理队列中,并利用 GPU 并行算法(如 Radix Sort)按到相机的深度进行超高速排序。
  • 逐像素渲染与自适应截断(Per-pixel Evaluation,精测):在像素着色阶段,每个线程负责一个屏幕像素。像素坐标 $x'$ 被直接代入对应的 2D 高斯方程中:

Dynamic 3DGS

4DGS

针对运动场景,通过引入时间维度 $t$ 或轻量级的变形网络(Deformation Network),预测高斯球随时间或动作的位移与形变,实现对动态现实世界的时空重建。

Relightable 3DGS

可重打光 3DGS (Relightable 3DGS):痛点:标准 3DGS 将光影和材质死死锁死在 SH 系数中,无法更换环境光源。解法:剥离纯 SH 颜色,让高斯球显式存储 PBR 材质属性(Albedo 固有色、Roughness 粗糙度、Normal 法线),并引入环境光贴图或显式光源,重新启用完整的物理光照积分(入射光 $L_{in} \times$ BRDF $f_r \times$ 余弦项 $\cos\theta$)。

Generative 3DGS

DreamGaussian

FeedforwardGaussian

摆脱对“实景拍照 + 漫长训练”的依赖,实现从文字或单张图片“凭空生成” 3D 资产:

优化式路线(如 ):

原理:利用预训练的 2D 扩散模型作为“裁判(SDS 损失)”,在几分钟内通过梯度下降从无到有“优化”出 3DGS 模型,最终可提取出高质量的 Mesh 资产。

特点:无需 3D 数据集,但单次生成需要一定优化时间。

前馈式路线(如 LGM / pixelSplat):

原理:基于 Transformer 大模型,输入图像后通过单次前向推理(One-shot),在秒级内直接预测输出整个场景的 3DGS 参数。

特点:速度极快(毫秒级),依赖海量高质量 3D 资产数据集进行预训练。