3D Gaussian Splatting(3DGS)最容易被误读成“把网格换成一堆点”。更准确的说法是:它把一个已经捕获的场景表示成可优化、可投影、可排序和可合成的一组各向异性三维高斯。论文里的惊艳画面来自表示、数据和渲染器共同工作;工程上真正要回答的则是:这些高斯能否在预算内加载、流送、编辑,并和碰撞、材质、阴影及工具链相处。
从 Kerbl 基线开始
Kerbl 等人的 3DGS 原论文从多视图图像和相机位姿得到稀疏点,为每个点学习位置、旋转、尺度、不透明度和球谐(SH)颜色。训练时把高斯投影成屏幕空间椭圆,在 tile 内按深度排序,再做 alpha 合成;梯度不足的区域被裁剪,需要更多容量的区域则 clone 或 split。它把 NeRF 的逐射线体采样变成更接近 GPU 光栅化的数据流,因此在论文条件下可以实时新视角显示。
但“实时”首先是渲染器的结论,不是资产系统的结论。SH 颜色可能已经把采集时的光照、高光和遮挡烘焙进去;一个高斯也不是一个可靠的表面点。它没有自动生成水密网格、UV、碰撞体、骨骼或可重新求解的 BRDF。先阅读站内的三维高斯泼溅和点云渲染,再决定它适合做什么。
论文路线其实是在补工程缺口
第一类工作补的是投影质量。Mip-Splatting 处理多尺度下的抗混叠,StopThePop 处理视角变化时的排序跳变;它们让远处、缩放和相邻 tile 的画面更稳定,却不改变高斯的静态外观假设。Scaffold-GS 用锚点和共享特征生成局部高斯,减少重复属性并改善密度控制。读这些论文时,应该把 PSNR 之外的指标也记下来:屏幕覆盖率、过度绘制、每帧高斯数和排序成本。
第二类工作补的是资源预算。Compact 3D Gaussian Representation、Compressed 3DGS、HAC 等路线会量化属性、学习熵模型或共享参数;层次化高斯、城市级高斯和八叉树路线则把场景拆成可剔除、可分页的块。压缩比并不是免费收益:解码、随机访问、LOD 切换和质量退化都要算进运行时。对引擎而言,更有用的规格是“某视锥内多少高斯、多少显存、多少毫秒、切块时是否卡顿”,而不是单独一个文件大小。
第三类工作尝试让高斯更像资产。SuGaR、Gaussian Surfels 一类方法从高斯估计表面并辅助网格提取;语义分组和文本编辑让局部修改成为可能;前馈方法则试图从少量图像直接预测高斯。它们降低了逐场景优化的门槛,却没有消除未观测区域、反射物、透明物和细薄结构的歧义。生成式致密化尤其要防止把“看起来合理”误当成测量得到的几何。
进入引擎时,推荐采用混合表示
比较稳妥的方案是:静态背景、布景或远景用高斯做视觉代理;角色、交互物、导航和碰撞继续使用网格、骨骼与物理系统。渲染接口至少要约定深度、透明排序、阴影接收、运动模糊、曝光和后处理的坐标/颜色空间。高斯块需要有包围盒、层级 LOD、异步加载和显存淘汰策略;VR 或移动端还要单独测试双眼视差、 foveation 和峰值带宽。
可重光照是另一条不能偷换概念的边界。若目标只是固定光照下的自由视角回放,SH 足够实用;若目标是换灯、改粗糙度或让高斯投射可信阴影,就需要法线、BRDF、入射光和可见性等额外表示。可以接着看基于物理的着色、BRDF与可微渲染与神经渲染,再对照 GS-IR 和 Relightable 3D Gaussians。这些方法是把高斯接入逆向渲染的尝试,不是证明普通 3DGS 天生拥有 PBR 材质。
我会怎样验收一个 3DGS 方案
先测训练视角和新视角的误差,再故意测试反射、透明、薄片、遮挡后重现和未观测区域;记录高斯数量、包体、峰值显存、冷启动、块切换和稳定帧时间。若要写进资产规格,还必须验证网格/碰撞接口、光源变化、材质编辑和长时间运行。论文中的 FPS、压缩率和视觉指标都绑定数据集、分辨率、硬件与实现,不能直接当作引擎承诺。
最后要问的是:系统在表示 RGB 外观、表面几何,还是场景状态?它是在回放已捕获内容,还是预测动作后的未来?如果问题已经变成动态重建,可以继续读四维高斯泼溅;如果问题是可行动、可碰撞的环境,则还要把世界模型、物理和传统资产管线分开验证。3DGS 的价值不是替所有表示,而是让“捕获—压缩—渲染”的一段链路变得非常快。