空间产品工程个人项目演示· Scene 离线三维工具链
Scene 离线三维创作与发布工具链
从本地场景编辑、离线编译到独立查看,三个仓库以精确锁定的引擎基线闭环,产物可直接离线打开。
编辑器演示:预载合成示例场景;编辑器仅支持 PC 端;LOD 可视化实验:查看器同族运行时渲染 Streamed SOG;三引擎对比实验:同一场景 PlayCanvas / three.js+Spark / Babylon.js
- 我的角色
- 独立设计与开发(编辑器、编译管线、查看器)
- 职责边界
- 编辑器、编译管线、查看器三段工具链的个人实现
- 仓库闭环(studio / pipeline / viewer)
- 3
- 端到端自动断言(scene-pipeline e2e)
- 16
更多材料与概览示意
- Vue 3.5
- Vite 8
- PlayCanvas 2.23.1
- @playcanvas/supersplat-viewer 1.37.0
- splat-transform 3.10.0
- Node.js 22
- Dawn WebGPU
- 材料说明
- 项目资料与演示
工具链概览示意(非运行截图)
背景问题
云端编辑器依赖后端与登录态,客户场景数据与发布流程难以完全离线。目标是:创作、编译、查看三个环节都能在本地完成,并且产物格式稳定、可被独立查看器直接消费。
约束
- 三个仓库的引擎与转换库版本必须一致,否则坐标与数据格式会出现隐性漂移,因此锁定
playcanvas@2.23.1、splat-transform@3.10.0,禁止浮动版本号。 - 查看器不 Fork 官方 Viewer,升级只能通过公开 API。
- 浏览器端无服务端,离线目录打开需要解决资源路径问题。
架构
- ↑
数据训练
gaussian-splatting-pipeline
采集 → SfM → GPU 训练 → 原始 3DGS 资产(PLY)
交付物 · 原始 .ply 高斯资产
输出至 01 场景创作
- 01
场景创作
scene-studio
混合编辑 3DGS + GLB + Primitive + 灯光 + 热点 + 运镜轨道
导出 .sscene 工程包(发布态预合并 + 坐标约定声明)
交付物 · .sscene 离线工程包
导出至 02 离线构建
- 02
离线构建
scene-pipeline
解包 → filterNaN → TRS 烘焙 → GPU 体素碰撞 → 流式 SOG LOD
输出标准产物目录(package-manifest / settings.json / lod/ / meshes/)
交付物 · 标准产物目录(lod/ · meshes/ · settings.json · package-manifest)
产物交给 03 独立查看
- 03
独立查看
scene-viewer
官方 @playcanvas/supersplat-viewer 黑盒 + pkg:// 离线桥
交付物 · 可离线打开的查看器会话
返回原 .sscene 工程修订后重新编译
上游训练与重建部分见高斯泼溅重建与训练管线,两篇分别覆盖"训练侧"与"创作/发布侧",不重复展开。
关键决策与取舍
- 编辑器脱离宿主:移除上传、鉴权与任务轮询,改用 File System Access API 与 Zip 流式打包实现本地保存与打开。
- 发布态预合并:导出时把所有可见高斯合并为单 Splat,并写入
coordinateConvention: file-rotation-included,把文件旋转惯例显式写进数据,下游不再猜测。 - 管线全程程序化:不 spawn 外部 CLI,直接调用 splat-transform 的 API,统一 IO 抽象,避免多次解码。
- 端到端断言:管线附带 e2e 脚本,动态合成非对称三维尖塔场景,跑全流程后执行 16 项断言,其中包含坐标朝向回归。
结果
- 同一份
.sscene可以在编辑器中编辑、在管线中编译、在查看器中离线打开,三段契约由版本基线与断言共同约束。 - 查看器保持极薄壳(Vanilla TS),升级官方 Viewer 时通过 API 面审计脚本对照类型声明回归。
局限与后续优化
- 编辑器本地保存依赖 File System Access API,Safari / Firefox 下只能降级为导出文件流,不能保留工程引用。
- 发布态为单 Splat 预合并,适合成品展示;多级 LOD 分块流式发布尚未纳入本管线。
- 碰撞体素化在 GPU 上执行,低端设备按 CPU 回退时耗时明显上升,暂无量化口径。
我的职责
- 三仓架构设计与数据契约定义(
.sscene工程包、产物目录格式)。 - scene-studio 的本地文件系统层与发布流程。
- scene-pipeline 的编排、碰撞与 LOD 阶段,以及 e2e 断言。
- scene-viewer 的离线 URL 桥与加载体验。