3D Gaussian Splatting:实时逼真辐射场渲染

FreeGuideOnline 最新 2026-06-20

3D 高斯泼溅:从场景到像素的实时辐射场渲染

3D 高斯泼溅 (3D Gaussian Splatting, 3DGS) 是一种全新的三维场景表示与视图合成技术,能够在消费级硬件上以实时帧率生成逼真的新视角图像。它巧妙地结合了可微渲染、基于点的图形学与稀疏体素的优化策略,将场景表达为一组各向异性的三维高斯椭球体,并通过快速的差异化泼溅渲染实现高质量的新视图合成。本教程将从零开始,系统深入地讲解 3DGS 的核心原理、渲染管线及训练技巧,帮助你彻底理解这一革命性方法。

为什么需要 3D 高斯泼溅?

传统的神经辐射场 (NeRF) 虽然能生成极为逼真的图像,但其基于多层感知机 (MLP) 的查询方式导致渲染极慢,通常需要数秒钟才能生成一帧。后续加速方法如 Instant-NGP 虽然大幅提升了训练与推理速度,但仍难以在移动设备上达到实时交互。3DGS 从根本表示上做出了改变:

  • 显式点基元表示:场景由数百万个带有颜色和不透明度的 3D 高斯椭球直接表示,无需神经网络查询颜色和密度。
  • 可微泼溅渲染:将 3D 高斯投影到图像平面后,以类点精灵的方式进行混合,整个过程完全可微。
  • 原生实时性能:通过高度优化的 CUDA 光栅化器,可在 1080p 分辨率下实现 ≥30 FPS 的实时渲染。

简而言之,3DGS 保留了 NeRF 类方法的高逼真度,同时获得了传统点云渲染的效率,真正做到了“图像质量”与“渲染速度”的极致平衡。

核心表示:各向异性 3D 高斯

3DGS 将场景建模为一组 3D 高斯椭球。每个高斯 $i$ 由以下参数完整定义:

  • 中心位置 $\mu_i \in \mathbb{R}^3$:椭球的空间位置。
  • 协方差矩阵 $\Sigma_i \in \mathbb{R}^{3\times3}$:决定椭球的形状、大小和方向。为保证半正定性,实际分解为缩放向量 $s_i \in \mathbb{R}^3$ 和旋转四元数 $q_i \in \mathbb{R}^4$,协方差计算为 $\Sigma = R S S^T R^T$,其中 $R$ 为四元数构造的旋转矩阵,$S = \operatorname{diag}(s)$。
  • 颜色 $c_i$:为了表达视角相关外观,使用球谐函数 (SH) 系数表示方向相关的辐射度。通常采用三阶球谐 (共 16 个系数 per RGB 通道)。
  • 不透明度 $\alpha_i \in [0,1]$:控制高斯在投影混合时的贡献权重。

这种表示具有极强的几何表达能力:平滑的椭球可以自然地表征无界、软边界的三维结构,且参数量仅相当于稀疏点云属性,便于存储和梯度优化。

泼溅渲染管线

从 3D 高斯到屏幕像素的渲染过程称为泼溅。关键在于将三维高斯投影到二维,并利用快速可微光栅化合成图像。

1. 3D 到 2D 的投影

对于给定相机视角,一个 3D 高斯的中心 $\mu$ 按照标准透视投影变换得到图像坐标。更重要的是协方差矩阵的投影,它近似表达为: $$ \Sigma' = J W \Sigma W^T J^T $$ 其中 $W$ 是观察变换矩阵(世界到相机),$J$ 是投影变换的雅可比矩阵 (仿射近似)。$\Sigma'$ 是一个 $2\times2$ 的矩阵,描述了高斯在屏幕上的二维椭球分布。

2. 基于点片的合成

每个投影到屏幕的 2D 高斯会在其影响区域内对像素产生贡献。对于像素位置 $x$,该高斯的贡献权重为: $$ g(x) = \exp\left(-\frac{1}{2} (x-\mu')^T {\Sigma'}^{-1} (x-\mu')\right) $$ 结合该高斯的学得不透明度 $\alpha_i$ 以及球谐计算的颜色 $c_i$,我们对所有投影到该像素的高斯按深度顺序进行 alpha 混合: $$ C = \sum_{i=1}^{N} c_i \alpha_i' \prod_{j=1}^{i-1} (1 - \alpha_j') $$ 其中 $\alpha_i' = \alpha_i \cdot g(x)$。这与 NeRF 中的体渲染公式高度一致,但这里混合的是显式基元而非逐点采样。

3. 快速可微光栅化

区别于传统逐像素遍历,3DGS 采用基于 tile 的光栅化策略:将图像划分为 $16\times16$ 的块,对每个块收集与其有交叠的高斯,然后对块内像素进行并行混合。通过这种精细的负载均衡和 GPU 原生排序,实现了交互级帧率的正向与反向传播。梯度可以从最终的像素误差一路回传给位置、协方差、颜色和不透明度。

优化策略:从稀疏点云到细致场景

训练开始时,我们通常使用运动恢复结构 (SfM) 生成的稀疏点云作为高斯中心的初始化。优化过程交替进行渲染与参数更新,并动态调整高斯的分布密度。

损失函数

采用 L1 损失与可微结构相似性 loss (D-SSIM) 的加权组合: $$ \mathcal{L} = (1 - \lambda) \mathcal{L}1 + \lambda \mathcal{L}{\text{D-SSIM}} $$ 一般取 $\lambda=0.2$。L1 损失保障像素级准确性,D-SSIM 提升视觉结构一致性。

自适应高斯密度控制

这是 3DGS 最具特色的机制,在优化周期中根据梯度幅值决定高斯的“克隆”与“分裂”:

  • 过小高斯:若某些高斯的缩放过大且视图空间位置梯度超过阈值,说明该区域重建不足,会对其进行克隆 (clone),得到一个小号复制品,放置在相同位置继续细化细节。
  • 过大高斯:若某些高斯的梯度大但缩放已经很小,意味着它覆盖了过多的精细结构,此时会分裂 (split) 成两个更小的高斯,并适当调整位置,从而增加局部表达能力。

除此以外,还会定期执行不透明度重置整体剪枝:剔除不透明度极低或世界空间体积过大的高斯,保持基元总数可控,同时避免浮点伪影。

此流程通常在约 30,000 次迭代内收敛,产出的高斯数量从几千增加到几百万,实现了从稀疏到稠密的自动精细化。

实时性能背后的工程技巧

3DGS 的实时渲染并非仅仅依赖原理,其 CUDA 实现包含多项关键加速:

  • 视锥剔除与 tile 分类:仅保留落在视锥内可见的高斯,并快速将高斯分配给它们覆盖的图像块。
  • 基于 GPU 基数排序的深度排序:每个 tile 内的高斯必须按深度排列才能正确混合,采用极快的并行排序算法而非全局排序,大幅降低开销。
  • 紧凑内存布局与共享内存利用:高斯数据被组织为连续数组,在 tile 处理时批量加载到共享内存,最大化带宽。

这些技巧使得 3DGS 在包含数百万个高斯的复杂场景中仍可达到 100+ FPS (取决于分辨率与 GPU)。

应用与局限性

当前 3DGS 已被广泛应用于:

  • 实时虚拟现实/增强现实:场景捕获后即可自由漫游。
  • 游戏与电影资产生成:从真实视频重建可渲染的 3D 环境。
  • 动态场景建模:扩展到 4D 高斯泼溅可处理运动物体。

但其局限性也应知晓:

  • 极细几何与镜面反射:高斯基元难以完美表示尖锐边界和高光细节,可能产生模糊。
  • 存储开销:场景通常需要数百兆到数 GB 的存储,对移动端不友好。
  • 多视图一致性:在高斯数量不足的区域可能出现裂缝或闪烁。
  • 训练数据依赖:仍需要较精确的 SfM 位姿,且对大幅无纹理区域重建较差。

总结

3D 高斯泼溅以其显式、可微、高度并行化的场景表示,开创了实时辐射场渲染的新范式。通过 3D 高斯椭球模型、泼溅光栅化与自适应密度控制,它在图像质量和渲染速度上达到了空前的平衡。深入理解其表示、投影、混合及优化过程,是掌握这项技术并将其应用于实际项目的基础。建议结合官方开源的 CUDA 实现代码,阅读其光栅化与优化循环的具体细节,以便获得更深刻的理解。