BimAnt 3DGS
3DGS · 高斯泼溅

PLY 转 KSPLAT

KSPLAT 是 three.js 插件 GaussianSplats3D 的专用容器。如果你的项目已经用那个插件,转成它能省掉一次运行时转换。

没有文件?试一个 →

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

GaussianSplats3D 为什么只认 KSPLAT

GaussianSplats3D 是 mkkellogg 维护的 three.js splat 插件,它把高斯按空间分块、按块压缩,加载时可以逐块处理。KSPLAT 就是它的落盘容器,头部带版本、section、分桶和压缩级别。

也就是说,KSPLAT 的价值主要在“大场景渐进加载”,不是极限压缩;跨工具分发时,SPZ 或 PLY 更稳。

  • 输入:PLY、SPZ、SPLAT、SOG、Compressed PLY、KSPLAT
  • 输出:KSPLAT(GaussianSplats3D 容器)
  • 注意:只对用了 GaussianSplats3D 的项目有意义;three.js 官方 GaussianSplat 不读它

体积算例:小模型可能不变小

10 万点、SH 3 阶的 PLY 约 24.8 MB(100,000 × 248 字节)。KSPLAT 的体积取决于分块大小、压缩级别和 SH 阶数,没有统一的“1/10”口径;不要拿 SPZ 的倍数套它。

我们的 1,432 点小样本实测:PLY 348 KB → KSPLAT 319 KB,只小约 9%。模型的点越分散、分块越多,头部和索引开销越明显。

谁在读 KSPLAT

three.js r187 的 KSPLATLoader 能读当前 0.1 版容器;真正的生产消费者通常是 GaussianSplats3D 插件。SuperSplat 等工具对 KSPLAT 的支持要看版本,别默认它能打开。

如果项目还没绑定 GaussianSplats3D,优先选 SPZ:three.js 官方 loader 直接支持,接入成本更低。

常见报错:版本 / 分块读不了

“Unsupported KSPLAT version 0.1”:加载器版本太旧或文件不是 0.1 容器;换用与生成端匹配的 GaussianSplats3D 版本。

“splat count mismatch / invalid byte length”:文件被截断,或生成时压缩级别与读取端不一致;重新转一份,别手工改扩展名。

怎么验证输出没问题

把 KSPLAT 拖回本页只能证明容器结构可读;真正的验收要在目标项目里用 GaussianSplats3D 打开,确认分块加载与颜色正常。

再转一次 KSPLAT → PLY,比较点数与包围盒,可以排除“能加载但数据缺块”的情况。

KSPLAT 适合谁,不适合谁

适合:项目已经用 GaussianSplats3D,想要分块加载大场景,并且接受“只在这个插件生态里用”。KSPLAT 的头部带 section、bucket 和压缩级别,就是为这个插件设计的。

不适合:跨工具分发、three.js 官方 GaussianSplat 项目、需要长期存档。它不是通用压缩格式,体积也没有 SPZ 那种稳定口径。

  • 适合:GaussianSplats3D 项目、大场景分块加载
  • 不适合:跨工具交换、官方 three.js loader、长期存档
  • 注意:小模型的 KSPLAT 可能和 PLY 差不多大

和 SPZ / SPLAT 的取舍

SPZ 是跨工具格式:three.js r187 官方 loader 直接读,体积约为 PLY 的 1/10。KSPLAT 是 GaussianSplats3D 的专用容器,离开这个插件就不通用。

KSPLAT 的压缩级别和分块大小由生成端决定,同一份点云用不同设置会得到不同体积;所以它没有“固定压缩比”,也不能拿 SPZ 的 1/10 来估算。

SPLAT 固定 32 字节/点、不存球谐;KSPLAT 带分块和压缩设置,能装更多信息,但体积取决于生成参数,不适合拿 SPZ 的倍数来套。

小模型转 KSPLAT 可能几乎不变小,因为分块索引与头部有固定开销;它的价值在几十万点以上的大场景渐进加载。

如果项目还没绑定 GaussianSplats3D,选 SPZ 更省事;不要为了一个 loader 把整条管线锁死。

另外,KSPLAT 的分块是按空间位置切的;点云分布越分散,块数和索引开销越大,小模型反而不划算。它的头部固定 4096 字节、每个 section 头 1024 字节,极小模型光头部就占了不小比例。如果只是想减小 KSPLAT 体积,先调生成端的压缩级别,再比较输出。KSPLAT 的体积优势来自大场景的分块与压缩;如果你的模型只有几万点,分块带来的索引开销可能比省下的还多,这时 SPZ 或 SPLAT 更直接。小模型优先用 SPZ 或 SPLAT,别为了分块而分块,模型越小越不划算。

  • GaussianSplats3D 项目、大场景:KSPLAT
  • three.js 官方 loader、跨工具:SPZ
  • 老查看器、32 字节:SPLAT
  • 长期存档:PLY

手把手:从 PLY 转 KSPLAT

  • 把 PLY(或其它支持格式)拖进画布
  • 点「⇩ 转换」,目标已经预选为 KSPLAT
  • 开始转换并下载 .ksplat
  • 在目标项目里用 GaussianSplats3D 加载,确认分块与颜色
  • 再转一次 KSPLAT → PLY,比较点数,排除缺块

替代方案:SPZ 还是 KSPLAT

如果项目还没绑定 GaussianSplats3D,优先 SPZ:three.js r187 官方 loader 直接支持,接入成本低,跨工具也更稳。

只有当你的渲染管线已经依赖 GaussianSplats3D 的分块加载时,KSPLAT 才值得;否则它只是多一个生态锁定。

常见问题

KSPLAT 能被 SuperSplat 打开吗?

SuperSplat 主要围绕 PLY / Compressed PLY / SPLAT 等格式工作,KSPLAT 的兼容性取决于版本。跨工具分发时,SPZ 或 PLY 更稳。

转换后体积没有变小?

KSPLAT 会附带分块索引与元数据,小模型的体积可能接近 PLY 甚至略大;它的优势在大场景的分块加载,不是极限压缩。

KSPLAT 有球谐系数吗?

有,但存法与压缩级别有关;它不像 SPLAT 那样固定 32 字节/点。具体支持到几阶,取决于生成端与读取端插件的版本。

同一个 KSPLAT 在不同版本插件里都能读吗?

不一定。KSPLAT 头部带版本与分块参数,生成端和读取端版本差太多会报 version 或 byte length 错误;升级时同时更新两边。

转换格式

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

目标格式