网页查看器为什么偏要 SPLAT
SPLAT 的结构极其简单:每个点固定 32 字节,读取器不用解析变长头、不用处理球谐。对早期网页查看器(比如 antimatter15 的 splat 查看器)来说,这意味着解析快、内存可控、兼容老设备。
代价也很直接:它不存球谐系数,颜色、尺度、旋转全部量化。需要视角相关的高光与反射时,SPLAT 会明显比 PLY / SPZ 平。
- 输入:PLY、SPZ、KSPLAT、SOG、Compressed PLY、SPLAT
- 输出:SPLAT(每点 32 字节)
- 适合:快速预览、体积优先、老查看器兼容
体积算例:10 万点 3.2 MB
10 万点、SH 3 阶的 PLY 约 24.8 MB(100,000 × 248 字节);同样 10 万点转成 SPLAT 是 3.2 MB(100,000 × 32 字节)。从 PLY 看是明显变小,但如果你手上已经是 2.5 MB 的 SPZ,转 SPLAT 反而会变大。
所以“转 SPLAT 一定更小”不成立,要看源格式。体积优先时先比较当前文件和 32 字节/点的乘积,再决定。
谁在读 SPLAT
three.js r187 自带 SPLATLoader,可以直接 parse 成本页用的 GaussianSplat 几何;antimatter15 的网页查看器、部分老版本 SuperSplat 和自建 three.js 项目也读它。
KSPLAT 是另一个生态(GaussianSplats3D 插件),名字像但容器不同;两者不要混用扩展名。
常见报错:颜色发白 / 细节糊
颜色被量化到 8 位,尺度和旋转也经过量化,低不透明度、高动态范围的颜色最容易先出现偏差。这不是转换出错,是 SPLAT 格式本身的取舍。
如果特写镜头里叶片、毛发、薄结构糊成一片,换回 SPZ 或 PLY;SPLAT 更适合“先看个大概”的网页预览。
怎么验证输出没问题
把 .splat 再拖回本页,能出画面、点数与源文件一致即可;再切到 SPZ 版本对比颜色和边缘,确认差异在可接受范围。
需要给老查看器用时,优先拿它的示例文件做一次回归,别只在本工具里验证。
SPLAT 适合谁,不适合谁
适合:老网页查看器、只需要快速预览、体积优先、目标设备性能有限。每点固定 32 字节,解析简单,很多早期 splat 项目至今只认它。
SPLAT 的 32 字节里没有 SH,也没有独立的缩放指数;它把四元数和颜色直接量化。对绝大多数“先看个大概”的网页场景够用,但不要指望它保住特写细节。
不适合:需要球谐高光、需要特写画质、要做长期存档。SPLAT 不存 SH,颜色和尺度都量化过;要保真请用 PLY 或 SPZ。
- 适合:快速预览、老查看器兼容、32 字节/点的稳定体积
- 不适合:高保真渲染、需要视角相关效果的场景
- 注意:从 SPZ 转 SPLAT 可能变大,先算 32 × 点数
和 SPZ / PLY 的取舍
SPZ 保留球谐,10 万点约 2.5 MB;SPLAT 不存球谐,10 万点 3.2 MB。SPLAT 反而更大,但解析更简单、老查看器兼容更好。
如果目标查看器支持 SPZ,优先 SPZ:画质更好、体积更小。只有对方只认 32 字节 splat 时,才选 SPLAT。
PLY 是母版,不适合直接上网页;SPLAT 也不是存档格式,丢掉的高光和细节转不回来。
- 老查看器、固定 32 字节:SPLAT
- 网页、要球谐:SPZ
- 存档、继续编辑:PLY
- 移动端预览:SPLAT 或 SPZ,按体积决定
手把手:从 PLY 转 SPLAT
- 把 PLY(或 SPZ / KSPLAT / SOG / Compressed PLY)拖进画布
- 点「⇩ 转换」,目标已经预选为 SPLAT
- 开始转换并下载 .splat;10 万点大约 3.2 MB
- 把 .splat 拖回本页,确认点数与画面
- 如果要给老查看器用,再拿它的示例文件做一次回归
替代方案:什么时候别用 SPLAT
需要视角相关的高光、反射、半透明层次时,SPLAT 会明显变平;换 SPZ 或 PLY。需要在网页里兼顾体积与画质时,SPZ 通常是更好的折中。
如果源文件已经是 2.5 MB 的 SPZ,转 SPLAT 会变成 3.2 MB;体积优先也要先比较,不要默认“老格式一定更小”。模型超过 50 万点时,32 字节/点会变成十几 MB,先看加载时间再决定;移动端尤其要谨慎,先看你的查看器支持什么。
常见问题
SPLAT 和 KSPLAT 有什么区别?
SPLAT 是较老的通用格式,每点固定 32 字节;KSPLAT 是 three.js 插件 GaussianSplats3D 的容器,带分块与压缩设置,能装更多信息,但只有那个插件原生支持。
SPLAT 适合长期存档吗?
不适合。它是有损且不存球谐的格式,更适合做网页分发的中间产物;要长期保留细节,留一份 PLY 或 SPZ。
为什么转成 SPLAT 后颜色变淡了?
颜色被量化到 8 位,尺度和旋转也经过量化,低不透明度或高动态范围的颜色最容易先出现差异。这是格式本身的取舍,不是转换出错。
three.js r187 能直接读 SPLAT 吗?
能。three.js r187 自带 SPLATLoader,parse 后交给 GaussianSplat 即可;本页查看器走的就是这条路径。
SPLAT 为什么比 SPZ 还大?
SPLAT 每点固定 32 字节,而 SPZ 会按场景量化压缩,可能低于 32 字节/点。体积大小要看源文件和目标格式,不是“越老越小”。