
1. 从“渲染一张图要等半天”说起3D Gaussian Splatting 到底解决了什么如果你最近在图形学圈子里混大概率躲不开3D Gaussian Splatting这个词。各种演示视频里一个场景从几十张照片出发几分钟内就能在浏览器里实时旋转、缩放、漫游光影和细节还相当能打。很多人第一反应是“又一个新玩具”但真正上手做过三维重建的人会明白它戳中的是过去几年一直没被很好解决的一堆痛点。我接触三维重建和神经渲染这条线有几年了从最早的 NeRF 到后来的各种加速变体踩过的坑不算少。3D Gaussian Splatting后面简称 3DGS在 2023 年出现之后我第一时间跑通了官方实现也拿自己的数据集做了对比。这篇是系列的第二篇专门聊它到底解决了什么问题——不是复述论文而是从一个实际使用者的角度把“为什么它值得关注”讲清楚。先说结论3DGS 解决的核心问题是在保持高质量渲染的前提下把训练速度和渲染速度同时拉到了实时级别并且用一种显式、可编辑的场景表示绕开了神经隐式表示在工程落地上的很多麻烦。它适合谁看如果你在做三维重建、数字孪生、虚拟场景搭建、AR/VR 内容或者只是对“从照片生成可漫游三维场景”感兴趣这篇应该能帮你理清它和 NeRF 那条路线的本质差异。2. 先搞清楚 3DGS 出现之前大家卡在哪里2.1 NeRF 的辉煌与它的“慢”要理解 3DGS 解决了什么得先回到它要挑战的对象——NeRFNeural Radiance Fields神经辐射场。NeRF 的思路非常优雅用一个多层感知机MLP去拟合一个连续函数输入是空间坐标和观察方向输出是那个点的颜色和密度。渲染的时候沿着光线采样把采样点的颜色和密度积分起来就得到像素值。这个思路在 2020 年横空出世时确实惊艳画质细腻、视角一致性好尤其是对反光和半透明材质的处理传统方法很难做到。但问题也很致命训练慢、渲染慢。原始 NeRF 训一个场景要一两天渲染一帧要几十秒甚至更久。原因在于每渲染一个像素都要在光线上采样上百个点每个点都要过一遍 MLP计算量爆炸。后来出现了一堆加速方案比如把场景切成网格、用哈希编码、用更小的网络、做重要性采样等等。这些方法确实把训练时间压到了几分钟到几十分钟渲染也能到接近实时。但代价是实现复杂度飙升显存占用大而且很多加速结构本身很难编辑。你没法简单地“删掉场景里的一个物体”或者“把某个区域换个颜色”因为整个场景是耦合在一个神经网络或者哈希表里的。2.2 传统显式重建的“糙”另一条路是传统的显式重建比如点云、网格、体素。这些表示的好处是直观、可编辑、渲染管线成熟。但问题在于从多视角照片重建出高质量的点云或网格非常困难。点云稀疏、有噪声网格重建容易丢细节尤其是对细薄结构、透明物体、复杂纹理传统方法往往力不从心。而且渲染质量高度依赖几何精度几何一糙画面就崩。所以过去几年的局面是隐式表示画质好但慢且难编辑显式表示快且可编辑但画质糙。大家一直在等一个能兼顾两者的方案。2.3 3DGS 的破局点用“一堆高斯球”表示场景3DGS 的核心洞察其实很朴素既然隐式表示难编辑、显式表示画质糙那能不能用一种既显式、又能表达连续辐射场的表示答案是用一堆三维高斯分布来拼出整个场景。每个高斯有自己的位置、协方差决定形状和朝向、不透明度以及用球谐函数表示的颜色跟视角有关。渲染的时候把这些高斯投影到屏幕上按深度排序然后做 alpha 混合。整个过程是可微的所以可以用照片做监督通过梯度下降去优化每个高斯的参数。这个设计一下子把几个问题同时解决了表示是显式的每个高斯就是一个可操作单元渲染是光栅化式的天然适合 GPU 并行优化是端到端的画质能逼近甚至超过 NeRF。下面我拆开讲它具体解决了哪些问题。3. 3DGS 到底解决了哪些具体问题3.1 训练速度从“按天算”到“按分钟算”这是最直观的改进。官方实现里一个中等复杂度的场景训练时间通常在几分钟到十几分钟取决于照片数量和分辨率。我实测过一个约 100 张照片的室内场景在单张消费级显卡上跑了大概 8 分钟就收敛得不错了。对比原始 NeRF 动辄一两天这是数量级的提升。为什么能这么快关键在于没有神经网络推理的瓶颈。NeRF 每次采样都要过 MLP而 3DGS 的“前向”主要是高斯的投影和混合这些都是高度并行的矩阵运算GPU 非常擅长。反向传播也只需要更新高斯参数不涉及深层网络。再加上它用了自适应密度控制——在细节多的地方分裂高斯在空旷区域裁剪高斯——让高斯数量保持在合理范围不会无谓地浪费算力。实操心得训练速度对硬件很敏感尤其是显存带宽。同样的场景显存大的卡能开更高分辨率、更多高斯收敛更快。如果显存吃紧可以适当降低初始点云密度但别降太狠否则细节恢复会变差。3.2 渲染速度真正的实时漫游训练快只是第一步渲染快才是 3DGS 真正出圈的原因。官方演示里1080p 分辨率下渲染帧率能到 100 FPS 以上甚至更高。这意味着你可以在普通笔记本上流畅地旋转、缩放、漫游一个从照片重建出来的场景延迟低到几乎感觉不到。这背后是光栅化管线的功劳。高斯投影到屏幕后按 tile 分块每个 tile 内做深度排序和 alpha 混合整个过程跟传统游戏渲染的思路很像天然适合 GPU。相比之下NeRF 的体渲染需要沿光线采样即使加速后也很难做到稳定高帧率。我拿同一个场景分别用加速版 NeRF 和 3DGS 渲染过NeRF 大概能到 20-30 FPS而 3DGS 轻松跑满 60 FPS 以上而且画质没有明显下降。对于需要交互的应用比如虚拟看房、文物展示、游戏场景预览这个差距是决定性的。3.3 显式表示带来的可编辑性这是我觉得被很多人低估的一点。因为场景是一堆独立的高斯你可以直接对它们做操作删掉一部分高斯就等于删掉一个物体移动一组高斯就能移动物体改颜色、改不透明度都很直接。这在 NeRF 里几乎是不可能轻松做到的因为信息分散在网络的权重里。举个例子我做场景清理时想把重建结果里的一些漂浮噪点去掉。在 3DGS 里我可以按高斯的不透明度或者尺寸筛选把明显异常的高斯删掉重新渲染立刻见效。而在 NeRF 里你只能重新训练或者调网络非常麻烦。这种可编辑性对下游应用意义很大数字内容创作、场景编辑、物理仿真接入都变得可行。你可以把 3DGS 场景导出跟传统渲染管线结合甚至做动态编辑。3.4 画质不输 NeRF某些场景更好早期有人担心显式表示画质会糙但实际对比下来3DGS 在多数场景下画质跟 NeRF 持平在细节丰富、纹理复杂的场景里甚至更好。因为它用大量高斯去拟合细节不像 MLP 那样容易过平滑。尤其是对高频纹理、细薄结构3DGS 恢复得更锐利。当然它也有短板比如对镜面反射、透明折射的处理不如 NeRF 自然因为高斯本身不擅长表达这些复杂光路。但社区已经在改进比如结合环境贴图、引入反射项等。整体来说画质已经足够满足大多数应用需求。3.5 工程落地的友好度从工程角度看3DGS 的部署门槛低很多。训练好的场景就是一组高斯参数可以存成文件加载到渲染器里直接画。不需要带着一个神经网络推理框架到处跑也不需要担心不同硬件上 MLP 的数值差异。渲染器可以用 CUDA 写也可以用 WebGL/WebGPU 做浏览器端渲染社区已经有多个开源实现。这对产品化很关键。NeRF 方案往往要绑定特定的推理后端部署复杂、优化困难。而 3DGS 更接近传统图形管线的思路容易集成到现有引擎里比如 Unity、Unreal 都有相关插件在冒出来。4. 它没解决什么边界与注意事项4.1 显存和存储占用高斯数量可以很大一个精细场景可能有几百万甚至上千万个高斯每个高斯要存位置、协方差、颜色、不透明度等参数存储和显存占用都不小。我遇到过一些场景训练完模型文件好几百 MB加载到显存里也吃紧。虽然社区有压缩方案比如量化、剪枝但这是它相比 NeRF 的一个劣势——NeRF 的模型文件通常小得多。注意如果你的应用对包体大小敏感比如移动端或者网页端需要提前评估高斯数量和压缩策略。别等到部署时才发现加载不动。4.2 对初始点云的依赖3DGS 通常从稀疏点云比如用 SfM 工具生成初始化。如果初始点云质量差、覆盖不全重建效果会受影响。它虽然有自适应密度控制但没法凭空变出缺失区域的结构。所以前期拍照和 SfM 的质量仍然很重要不是随便拍几张就能出好结果。4.3 动态场景和光照变化原始 3DGS 假设场景是静态的、光照固定的。如果场景里有运动物体或者拍摄时曝光变化大重建会出现鬼影或颜色不一致。后续有很多工作在做动态 3DGS、可重光照 3DGS但都还在演进中。如果你要做的是动态内容需要选对应的变体不能直接用原版。4.4 反射和透明材质的挑战前面提过高斯本身不擅长表达镜面反射和折射。对于玻璃、水面、金属这类材质3DGS 容易显得“糊”或者不真实。这是它相比 NeRF 的一个明显短板也是当前研究的热点。5. 一张表看清 3DGS 与 NeRF 的差异维度NeRF 类方法3D Gaussian Splatting场景表示隐式神经网络显式高斯集合训练时间几分钟到几十小时几分钟到十几分钟渲染速度通常较慢加速后接近实时实时轻松高帧率画质优秀反射透明处理好优秀细节锐利反射透明较弱可编辑性差信息耦合在网络里好可单独操作高斯存储占用较小较大依赖高斯数量部署难度较高依赖推理框架较低接近传统图形管线动态场景需专门变体需专门变体这张表不是要分高下而是帮你判断什么场景该选什么。要极致画质和复杂光路NeRF 系仍有优势要实时交互、可编辑、快速迭代3DGS 更合适。6. 实操中容易踩的坑与排查思路6.1 训练出来一片模糊或者有大量漂浮物这通常跟初始点云质量和训练步数有关。先检查 SfM 输出的点云是否覆盖了场景主要区域如果点太稀疏可以调高 SfM 的密度或者换更好的拍摄方式。训练步数不够也会导致高斯没收敛适当增加迭代次数。漂浮物多半是背景区域的高斯没被裁掉可以在训练后按不透明度或尺寸过滤。6.2 渲染时帧率上不去先看高斯数量是不是太多。几百万个高斯在低端卡上确实吃力。可以尝试剪枝去掉不透明度低的高斯或者对远处的高斯做简化。另外渲染分辨率也是关键降低分辨率能显著提升帧率。如果用的是浏览器端渲染检查是否开了硬件加速。6.3 颜色在不同视角下不一致这往往是曝光变化或者白平衡不一致导致的。拍摄时尽量锁定曝光和白平衡或者后期做颜色校正。3DGS 对输入照片的一致性比较敏感前期多花点时间处理照片后期省很多事。6.4 模型文件太大加载慢可以用量化把参数从 32 位浮点压到 16 位甚至 8 位或者做高斯合并把相似的高斯合并成一个。社区有现成工具但要注意压缩后画质会有些损失需要权衡。实操心得我习惯在训练完后先做一轮可视化检查把明显异常的高斯手动删掉再导出。这样模型更干净加载也快。别小看这一步能省掉很多下游调试时间。7. 它适合你的项目吗几个判断标准如果你在做需要实时交互的三维展示比如虚拟展厅、房产漫游、文物数字化3DGS 几乎是当前最优解。如果你需要从照片快速迭代场景比如做概念设计、场景预览它的训练速度能让你一天试很多版。如果你需要对场景做编辑比如删物体、换材质它的显式表示会让你轻松很多。但如果你要做的是动态人物、复杂反射、大范围户外场景或者对存储体积极其敏感那可能需要等对应的变体成熟或者结合其他方案。技术选型没有银弹关键是看清自己的核心需求。我个人在实际项目里的体会是3DGS 最大的价值不是某一项指标碾压而是它把高质量重建的门槛拉低了一大截。以前要搭一套 NeRF 管线、调各种参数、等很久才能看到结果现在几分钟就能出一个可交互的场景这种反馈速度对创作和迭代的帮助是巨大的。后续这个系列我还会聊具体的训练配置、参数调优和部署方案感兴趣可以继续关注。