Skip to content

3D 高斯溅射重建技术

3D Gaussian Splatting(3DGS)是 2023 年最具影响力的 3D 重建技术,用 3D 高斯函数替代 NeRF 的隐式神经表示,实现了从照片到实时可渲染 3D 场景的重建,训练速度和渲染效率均大幅超越 NeRF。

3D高斯溅射示意

核心思想

3DGS 用大量 3D 高斯椭球体显式表示场景:

每个高斯由以下参数定义:

  • 位置 μ:3D 空间中心点
  • 协方差 Σ:3×3 协方差矩阵,控制椭球形状和朝向
  • 不透明度 α:透明度
  • 球谐系数 SH:视角相关颜色的球谐函数表示
python
import torch

class GaussianSplat:
    """单个 3D 高斯表示"""
    def __init__(self, num_gaussians=100000):
        self.means = torch.randn(num_gaussians, 3)  # 位置
        self.scales = torch.randn(num_gaussians, 3)  # 缩放
        self.rotations = torch.randn(num_gaussians, 4)  # 四元数旋转
        self.opacities = torch.sigmoid(torch.randn(num_gaussians))  # 不透明度
        self.sh_coefficients = torch.randn(num_gaussians, 16, 3)  # 球谐系数

    def compute_covariance(self):
        """从缩放和旋转计算协方差矩阵"""
        # 四元数转旋转矩阵
        R = quaternion_to_matrix(self.rotations)  # [N, 3, 3]
        S = torch.diag_embed(torch.exp(self.scales))  # [N, 3, 3]
        # Σ = R S S^T R^T
        RS = torch.bmm(R, S)
        cov = torch.bmm(RS, RS.transpose(1, 2))
        return cov

    def render(self, viewpoint_camera):
        """从指定视角渲染"""
        # 1. 投影到 2D
        # 2. 排序(按深度)
        # 3. Alpha 混合
        pass

渲染管线

3DGS 的渲染过程包括:

  1. 投影:将 3D 高斯投影到 2D 屏幕空间
  2. 排序:按深度对高斯排序(从远到近)
  3. 分块:将屏幕划分为 16×16 的 tile
  4. Alpha 混合:在每个 tile 内按深度顺序混合颜色

实时渲染

3DGS 的渲染速度可达 100+ FPS(1080p),比 NeRF 快 2-3 个数量级,使其适用于实时 VR/AR 应用。关键优化包括 tile-based 渲染和自定义 CUDA 核函数。

自适应密度控制

训练过程中,3DGS 动态调整高斯数量:

  • 分裂(Split):梯度大的高斯分裂为两个小高斯
  • 克隆(Clone):梯度大但尺度小的高斯复制一个
  • 删除(Prune):删除不透明度极低的高斯
  • 重置:周期性重置不透明度,避免冗余

与 NeRF 的对比

特性NeRF3D Gaussian Splatting
场景表示隐式(MLP)显式(高斯集合)
训练时间小时级分钟级(~10min)
渲染速度秒级实时(100+ FPS)
编辑能力困难直观(操作高斯)
存储开销小(MLP 权重)大(百万高斯参数)

后续工作

  • 4D Gaussian Splatting:动态场景重建
  • Gaussian Grouping:语义分割与编辑
  • SuGaR:提取网格表面
  • GS-LRM:前馈式大规模重建

存储开销

3DGS 的主要缺点是存储开销大,一个场景可能需要数百万个高斯,占用数百 MB 空间。压缩方法如 Compact3DGS 正在解决此问题。

相关资源

最近更新