第08章:导出格式、压缩与发布上线
经过清理、变换、调色与动画,最后一步是把成果导出为合适的格式,或一键发布到云端获得可分享链接。本章对应源码 src/splat-serialize.ts、src/file-handler.ts、src/ui/export-popup.ts 与 src/publish.ts。
1. 导出格式总览
SuperSplat 的导出弹窗(src/ui/export-popup.ts)支持以下目标格式:
| 格式 | 扩展名 | 特点 | 适用场景 |
|---|---|---|---|
| 标准 PLY | .ply |
无损、体积大、通用 | 归档、再编辑、跨工具交换 |
| 压缩 PLY | .compressed.ply |
PlayCanvas 量化压缩,体积大幅减小,仍是 PLY | Web 加载、平衡体积与兼容性 |
| Splat | .splat |
antimatter15 紧凑二进制 | 轻量 Web 查看器 |
| KSplat | .ksplat |
mkkellogg 的分块/可流式格式 | Three.js 高斯查看器 |
| SOG | .sog |
Self-Organizing Gaussians,WebP 纹理存储,体积极小 | Web 发布、移动端 |
选择建议:要继续编辑或归档 → PLY;要发布到网页且追求加载速度 → 压缩 PLY 或 SOG;对接特定查看器 → 用其支持的 splat/ksplat。
2. 删除如何真正生效
回顾第 04 章:编辑过程中“删除”只是给高斯打上 deleted 状态位。只有在导出时,被标记删除的点才会被真正剔除、不写入输出文件。因此:
- 导出前请确认清理无误(用撤销恢复误删);
- 导出后的文件点数 = 原始点数 − 已删除点数,这正是减小体积的关键途径。
隐藏(hidden)的点默认仍会导出(除非另有设置),与删除不同。
3. 压缩与球谐带数
导出弹窗提供若干优化选项:
- Compress PLY(压缩 PLY):布尔开关,开启后对 PLY 做量化压缩(
popup.export.compress-ply),显著减小体积; - SH Bands(球谐带数):可选择保留的球谐阶数(bands)。降低球谐阶数会丢失部分视角相关的高光细节,但能大幅减小文件体积(高阶 SH 占据了绝大多数属性,见第 02 章的字节估算)。对许多 Web 场景,保留 0 阶或 1 阶已足够;
- 背景色、FOV 等:用于带查看器的打包导出。
合理组合“删除噪点 + 压缩 + 降低 SH 带数”,常能把数百 MB 的原始模型压到几 MB 量级。
4. 带查看器导出(HTML / ZIP 包)
导出弹窗还支持把模型连同一个查看器一起打包,便于直接分发与离线展示(popup.export.type):
- HTML:导出一个自包含的 HTML 查看器;
- ZIP(Package):导出包含模型与查看器资源的压缩包。
打包导出时还能设置动画与循环模式(popup.export.loop-mode):
none:不循环;repeat:循环重复;pingpong:往返播放。
这样导出的成果(含第 07 章制作的相机动画)可以直接双击在浏览器中观看,无需任何额外环境。
5. 发布到 PlayCanvas 平台
除了本地导出,SuperSplat 支持一键发布到 PlayCanvas 的高斯泼溅托管服务,获得一个在线可分享、可嵌入的链接(src/publish.ts、src/ui/publish-settings-dialog.ts)。
5.1 发布流程(源码视角)
- 登录校验:
fetchUser()请求/api/id获取当前用户;未登录会引导登录 PlayCanvas 账号; - 填写发布设置:标题(title)、描述(description)、是否公开列出(
listed)等; - 分片上传:
PublishWriter通过start-upload→ 获取signed-urls签名地址 → 分片 PUT 上传 →complete-upload完成; - 发布:调用
/splats/publish,发布格式为 SOG;若开启生成 LOD(generateLods)则为ssog(带多分辨率层级,加载更快); - 返回可访问的在线链接。
5.2 发布设置要点
- listed(是否公开列出):控制作品是否出现在公开列表中(公开 vs 仅凭链接访问);
- generateLods(生成 LOD):为大模型生成多层次细节,提升 Web 端首屏加载与流式体验;
- 标题与描述便于管理与分享。
发布完成后,你会得到一个由 SuperSplat Viewer 驱动的在线页面,可直接分享或通过 iframe 嵌入自己的网站。
6. 在自有项目中使用导出结果
导出/发布后,可在多种环境中消费这些高斯模型:
- PlayCanvas Engine:用
GSplat组件直接加载.ply/.sog; - Three.js:用
@mkkellogg/gaussian-splats-3d加载.ply/.splat/.ksplat; - 网页嵌入:用发布得到的链接通过 iframe 嵌入;
- 批处理:用
@playcanvas/splat-transform命令行对导出文件做进一步转换/压缩。
7. 导出/发布实战清单
- 完成清理与编辑,确认删除无误;
- 决定用途:归档(PLY)/ Web(压缩 PLY 或 SOG)/ 特定查看器(splat/ksplat);
- 打开导出弹窗,选择格式;
- 视情况开启压缩、降低 SH 带数以减小体积;
- 若要可分享的成品,选择带查看器打包导出,或直接发布到 PlayCanvas;
- 发布时填写标题/描述、设置 listed 与 LOD;
- 验证导出文件在目标引擎/查看器中的加载效果。
8. 本章小结
本章讲解了 SuperSplat 的导出与发布:
- 支持 PLY、压缩 PLY、splat、ksplat、SOG 等格式,各有取舍;
- 删除的点在导出时才真正剔除,配合压缩与降低 SH 带数可大幅减小体积;
- 可带查看器打包为 HTML/ZIP,并设置动画循环模式;
- 可一键发布到 PlayCanvas(分片上传 + SOG/SSOG),获得在线可分享链接;
- 导出结果可在 PlayCanvas、Three.js、网页 iframe 等多种环境中使用。
至此,使用篇全部完成。下一章起进入开发篇——搭建本地环境、剖析源码架构。