一句话:一堆会发光、会旋转的椭球
3D Gaussian Splatting(3DGS,中文常叫高斯泼溅)用几十万到几百万个高斯椭球表示一个场景。每个椭球有位置、尺度、旋转、颜色和不透明度;渲染时把它们投影到屏幕并按深度混合,得到连续的画面。
它不是 mesh,也不是普通点云:点云的一个点没有大小和方向,高斯椭球有;mesh 用三角面描述表面,3DGS 用体积元素描述光线。
和 NeRF、点云有什么区别
NeRF 用一个神经网络记住“从哪个方向看、这个像素是什么颜色”,训练和渲染都重;3DGS 把场景显式存成椭球,渲染更像光栅化,实时性好得多。
普通点云只有位置和颜色,适合测量与建模;3DGS 多了协方差和球谐,才有视角相关的高光与半透明效果。两者都可能是 .ply,但字段完全不同。
- 要实时转着看:3DGS 更合适
- 要测量、做 BIM、出工程图:普通点云或 mesh 更合适
- 要最高保真但不在乎速度:NeRF 仍然有它的位置
六种容器分别装什么
同一个场景可以装进六种容器,差别在压缩方式、精度和生态。看扩展名比看“3DGS”三个字有用:.ply 是原始浮点,.spz / .sog 是压缩分发,.splat / .ksplat 面向特定查看器。
| 格式 | 每点体积 | 压缩 | 谁在用 | 什么时候选它 |
|---|---|---|---|---|
| PLY (.ply) | 约 248 字节(SH 3 阶) | 无 | 几乎所有训练器的默认输出 | 要最全细节、要喂给别的训练/编辑工具 |
| SPLAT (.splat) | 32 字节 | 有损 | 早期网页查看器的事实标准 | 想快速塞进网页、体积优先 |
| KSPLAT (.ksplat) | — | 有损 | three.js 的 GaussianSplats3D 插件 | 项目已经用那个插件 |
| SPZ (.spz) | 约为 PLY 的 1/10 | 有损 | Niantic 提出;World Labs 的 Atlas API 输出它 | 体积与兼容性最平衡的默认选择 |
| SOG (.sog) | 约为 PLY 的 1/15–1/20 | 有损 | PlayCanvas 规范,为 Web 分发与流式加载设计 | 要在网页里挂大场景、带宽敏感 |
| Compressed PLY (.compressed.ply) | — | 有损 | PlayCanvas 生态 | 已经是这个格式,或者对方指定要它 |
什么时候需要转格式
三种典型情况:文件太大、网页加载慢;下游引擎只认某一种容器;需要长期存档或继续编辑。前两种优先转 SPZ,第三种留 PLY。
转格式不会凭空产生细节。压缩格式之间互转,体积和精度都受源文件限制;先看 `/formats/` 的对照,再决定目标。
常见误解
“3DGS 是一种文件格式”:不是,它是技术名;具体文件要按扩展名指认。
“转成压缩格式就无损”:SPZ、SOG、SPLAT、KSPLAT 的压缩都会丢细节;准确说法是“转换不额外降精度”。
“点数越多一定越好”:点数、SH 阶数、量化参数一起决定画质与体积,盲目堆点数只会让网页更卡。
常见问题
3DGS 和 NeRF 哪个好?
要实时查看、网页分发,3DGS 通常更合适;要最高保真、可以慢慢渲染,NeRF 仍有优势。两者不是同一个文件格式,工具也不通用。
3DGS 文件为什么有这么多扩展名?
它们是同一类数据的不同容器:PLY 保真、SPZ 平衡、SOG 体积最小、SPLAT/KSPLAT 面向特定查看器。选哪个取决于下游工具和体积预算。
手机上能看 3DGS 吗?
可以,但受内存限制。轻量模型(几千到几万点)没问题;几十万点以上建议用桌面浏览器,或先转成 SPZ 降低体积。