BimAnt 3DGS
3DGS · 高斯泼溅

PLY 转 SPZ

把 PLY 格式的 3DGS 文件转成 SPZ,体积通常缩到原来的 1/10 左右。SPZ 是 Niantic 提出的压缩格式,World Labs 的 Atlas API 也直接输出它。转换在浏览器里完成,文件不上传。

没有文件?试一个 →

支持 .ply .splat .ksplat .spz .sog .compressed.ply · 文件不会离开你的电脑

为什么 SPZ 是体积与兼容性最平衡的一档

PLY 保留原始浮点,SPZ 把位置、尺度、旋转、颜色重新量化再压缩。它不追求 SOG 那种极限体积,但换来的是大多数查看器都能读:three.js、SuperSplat、Niantic 的参考实现都支持。

把任意支持的 3DGS 文件拖进来,工具会先按内容识别实际格式,再转成 SPZ。转换面板里的目标已经选好,确认后点「开始转换」即可。

  • 输入:PLY、SPLAT、KSPLAT、SPZ、SOG、Compressed PLY
  • 输出:SPZ v3(默认,兼容性最好)或 SPZ v4(需要较新的加载器)
  • 下载前会校验产物;失败时给具体原因,不会给你一个打不开的文件

选 v3 还是 v4?

给别人用、或者不确定对方的查看器版本,选 v3:它是 gzip 容器,three.js、SuperSplat、Niantic 的参考实现都能读。

只在较新的工具链里自己用,可以选 v4:它用 NGSP magic + zstd,压缩率略好,但老加载器读不了。three.js 从 r187 起两种都支持。

体积算例:10 万点会变成多大

10 万点、SH 3 阶的 PLY 约 24.8 MB(100,000 × 248 字节)。按 1/10 的官方口径,SPZ 大约 2.5 MB;实际会因量化参数、SH 阶数和场景结构有出入。

对照着看:同样这份模型转 SPLAT 是 3.2 MB,转 SOG 约 1.4 MB。SPZ 的 2.5 MB 不是最小,但它是三者里兼容面最宽的一个。

谁在读 SPZ

three.js r187 的 SPZLoader 支持 v3(gzip)与 v4(NGSP + zstd);SuperSplat、Niantic 的 spz 工具链、World Labs 的 Atlas API 也都围绕它工作。

如果你的下游只认 PLY,别把 SPZ 当存档:SPZ 是有损压缩,转回 PLY 只会得到更大的文件,不会恢复细节。需要长期保留时,PLY 和 SPZ 各留一份。

常见的 SPZ 报错

“SPZ version not supported”:老查看器只认 v3,把输出改成 v3 再试。

“zstd / 解压失败”:v4 需要较新的加载器;浏览器端 three.js r187 起支持,旧版本或旧工具请用 v3。

“转换后没有变小”:源文件如果已经是 SPLAT 或 SOG,再转 SPZ 体积可能接近甚至变大,这是正常的;SPZ 的 1/10 是相对 PLY 的口径。

怎么验证转换结果没问题

把下载的 .spz 再拖回本页,能正常出画面、点数与源文件一致,就说明文件头和压缩流没坏。

需要更严格时,做一次 spz → ply 回环:点数应一致,包围盒允许量化误差(我们在 1,432 点的样本上实测最大差约 1.1e-4)。

SPZ 适合谁,不适合谁

需要把模型放进网页、发给同事、或喂给 three.js / SuperSplat / World Labs 时,SPZ 是默认选择:体积约为 PLY 的 1/10,主流 loader 都能读。它的压缩是有损的,转出去就回不到原始字节。

不适合两种场景:要长期存档、保留最大精度(留 PLY);要在极老、只认 SPLAT 的查看器里打开(转 SPLAT)。如果你只是自己在新版 three.js 里用,v4 也可以;给别人发文件默认 v3。

  • 适合:网页分发、跨工具打开、World Labs Atlas 输出
  • 不适合:需要逐字节保真的存档、只认 PLY 的旧训练器
  • 默认:v3;确定对方是 three.js r187+ 或新工具链时再用 v4

和 SOG / SPLAT 的取舍

SOG 比 SPZ 更小(约为 PLY 的 1/15–1/20),但编码慢得多,细节损失也更明显;SPZ 的编码快、loader 多,是网页分发的默认折中。

SPLAT 固定 32 字节/点,10 万点 3.2 MB,比 SPZ 的 2.5 MB 略大,而且不存球谐;它胜在老查看器兼容,不是压缩率。

如果对方只认 PLY,就留 PLY;SPZ 不要当长期存档,压缩掉的细节转不回来。

  • 网页分发、跨工具:SPZ
  • 极限体积、PlayCanvas:SOG
  • 老查看器、32 字节:SPLAT
  • 存档、继续训练:PLY

手把手:从拖入到下载

  • 把 PLY(或任意支持的格式)拖进画布,等待信息条出现点数与包围盒
  • 点工具条「⇩ 转换」,目标已经预选为 SPZ
  • 需要兼容老工具就选 v3,只在较新工具链里用可选 v4
  • 点「开始转换」,完成后下载 .spz;大文件可以随时取消
  • 把下载的文件再拖回来,确认点数与源文件一致

什么时候该换一个格式

要更小的分发体积、并且目标平台是 PlayCanvas,选 SOG;要兼容只认 32 字节老格式的查看器,选 SPLAT;要继续训练或编辑,留 PLY。

如果转换后体积没有变小,先确认源文件已经是压缩格式;从 SPLAT/SOG 转 SPZ 可能持平甚至变大,这是源文件已经很小,不是工具坏了。

常见问题

SPZ 转回 PLY 会变大吗?

会,通常约 10 倍。体积变大不等于精度变高:SPZ 压缩时丢掉的部分不会因为转成 PLY 而回来。

为什么转换后体积没有明显变小?

SPZ 的 1/10 是相对 PLY 的大致口径。源文件如果已经是 SPLAT 或 SOG 这类压缩格式,再转 SPZ 体积可能接近甚至变大,这属于正常现象。

文件会上传吗?

不会。转换在浏览器里由 WebAssembly 完成,页面没有后端,也不做文件上传。

为什么默认输出 v3,而不是 v4?

v3 的 gzip 容器兼容面更宽:老版本 SuperSplat、旧插件和自建 loader 通常都能读。确定对方是 three.js r187 或更新的工具链时,再选 v4。

SPZ 文件能直接放进 three.js 吗?

能。three.js r187 用 SPZLoader.parse 读 v3/v4,再把 geometry 交给 GaussianSplat;本页查看器就是这么做的。

转换格式

选一个目标格式。转换在浏览器里完成,文件不上传。

目标格式