六种格式对照
“每点体积”一列只在有官方口径或实测数据时填写;KSPLAT 与 Compressed PLY 受压缩设置影响大,不写倍数。
| 格式 | 每点体积 | 压缩 | 谁在用 | 什么时候选它 |
|---|---|---|---|---|
| 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 生态 | 已经是这个格式,或者对方指定要它 |
常见问题
PLY 和 SPZ 有什么区别?
PLY 是原始浮点数据,SH 3 阶时每点约 248 字节;SPZ 是 Niantic 提出的量化压缩格式,体积通常约为 PLY 的 1/10。PLY 胜在通用与保真,SPZ 胜在体积与 Web 分发。
SPZ v3 和 v4 有什么区别?
v3 是 gzip 容器,兼容性最好;v4 用 NGSP magic + zstd,需要较新的加载器。three.js r187 的 SPZLoader 两种都能读;老工具通常只认 v3。给别人发文件时选 v3。
SPLAT 为什么每点只有 32 字节?
位置 12 字节 + 尺度 12 字节 + 颜色 4 字节 + 旋转 4 字节 = 32 字节,全部量化。它不存球谐系数,所以体积小、兼容老查看器,但复杂光照下会比带 SH 的格式平。
SOG 和 SPZ 哪个更小?
SOG 更激进:体积通常约为 PLY 的 1/15–1/20,SPZ 约 1/10。两者都是有损,SOG 的细节损失通常更明显。当前上游 0.6.0 的 SOG 编码器很慢,大文件建议先用 SPZ。
转成压缩格式之后还能转回来吗?
能。压缩格式转回 PLY 会得到一个体积变大、精度不变的文件;这不是转坏了,而是有损压缩的正常结果。压缩时丢掉的部分找不回来。
我的模型有 6000 个 splat,算大还是小?
很小。一个 splat 就是一个高斯椭球;浏览器里几十万点的场景很常见,6000 点属于轻量模型。真正吃内存的是百万级以上的点数和 SH 3 阶的系数。
转换会额外降低精度吗?
转换过程本身不会额外降精度,但目标格式自己的压缩会丢细节:SPZ、SOG、SPLAT、KSPLAT 都是有损容器。要保留最多信息,选 PLY。
同一个模型转成不同格式,点数会变吗?
通常不变,变的是每个点存了多少信息。压缩格式可能合并或裁剪极弱的高斯,具体取决于编码器;本工具会在转换结果里显示输出体积,不做“点数一定不变”的承诺。
为什么没有“3DGS 格式”这个扩展名?
3DGS 是一类技术(3D Gaussian Splatting)的缩写,不是文件格式。具体文件请按扩展名指认:.ply、.splat、.ksplat、.spz、.sog、.compressed.ply。