-- 阅读
2474 字
12 分钟
三维高斯溅射(3DGS)完全教程
三维高斯溅射(3DGS)完全教程
面向零基础程序员的系统性学习路径:从直觉理解到工程实践
前言
本教程面向具备编程基础的本科毕业生,不要求任何三维视觉或图形学背景。 你将从”新场景重建是什么”出发,逐步理解 3DGS 的数学原理、训练流程与工程实践, 读完后能够独立训练模型、定制优化、参与前沿改进。
阅读建议:顺序阅读,每章末有小结与思考题;公式可跳过初读,二刷时重点推敲。
目录
第一章:三维重建是什么,为什么重要
| 节 | 标题 | 要点 |
|---|---|---|
| 1.1 | 从一张照片说起 | 人眼如何感知三维;照片丢失了什么信息 |
| 1.2 | 三维重建的定义与目标 | 输入/输出是什么;评价指标 PSNR / SSIM / LPIPS |
| 1.3 | 主流技术路线全景 | MVS、NeRF、3DGS 的横向对比;各自适用场景 |
| 1.4 | 3DGS 能做什么,不能做什么 | 典型应用案例;已知局限性 |
| 1.5 | 学习路线与本教程结构 | 如何使用本教程;推荐配套读物 |
第二章:视觉基础——相机、投影与点云
| 节 | 标题 | 要点 |
|---|---|---|
| 2.1 | 针孔相机模型 | 内参矩阵 ;焦距、主点、像素坐标 |
| 2.2 | 相机外参与世界坐标系 | 旋转矩阵 、平移向量 ;坐标变换链 |
| 2.3 | 齐次坐标与投影矩阵 | 为什么用齐次坐标;完整投影公式 |
| 2.4 | 畸变模型 | 径向畸变、切向畸变;实际标定流程 |
| 2.5 | 点云是什么 | 从立体视觉到稀疏点云;SfM 的直觉解释 |
| 2.6 | COLMAP 实战入门 | 安装、运行、读取结果;为 3DGS 准备输入 |
第三章:高斯函数与概率基础
| 节 | 标题 | 要点 |
|---|---|---|
| 3.1 | 一维高斯函数的几何直觉 | 均值、方差、面积归一化 |
| 3.2 | 多维高斯分布 | 协方差矩阵的几何意义;椭球体可视化 |
| 3.3 | 协方差矩阵的分解 | ;旋转与缩放的解耦 |
| 3.4 | 为什么选高斯作为场景基元 | 可微性;闭合解析投影;连续可导的优化目标 |
| 3.5 | 高斯的加法与混合 | 多个高斯叠加;Gaussian Mixture Model 直觉 |
第四章:球谐函数与外观建模
| 节 | 标题 | 要点 |
|---|---|---|
| 4.1 | 颜色与方向的关系 | 镜面反射、漫反射;非朗伯体表面 |
| 4.2 | 球谐函数是什么 | 在球面上的”傅里叶基”;阶数与频率的对应 |
| 4.3 | 球谐函数的数学定义 | 实数形式 ;前四阶系数数量 |
| 4.4 | 用球谐函数表示颜色 | RGB 各通道独立展开;视角相关颜色的计算 |
| 4.5 | 阶数对质量与开销的影响 | 0阶=常色;3阶的工程折衷 |
第五章:体渲染与 Alpha 合成
| 节 | 标题 | 要点 |
|---|---|---|
| 5.1 | 体渲染方程的直觉推导 | 光线穿过介质;透射率 ;吸收与散射 |
| 5.2 | 离散近似:Alpha 合成 | 前向 -blending 公式;顺序敏感性 |
| 5.3 | NeRF 的体渲染实现 | 采样点、权重计算;体渲染瓶颈 |
| 5.4 | 3DGS 的渲染公式推导 | 每个高斯的贡献;深度排序 tile-based rasterizer |
| 5.5 | 可微渲染的意义 | 反向传播到场景参数;梯度信号的流向 |
第六章:3DGS 核心算法详解
| 节 | 标题 | 要点 |
|---|---|---|
| 6.1 | 整体架构一览 | 输入→SfM→初始化→训练→渲染;数据流图 |
| 6.2 | 高斯基元的完整参数定义 | 位置 、协方差 、不透明度 、球谐系数 |
| 6.3 | 三维高斯投影到二维 | 雅可比近似推导;二维协方差计算 |
| 6.4 | Tile-based 光栅化 | 屏幕分块;排序;并行渲染原理 |
| 6.5 | 自适应密度控制(ADC) | 克隆、分裂、剪枝的触发条件与效果 |
| 6.6 | 损失函数设计 | + D-SSIM;各项权重的意义 |
| 6.7 | 训练超参数解读 | 学习率调度;迭代步数;指数衰减策略 |
第七章:从原始论文到开源代码
| 节 | 标题 | 要点 |
|---|---|---|
| 7.1 | 论文精读:原版 3DGS(2023) | Kerbl et al. 核心贡献;与 NeRF 的关键差异 |
| 7.2 | 代码仓库结构导览 | 文件树;各模块职责;CUDA 扩展的边界 |
| 7.3 | 训练脚本逐行解读 | train.py 主循环;关键 API 调用 |
| 7.4 | 渲染脚本与评估 | render.py;metrics.py;如何解读指标 |
| 7.5 | 常见报错与排查手册 | CUDA OOM;COLMAP 失败;点云为空等 |
第八章:数据准备与训练实战
| 节 | 标题 | 要点 |
|---|---|---|
| 8.1 | 硬件与环境配置 | GPU 显存需求;CUDA 版本;Docker 镜像 |
| 8.2 | 公开数据集下载与使用 | Tanks and Temples;Mip-NeRF 360;BlendedMVS |
| 8.3 | 用自己的视频训练 | 视频抽帧;COLMAP 流程;质量检查 |
| 8.4 | 训练参数精调指南 | 不同场景的推荐配置;快速实验策略 |
| 8.5 | 可视化与结果分析 | SIBR Viewer 使用;用 Python 渲染轨迹 |
| 8.6 | 导出与部署 | PLY 格式;WebGL 实时渲染;移动端适配 |
第九章:主流改进方向与前沿论文
| 节 | 标题 | 要点 |
|---|---|---|
| 9.1 | 压缩与轻量化 | Compact 3DGS;LightGaussian;Mini-Splatting(2024,极限压缩至原始点数的 0.2%);存储瓶颈分析 |
| 9.2 | 动态场景与视频 | 4D Gaussians;Deformable 3DGS;SplatFields(2024,神经变形场与 3DGS 融合);时序建模范式对比 |
| 9.3 | 大场景与城市级重建 | VastGaussian;CityGaussian;GaussianWorld(2025,开放世界可扩展场景表示);分块与流式训练策略 |
| 9.4 | 文本/图像驱动生成 | GaussianDreamer;DreamGaussian;结合扩散模型的零样本重建 |
| 9.5 | 物理模拟与编辑 | PhysGaussian;可交互场景;刚体软体模拟;GaussianOccupancy(2024,占用场与高斯融合用于物理感知) |
| 9.6 | 结构化与稀疏表示 | Scaffold-GS(2024,锚点驱动的神经高斯,显著降低冗余基元数量);层次化场景表示 |
| 9.7 | 平面基元与几何改进 | 2DGS(2024,用二维圆盘替代三维椭球,改善表面几何精度);几何感知密度控制 |
| 9.8 | 语义理解与分割 | Gaussian Grouping(2024,无需额外标注的实例级语义分割);Feature 3DGS;开放词汇场景查询 |
| 9.9 | 光照分解与重光照 | Relightable 3DGS(2024,将高斯属性分解为漫反射、镜面与可见度);GaussianShader;材质估计 |
| 9.10 | 人体与头像建模 | GaussianAvatars(2024,基于 FLAME 驱动的高精度人脸头像);3DGS 在人体动画中的应用;驱动与表情迁移 |
| 9.11 | SLAM 与实时定位建图 | 3DGS-SLAM(2024,将高斯场景表示嵌入实时 SLAM 系统);SplaTAM;在线增量建图;闭环检测 |
| 9.12 | 自动驾驶仿真 | HUGSIM(2025,统一闭环自动驾驶仿真框架,覆盖多传感器);EmerNeRF;UniSim;传感器级真实性评测 |
| 9.13 | 阅读前沿论文的方法论 | arXiv 检索技巧;如何快速判断论文价值;跟踪 2025-2026 新进展的工作流 |
第十章:成为贡献者——如何迭代改进系统
| 节 | 标题 | 要点 |
|---|---|---|
| 10.1 | 建立自己的实验基线 | 可复现实验的工程规范;日志与版本管理 |
| 10.2 | 如何定位性能瓶颈 | Profiling CUDA 核;内存带宽分析 |
| 10.3 | 修改高斯基元的正确姿势 | 添加新属性;修改梯度流;CUDA 扩展入门 |
| 10.4 | 使用 gsplat 库加速开发 | gsplat(Nerfstudio 团队维护的高性能 3DGS CUDA 后端);API 对比原版实现;自定义算子插入点 |
| 10.5 | nerfstudio 集成与生态 | nerfstudio 中的 Splatfacto 实现;插件式训练框架;与 gsplat 的协同使用;快速原型验证流程 |
| 10.6 | Gaussian Opacity Fields 解析 | GOF(2024,用不透明度场替代显式 alpha,改善无纹理区域与边界重建);体积表示与高斯基元的互补性 |
| 10.7 | 3DGUT:非结构化高斯溅射 | 3DGUT(2025,支持非结构化相机模型与鱼眼镜头的通用高斯训练框架);工业级数据集适配 |
| 10.8 | 消融实验设计 | 控制变量;指标选取;统计显著性 |
| 10.9 | 投稿与开源的建议 | 论文写作要点;代码整洁度;社区协作 |
| 10.10 | 推荐学习资源汇总 | 论文、课程、博客、社区的精选清单(含 2025 年新增资源) |
附录
| 附录 | 内容 |
|---|---|
| A | 线性代数速查:矩阵乘法、特征值分解、SVD |
| B | 概率论速查:期望、协方差、多元高斯 |
| C | 自动微分与反向传播原理 |
| D | CUDA 编程入门:线程层级、共享内存 |
| E | 术语中英对照表 |
推荐配套读物
基础教材
- 《计算机视觉:算法与应用》(Szeliski,第2版)— 相机模型、立体视觉权威参考
- 《深度学习》(Goodfellow et al.)— 自动微分、优化器原理
必读论文
| 论文 | 贡献 | 链接 |
|---|---|---|
| Kerbl et al., 2023 | 原版 3DGS | arXiv:2308.04079 |
| Mildenhall et al., 2020 | NeRF | arXiv:2003.08934 |
| Schönberger & Frahm, 2016 | COLMAP SfM | CVPR 2016 |
| Zwicker et al., 2001 | EWA Splatting | SIGGRAPH 2001 |
| Lu et al., 2024 | Scaffold-GS:锚点驱动结构化高斯 | arXiv:2312.00109 |
| Huang et al., 2024 | 2DGS:平面高斯改善表面重建 | arXiv:2403.17888 |
| Liu et al., 2024 | Gaussian Grouping:语义实例分割 | arXiv:2312.00732 |
| Liang et al., 2024 | Relightable 3DGS:光照分解与重光照 | arXiv:2311.09897 |
| Qian et al., 2024 | GaussianAvatars:FLAME 驱动人脸头像 | arXiv:2312.02069 |
| Yugay et al., 2024 | 3DGS-SLAM:高斯场景的实时 SLAM | arXiv:2312.02126 |
| Yu et al., 2024 | Gaussian Opacity Fields:体积不透明度场 | arXiv:2404.10772 |
| Chen et al., 2025 | HUGSIM:统一自动驾驶闭环仿真 | arXiv:2501.12320 |
| Niedermayr et al., 2024 | Mini-Splatting:极致高斯压缩 | arXiv:2403.14166 |
| Waczynska et al., 2024 | SplatFields:神经场驱动动态高斯 | arXiv:2409.11211 |
| Fischer et al., 2025 | 3DGUT:非结构化相机模型高斯训练 | arXiv:2312.02121 |
在线课程
- Stanford CS231A:计算机视觉基础(相机与三维视觉)
- CMU 16-385:计算机视觉(含立体和重建)
- MIT 6.837:计算机图形学(体渲染部分)
开源框架与工具
- 3DGS 官方仓库 — 原版代码、issue、社区讨论
- gsplat — Nerfstudio 团队维护的高性能 3DGS CUDA 后端,支持自定义扩展
- nerfstudio — 模块化 NeRF/3DGS 训练框架,内置 Splatfacto
- Awesome-3D-Gaussian-Splatting — 持续更新的论文与资源列表
- Luma AI / Polycam 博客 — 工业级落地经验与工程技巧
本教程持续更新,当前版本覆盖 3DGS 截至 2026 年中的主流进展。
三维高斯溅射(3DGS)完全教程
https://cmcblog.top/posts/三维高斯溅射3dgs完全教程/