3D Gaussian Splatting:显式高斯场表示
A. 本篇主题
本篇围绕 3D Gaussian Splatting(3DGS) 的基础表示与渲染机制。核心目标是阐明:3DGS 如何用一组离散的显式高斯分布完全替代 NeRF 的隐式 MLP 连续场表示;这些高斯如何投影到 2D 图像平面;以及基于投影的 splatting 渲染流程为何比 NeRF 的体渲染高效得多。本篇是笔记 04(训练优化)的基础,并为笔记 05-06(4D 扩展)提供表示框架。
B. 本篇在整条路线中的位置
笔记 02 的结尾指出:NeRF 改进路线的所有方法仍在”连续函数”范式内。从 Plenoxels 的体素化、TensoRF 的低秩分解到 Instant-NGP 的哈希编码,每一步都在加速或压缩表示,但没有从根本上改变”场景由连续函数定义”的设定。
3DGS 的核心洞察是:完全放弃 MLP,用离散的显式高斯分布替代连续场。高斯分布相比体素/哈希有更好的数学性质:协方差参数化天然支持 anisotropic anisotropy(各向异性),投影后仍是高斯分布,使得 GPU-friendly 的 tile-based splatting 成为可能。
本篇的结尾将指出 3DGS 处理动态场景的固有局限:每个高斯的时间属性是固定的,无法自然地表达随时间变化的场景。这为笔记 05(K-Planes 等时空分解方法)和笔记 06(4DGS)做了铺垫。
C. 数学建模
C.1 符号定义
| 符号 | 维度 | 含义 |
|---|---|---|
| 3D | 第 | |
| SPD | 第 | |
| 标量 | 第 | |
| 3D | 第 | |
| 3D 高斯 | 第 | |
| 旋转矩阵 | 视角旋转(从世界坐标系到相机坐标系) | |
| 平移向量 | 视角平移 | |
| 雅可比矩阵 | 透视投影的雅可比矩阵 | |
| 标量 | 3D 高斯函数值 | |
| 标量 | 2D 投影高斯函数值 |
C.2 3D 高斯的定义
场景表示为
每个高斯的概率密度函数:
协方差矩阵的参数化(保证 SPD 约束):
为保证协方差矩阵对称正定(SPD),使用缩放因子和旋转矩阵的参数化:
其中:
是缩放矩阵( ) 是旋转矩阵(使用四元数 参数化)
最终可学习的参数为:
C.3 颜色建模:球谐函数
视角相关外观(View-Dependent Appearance):
与 NeRF 类似,高斯颜色随观察方向变化。使用球谐函数(Spherical Harmonics, SH)表示:
是球谐函数基 是第 个高斯的球谐系数(共 个) - 论文用
(4 阶,共 16 个系数)
物理直觉:低阶球谐函数(
D. 详细推导
D.1 3D 高斯到 2D 的投影推导
目标:将 3D 高斯
步骤 1:坐标变换到视角坐标系
世界坐标系到相机坐标系的变换:
其中
步骤 2:透视投影的雅可比矩阵
透视投影函数
其中
一阶近似(足够小的高斯):投影的均值和协方差可通过雅可比线性传播:
其中
当使用归一化设备坐标(
步骤 3:2D 高斯函数
投影后的 2D 高斯密度函数:
注意:投影后仍是高斯分布,这是 3DGS 能够高效渲染的数学基础。
D.2 Splatting 的 alpha 合成推导
目标:将所有投影高斯合成到像素颜色
单高斯的贡献:
给定像素
注意:这里
排序(Sorting):
为实现正确的遮挡关系,按深度(沿相机主轴)排序高斯:
其中
Alpha 合成(从近到远):
像素颜色的最终计算:
其中
等价的紧凑形式:
其中
D.3 与 NeRF 体渲染方程的对应关系
3DGS 的 splatting 方程与 NeRF 的体渲染方程有完全相同的形式:
| NeRF 体渲染 | 3DGS Splatting |
|---|---|
| 采样点 | 投影高斯 |
关键区别:
- NeRF 用积分(沿光线连续采样),3DGS 用求和(有限高斯集合)
- NeRF 的
来自体积密度 和区间长度 ,3DGS 的 来自 3D 不透明度 和 2D 投影高斯值 - 3DGS 的高斯集合是显式且有限的,使得 GPU 并行化成为可能
E. 算法与渲染流程
E.1 渲染算法(Tile-Based Splatting)
为高效渲染,3DGS 使用基于 tile 的光栅化:
输入:高斯集合 {G_i},相机参数 (R, t, f),图像分辨率 (W, H)
输出:渲染图像 I
1. for each Gaussian G_i do
2. // 投影到 2D
3. μ_i' ← Project(μ_i, R, t, f)
4. Σ_i' ← J · R · Σ_i · R^T · J^T
5. // 计算 2D 不透明度
6. α_i'(u) ← α_i · G_i'(u) for all u in image
7. end for
8. // 按 tile 分组排序
9. for each 16×16 tile do
10. Gaussians_in_tile ← FilterGaussians(G, tile)
11. Sorted ← Sort(Gaussians_in_tile, by depth)
12. for each pixel in tile do
13. Ĉ ← AlphaBlend(Sorted, pixel)
14. I[u, v] ← Ĉ
15. end for
16. end for
17. return I
Tile-based 策略:将图像划分为 16×16 的 tiles,每个 tile 仅处理与之相交的高斯,避免了排序全部高斯的开销。
可见性排序:每个 tile 独立排序(深度排序),并行处理多个 tiles。
E.2 渲染的数学形式(批量版本)
对整个图像批量计算:
其中:
是输出图像 是第 个高斯在图像平面每个像素处的投影值( 排列成图像大小的矩阵) 是累积透射比
利用 GPU 的并行能力,这个求和可以高效地向量化计算。
F. 关键直觉
-
高斯投影后仍是高斯——这是整个方法的基础:3D 高斯
经仿射变换(旋转+投影)后仍保持高斯形式,使得 2D splatting 可精确计算而非近似。 -
不透明度与投影高斯值的乘积等价于 NeRF 的 alpha 合成:
中的 起着 NeRF 中区间长度 相似的作用,都是”该采样点占据像素面积的比例”。 -
显式有限集合使得 GPU 并行化成为可能:与 MLP 逐点查询不同,3DGS 的高斯集合是有限且显式的,投影+排序+splatting 可完全在 GPU 上批量执行。
-
协方差参数化支持各向异性:通过
,高斯可以是椭球形的(不是球形),这使得 3DGS 能精确表示不同尺度和朝向的场景元素。 -
排序建立遮挡关系:按深度排序后,alpha 合成自动实现正确的遮挡——前面的高斯先合成,
确保后面的高斯不受前面不透明高斯影响。
G. 局限性
-
高斯数量随场景复杂度线性增长:复杂场景需要数十万到数百万个高斯,内存和渲染压力增大。
-
无法表示薄结构或空洞:高斯是平滑的密度场,难以精确表示尖锐表面或带有空洞的复杂拓扑。
-
初始化敏感:随机初始化的效果差,通常依赖 SfM(运动恢复结构)点云初始化。
-
时间属性固定:每个高斯的参数(位置、协方差)在训练后固定,无法自然表达动态场景的时间演变。
-
训练时的 densification 需要启发式规则:何时分裂、如何分裂高斯需要手工设计规则,缺乏理论指导。
H. 与前后篇的衔接
本篇承接:笔记 02 的 Instant-NGP/TensoRF 等方法,它们已经暗示了”显式化”的方向,但仍在连续函数框架内。3DGS 完成了这个范式转变——从”离散化的连续场”到”完全显式的高斯集合”。
本篇引出:3DGS 的核心局限之一是无法处理动态场景——每个高斯的参数是静态的,没有时间维。这驱动了笔记 05 的 K-Planes/HexPlane 等时空分解方法,以及笔记 06 的 4DGS。
笔记 04 将深入 3DGS 的训练优化机制,包括初始化、densification、split、clone、prune 等操作的数学原理。
本篇必须记住的结论
-
3DGS 用有限显式高斯集合替代 NeRF 的 MLP 隐式连续场:场景表示为
,共 个高斯。 -
投影公式:
, ,投影后仍是高斯分布。 -
2D 不透明度贡献:
,其中 是 2D 投影高斯在像素处的密度值。 -
Splatting 渲染方程:
,其中 是累积透射比。 -
与 NeRF 体渲染的等价性:两者形式完全一致,但 3DGS 用有限高斯集合替代了连续积分,使 GPU 并行化成为可能。
参考文献
- Kerbl et al. “3D Gaussian Scattering for Real-Time Rendering of Radiance Fields” ACM TOG 2023
- Zwicker et al. “EWA Splatting” IEEE TVCG 2002(投影理论基础)
- Yellamanchilli et al. “Analysis of GPU-Based Interactive Splatting”(工程实现参考)