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 错误;升级时同时更新两边。