znlgis 博客

GIS开发与技术分享 — GDAL · GeoServer · PostGIS · QGIS · OpenLayers · Cesium · FreeCAD · NPOI

第08章:导出格式、压缩与发布上线

经过清理、变换、调色与动画,最后一步是把成果导出为合适的格式,或一键发布到云端获得可分享链接。本章对应源码 src/splat-serialize.tssrc/file-handler.tssrc/ui/export-popup.tssrc/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.tssrc/ui/publish-settings-dialog.ts)。

5.1 发布流程(源码视角)

  1. 登录校验fetchUser() 请求 /api/id 获取当前用户;未登录会引导登录 PlayCanvas 账号;
  2. 填写发布设置:标题(title)、描述(description)、是否公开列出(listed)等;
  3. 分片上传PublishWriter 通过 start-upload → 获取 signed-urls 签名地址 → 分片 PUT 上传 → complete-upload 完成;
  4. 发布:调用 /splats/publish,发布格式为 SOG;若开启生成 LOD(generateLods)则为 ssog(带多分辨率层级,加载更快);
  5. 返回可访问的在线链接。

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. 导出/发布实战清单

  1. 完成清理与编辑,确认删除无误;
  2. 决定用途:归档(PLY)/ Web(压缩 PLY 或 SOG)/ 特定查看器(splat/ksplat);
  3. 打开导出弹窗,选择格式;
  4. 视情况开启压缩、降低 SH 带数以减小体积;
  5. 若要可分享的成品,选择带查看器打包导出,或直接发布到 PlayCanvas;
  6. 发布时填写标题/描述、设置 listed 与 LOD;
  7. 验证导出文件在目标引擎/查看器中的加载效果。

8. 本章小结

本章讲解了 SuperSplat 的导出与发布:

  • 支持 PLY、压缩 PLY、splat、ksplat、SOG 等格式,各有取舍;
  • 删除的点在导出时才真正剔除,配合压缩与降低 SH 带数可大幅减小体积;
  • 可带查看器打包为 HTML/ZIP,并设置动画循环模式;
  • 可一键发布到 PlayCanvas(分片上传 + SOG/SSOG),获得在线可分享链接;
  • 导出结果可在 PlayCanvas、Three.js、网页 iframe 等多种环境中使用。

至此,使用篇全部完成。下一章起进入开发篇——搭建本地环境、剖析源码架构。


← 上一章 目录 下一章 →