K2E-B-G6-3 · Paper Note
3D Gaussian Splatting
- Description:3DGS 论文笔记 — 各向异性 3D 高斯显式表示 + 可微 tile 光栅化,1080p ≥ 30 FPS 实时渲染,质量达 SOTA;3DGS-SLAM 系列的基石
- My Notion Note ID:K2E-B-G6-3
- Created:2024-03-31
- Updated:2026-06-11
- License:转载欢迎:转载请注明作者 Yu Zhang 并附原文出处(yuzhang.io)
Table of Contents
- 1. Summary
- 2. Key Contributions
- 3. Method
- 4. Experiments & Results
- 5. Ablation & Discussion
- 6. Strengths / Limitations / Future Work
- 7. Code Walkthrough
- References
1. Summary
Title: 3D Gaussian Splatting for Real-Time Radiance Field Rendering Authors: Bernhard Kerbl, Georgios Kopanas, Thomas Leimkühler, George Drettakis (Inria / Max-Planck-Institut für Informatik) Paper: arXiv:2308.04079 (ACM ToG / SIGGRAPH 2023 Best Paper) Github: graphdeco-inria/gaussian-splatting
3DGS 用一组各向异性 3D 高斯表示辐射场,配合可微 tile 光栅化做渲染,实现1080p ≥ 30 FPS 实时新视角合成——同时质量对标或超过 Mip-NeRF360(Barron et al. 2022,针对无界 360° 室外场景的多尺度抗锯齿 NeRF,当时室外场景 SOTA)(室外场景 PSNR 27.21 vs 27.69 dB,但 SSIM/LPIPS 反超),训练 41 分钟,渲染帧率 134 FPS(vs Mip-NeRF360 的 0.06 FPS)。核心突破:把 NeRF 的隐式 MLP + 逐光线体渲染换成显式点云 + 光栅化,绕开了逐射线 MLP 查询的速度瓶颈。
高斯的三个核心属性——位置 、协方差 (旋转 × 缩放参数化,保证 PSD)、不透明度 + 球谐系数——均通过可微渲染管线联合优化。优化过程穿插自适应密度控制(欠重建区域克隆、过重建区域分裂、低不透明度剪枝),从 SfM(Structure from Motion,运动恢复结构,离线 COLMAP 等工具产出的稀疏点云)稀疏点云出发自动增密到足够细节。
3DGS 是 SplaTAM 等 3DGS-SLAM 的基石。相比 Instant-NGP(隐式哈希表),3DGS 是显式表示,渲染更快但内存占用更大(200–500 MB/场景 vs Mip-NeRF360 的 8.6 MB),且依赖 SfM 初始化。

2. Key Contributions
- 各向异性 3D 高斯表示:显式点云 + 旋转-缩放协方差参数化,永远合法 PSD,各向异性可拉长贴合表面/边缘
- 可微 tile 光栅化:屏幕分 16×16 tile,高斯按深度全局 radix 排序后并行 alpha 混合,梯度无限制反传;渲染速度 ~2000× 快于 Mip-NeRF360
- 自适应密度控制:克隆(欠重建)/ 分裂(过重建)/ 剪枝(低不透明度)的交错优化,从 SfM 稀疏点自动增密
- 联合优化框架:位置 / 协方差 / 不透明度 / SH 系数全部端到端可微,L1 + D-SSIM(SSIM 差异度量,= (1−SSIM)/2,值越小越相似)联合监督
3. Method
3.1 3D 高斯表示
场景 = 一组 3D 高斯,每个高斯(Eq. 4):
:均值(3D 位置);:3×3 协方差矩阵(决定形状/朝向)。
每个高斯的可学习属性:位置 、协方差 、不透明度 、球谐系数 SH(0–3 阶,视角相关颜色)。
3.2 协方差参数化
直接优化 会破坏半正定约束。3DGS 分解为旋转 × 缩放(Eq. 6):
:对角缩放矩阵(各向异性,3 个 scale 分量);:旋转矩阵(由四元数 导出)。优化 和 而非 → 任意参数组合都产生合法 PSD 矩阵。各向异性让高斯能拉成椭球贴合细长结构(草叶、发丝、边缘)。
3.3 投影到 2D(Splatting)
渲染时把 3D 高斯投影到图像平面(Eq. 5):
:视图变换(world → camera);:投影变换仿射近似的 Jacobian。 左上 子块 = 屏幕空间 2D 协方差,决定该高斯的椭圆 footprint。
3.4 可见性感知 Alpha 混合
每像素颜色 = 覆盖该像素的高斯按深度从前到后 alpha 混合(Eq. 3):
:第 个高斯在当前视角的颜色(SH 求值);(Eq. 2):不透明度 (学习参数)× 投影 2D 高斯在像素 处的值(由式 5 的 决定); 项为累积透射率。与 NeRF 离散体渲染 同源(),但改用显式高斯而非射线积分。
Tile-based 光栅化:
- 屏幕分 16×16 像素 tile
- 高斯按 64-bit 键(高 32 bit = tile ID,低 32 bit = 深度)做全局 radix 排序(CUB 库,一次排序,非逐像素)
- 每个 tile 并行处理 → 完全可微,梯度反传无限制(消融实验证明这一点极关键)
3.5 自适应密度控制
每 100 次迭代交错执行(warm-up 后):
- Clone(克隆):view-space 位置梯度 且高斯小 → 复制并沿梯度方向移动(补欠重建区域)
- Split(分裂):梯度 且高斯大()→ 替换成 2 个,scale 除以 (压制过重建区域)
- Prune(剪枝):不透明度 的高斯删除;过大或相机附近的高斯也删除
- 每 3000 步 reset ,强迫优化器重新评估,控制漂浮物 (floaters)
从 SfM 稀疏点云初始化(初始协方差 = 等向高斯,scale = 与最近 3 个 SfM 点的平均距离)。

3.6 损失函数
像素级 L1 + 结构相似性 (D-SSIM)。球谐系数 SH 按阶数渐进引入:前 1000 步只用 0 阶(颜色常量),之后每 1000 步加一阶,4 阶全开。
4. Experiments & Results
Mip-NeRF360 数据集(30K 迭代,真实室外场景)
| 方法 | PSNR ↑ | SSIM ↑ | LPIPS ↓ | 训练时间 | FPS |
|---|---|---|---|---|---|
| Mip-NeRF360 | 27.69 | 0.792 | 0.237 | ~48 h | 0.06 |
| Instant-NGP-Big | 25.59 | 0.699 | 0.331 | ~7.5 min | 9.43 |
| 3DGS (30K) | 27.21 | 0.815 | 0.214 | ~41.5 min | 134 |
PSNR 略低于 Mip-NeRF360,但 SSIM / LPIPS 反超,渲染帧率 2233× 快。
Tanks & Temples(30K 迭代)
3DGS 23.14 dB / SSIM 0.841;Mip-NeRF360 22.22 dB,154 FPS vs 0.14 FPS。
Deep Blending(30K 迭代)
3DGS 29.41 dB / SSIM 0.903;Mip-NeRF360 29.40 dB,近乎持平质量,137 FPS vs 0.09 FPS。
NeRF Synthetic(30K 迭代)
平均 PSNR 33.32 dB;Mip-NeRF 33.09 dB,Instant-NGP-Base 33.18 dB,三者相当。
5. Ablation & Discussion
Table 3 (PSNR 影响,Truck 场景为主):
| 去掉的组件 | PSNR 变化 | 说明 |
|---|---|---|
| SfM 初始化 → 随机点 | −~5.6 dB | 初始化很重要(Table 3 均值:Full 26.05 dB vs Random Init 20.42 dB) |
| 各向异性 → 等向协方差 | −~0.8 dB | 各向异性贴合几何 |
| Clone 密度控制 | −~0.1 dB | 贡献较小 |
| Split 密度控制 | −~2.2 dB | 背景大面积失真 |
| 梯度反传限制(仅前 10 个高斯) | −~11 dB | 最关键:24.81 → 13.84 dB |
| 球谐系数 | −~0.7 dB | 视角相关外观 |
梯度无限制反传是 3DGS 可微渲染的核心——限制到前 10 个高斯时质量崩塌,说明深层高斯的梯度信号对优化不可或缺。
6. Strengths / Limitations / Future Work
优势:
- 实时:134 FPS @ 1080p,Mip-NeRF360 的 2000×+
- 质量:SSIM / LPIPS 超过 Mip-NeRF360,PSNR 略低但视觉质量 on par
- 显式表示:可直接操纵单个高斯(移动、删除),比隐式 MLP 更直观
- 训练快:41 分钟 vs Mip-NeRF360 约 48 小时
局限:
- 内存大:典型场景 200–500 MB(Mip-NeRF360 仅 8.6 MB),百万级高斯
- 无几何约束:高斯可飘移到空中产生 floaters,拓扑不受控
- 依赖 SfM 初始化:无 SfM 点云时质量大幅下降(~5.6 dB,Table 3 均值)
- Popping 伪影:朴素深度排序 + guard band culling 导致视角切换时闪烁
- 高训练显存:原型实现 >20 GB(大场景),未优化
后续:
- 几何约束方向:2DGS(二维高斯贴面)、SuGaR(正则化高斯提取 mesh)
- 结构化:Scaffold-GS(锚点约束)
- SLAM 方向:SplaTAM 等 3DGS-SLAM;显式表示天然支持场景编辑和 map 更新
7. Code Walkthrough
仓库:graphdeco-inria/gaussian-splatting。PyTorch + 自定义 CUDA 光栅化(diff-gaussian-rasterization),SIBR viewer 做交互播放。
训练入口
python train.py -s <COLMAP 或 NeRF Synthetic 数据集路径>
# 主要参数:
# -m <输出目录> --iterations 30000
# --eval # 开启 train/test split
# --densify_until_iter 15000
关键文件
| 文件 | 作用 |
|---|---|
train.py |
主优化循环:高斯参数更新 + 密度控制调用 |
gaussian_renderer/__init__.py |
可微光栅化接口(调用 CUDA 扩展) |
scene/gaussian_model.py |
高斯参数存储 + 初始化 + clone/split/prune |
scene/__init__.py |
数据集加载(COLMAP / NeRF Synthetic) |
render.py |
加载 checkpoint,渲染测试视角 |
metrics.py |
计算 PSNR / SSIM / LPIPS |
关键超参默认值
| 参数 | 默认值 | 说明 |
|---|---|---|
--iterations |
30000 | 总训练步数 |
--densify_until_iter |
15000 | 密度控制截止步数 |
--densification_interval |
100 | 每 100 步做一次密度控制 |
--densify_grad_threshold () |
0.0002 | Clone/Split 触发阈值 |
--opacity_reset_interval |
3000 | reset 周期 |
--lambda_dssim () |
0.2 | D-SSIM loss 权重 |
--sh_degree |
3 | 球谐最高阶(对应 4 阶带) |
--position_lr_init |
0.00016 | 位置学习率,代码默认值(指数衰减到 0.0000016);论文仅述采用类 Plenoxels 指数衰减调度,未给出具体数值 |
Paper vs Code
- Paper 描述 SH 渐进引入(每 1000 步加一阶);代码在
train.py的oneupSHdegree()调用实现,完全一致 - Paper 描述 warm-up 用 4× 降采样(250 / 500 步升分辨率);代码可选,非默认开启
--antialiasing/--exposure_lr_init等现代特性为 paper 后增补,原论文实验不含
References
- Kerbl, B., Kopanas, G., Leimkühler, T., & Drettakis, G. (2023). 3D Gaussian Splatting for Real-Time Radiance Field Rendering. ACM ToG (SIGGRAPH). arXiv:2308.04079 — 论文
- graphdeco-inria/gaussian-splatting:官方代码
- 项目页:repo-sam.inria.fr/fungraph/3d-gaussian-splatting
- NeRF 体渲染基础:NeRF 笔记
- Instant-NGP(速度对比基准):Instant-NGP 笔记
- 3DGS-SLAM 衍生:SplaTAM