supersplat · git:20261015.5d0de0d · 2026-10-15 · sha256 40e5079a6be55042
supersplat git:20261015.5d0de0dA
Immutable. This exact content never changes and is served at /api/v1/blob/40e5079a6be55042.
--- name: supersplat description: "Use when editing 3D Gaussian Splatting (3DGS) .ply models in browser — cleanup noise/floaters, crop, transform, color-adjust, animate camera, publish online. SuperSplat: open-source browser-based 3DGS editor by PlayCanvas with PLY/compressed PLY/Splat/SOG/SPZ export." tags: - 3d - gaussian-splatting - 3dgs - webgl - webgpu - typescript - playcanvas - editor --- > **项目地址:** <https://github.com/playcanvas/supersplat> > > **在线编辑器:** <https://superspl.at/editor> | **用户手册:** <https://developer.playcanvas.com/user-manual/gaussian-splatting/editing/supersplat/> > > **许可证:** MIT | **最新版本:** `v3.5.2`(2026-10-05,详见 [GitHub Releases](https://github.com/playcanvas/supersplat/releases))| **默认分支:** `main` ## 概述 SuperSplat 是「3D 高斯泼溅领域的 Photoshop + 发布平台」:完全基于 Web、免下载安装、源码开源。它专为 3DGS「训练之后、上线之前」的后期处理而生,解决原始 `.ply` 噪点多、体积大、坐标不规范、缺乏清理/动画/发布能力等问题。 - **检查 / 编辑**:加载、查看、选择并删除高斯点(噪点、漂浮物 floaters);选择工具含矩形/球体/画笔/套索/多边形/洪水填充/吸管,另有测量工具。 - **变换 / 裁剪**:平移/旋转/缩放(带 gizmo)、包围盒裁剪、多模型场景管理。 - **外观优化**:颜色调整(调色板 / 颜色匹配)、直方图、球谐(SH)带数控制。 - **动画**:相机姿态关键帧、时间轴(timeline / track-manager)、动画导出。 - **导出 / 发布**:多格式导出(含量化压缩与新格式),或一键发布到 PlayCanvas 托管获得分享链接。 - **技术栈**:TypeScript + PlayCanvas 引擎(`createGraphicsDevice` 初始化 WebGL2/WebGPU)+ PCUI 组件库 + i18next 国际化 + Rollup 构建。 > 3DGS 由 Inria 2023 年论文《3D Gaussian Splatting for Real-Time Radiance Field Rendering》提出,相比 NeRF 具备实时渲染、训练快、画质高的优势。 --- ## 环境准备 ### 在线使用(推荐,零安装) 直接打开 <https://superspl.at/editor>,将训练产出的 `.ply`(COLMAP + gaussian-splatting / Postshot / Nerfstudio 等)拖入即可。 ### 本地开发环境 ```bash git clone https://github.com/playcanvas/supersplat.git cd supersplat npm install # 需 Node >= 20.19.0(package.json engines) npm run develop # = watch(Rollup 监听构建)+ serve(静态服务 dist) ``` 浏览器打开本地服务后,按官方 README 要求关掉网络缓存并清理应用缓存,否则容易看到旧版本页面。 --- ## 核心 API 速览 SuperSplat 是应用而不是库,二次开发主要是围绕下面这些模块扩展: | 模块 | 职责 | |------|------| | `src/events.ts` | `Events` 类继承 PlayCanvas `EventHandler`,扩展函数注册/调用,是 UI 与逻辑解耦的核心 | | `src/scene.ts` / `src/pc-app.ts` | `Scene` 基于 `PCApp`,管理一组 Element(`ElementType`:Splat / Camera / grid / 叠加层等) | | `src/splat.ts` / `src/splat-state.ts` | `Splat` 封装 GSplat 资源与每点状态(含 `deleted` / hidden 标记) | | `src/edit-history.ts` / `src/edit-ops.ts` | 撤销/重做历史与编辑操作 | | `src/tools/` | 选择与变换工具集(矩形/球体/画笔/套索/多边形/洪水填充/测量/move/orient/rotate/scale) | | `src/serializer.ts` / `src/splat-serialize.ts` | 元素状态序列化与导出(导出核心) | | `src/export-options.ts` | `ExportType`、`ExportChoices`、`SerializeSettings` 等导出契约 | | `src/ui/` | 基于 `@playcanvas/pcui` 的 `EditorUI`:菜单/工具栏/面板,通过事件与逻辑通信 | | `src/publish.ts` | `PublishWriter`:分片上传与发布到 PlayCanvas 托管 | | `src/iframe-api.ts` | 给嵌入方用的 iframe 消息接口(如场景脏标记、回主页导航) | | `src/main.ts` | 应用入口,按序装配编辑器;用 PlayCanvas `createGraphicsDevice` 初始化 WebGL2/WebGPU | **二次开发要点**:UI 与逻辑通过 `Events` 事件解耦——新增功能通常是「注册事件/函数 + 新增 PCUI 面板组件」,而非直接耦合调用。 --- ## 典型工作流 ### 工作流一:训练后清理并压缩(在线的完整后期流程) 1. **导入** `.ply` 高斯模型 2. **清理**:用选择工具(矩形/套索/画笔/洪水填充等)选中噪点与漂浮物 → 删除(删除仅打 `deleted` 标记,导出时才真正剔除,可撤销恢复) 3. **裁剪**:用包围盒裁掉无关区域 4. **变换**:摆正坐标系、调整朝向与比例(多模型场景可分别变换) 5. **调色**:调整颜色、设置保留的 SH 带数 6. **动画**(可选):设置相机关键帧与时间轴 7. **导出 / 发布**:选格式导出,或发布到云端;需要重复导出同一配置时用 Re-export ### 工作流二:压体积上网页 1. 删掉噪点(导出时被标记删除的点不写入,点数 = 原始 − 已删除) 2. 勾选 **Compress PLY**(量化压缩) 3. 降低 **SH Bands**(高阶球谐占绝大多数属性,Web 场景常保留 0–1 阶) 4. 按目标查看器选格式:通用加载用压缩 PLY,PlayCanvas/Web 发布用 SOG 或 SPZ 5. 常能把数百 MB 压到几 MB ### 工作流三:导出带查看器的自包含交付 1. 导出类型选 **Viewer App** 2. 选 HTML(单文件)或 ZIP Package 3. 需要时勾选 Animation、设置 Loop Mode(none / repeat / pingpong)、背景色与 FOV 4. 双击 HTML 即可在浏览器观看,或把 ZIP 交给对方直接托管 --- ## 导出格式 导出弹窗(`src/ui/export-popup.ts`,契约见 `src/export-options.ts`)的导出类型为 `ply` / `splat` / `sog` / `spz` / `viewer`: | 格式 | 扩展名 | 特点 | 适用场景 | |------|--------|------|----------| | 标准 PLY | `.ply` | 无损、体积大、通用 | 归档、再编辑、跨工具交换 | | 压缩 PLY | `.compressed.ply` | PlayCanvas 量化压缩(勾选 Compress PLY),体积大幅减小,仍是 PLY | Web 加载、平衡体积与兼容性 | | Splat | `.splat` | antimatter15 紧凑二进制 | 轻量 Web 查看器 | | SOG | `.sog` | Self-Organizing Gaussians,WebP 纹理存储,体积极小(可调 Iterations) | Web 发布、移动端 | | SPZ | `.spz` | Niantic 高斯压缩格式,可选 SPZ 4(最新)或 SPZ 3(legacy gzip) | 生态内互操作、进一步压缩 | | Viewer App | `.html` / `.zip` | 自包含查看器(含动画与循环模式) | 交付演示、无开发环境直接看 | > Re-export 会复用上次的导出配置(`src/export-options.ts` 中除文件名外的选项都从当前场景读取),重复导出同一批参数不必重填。 --- ## 发布到 PlayCanvas 平台 一键发布(`src/publish.ts`、`src/ui/publish-settings-dialog.ts`)获得在线可分享、可嵌入链接: 1. **登录校验**:`fetchUser()` 请求 `/api/id`;未登录引导登录 PlayCanvas 账号。 2. **填写设置**:标题、描述、是否公开列出(`listed`)。 3. **分片上传**:`PublishWriter` 经 `start-upload` → `signed-urls` → 分片 PUT → `complete-upload`。 4. **发布**:调用 `/splats/publish`,格式为 SOG;开启 `generateLods` 则为 `ssog`(多分辨率 LOD,加载更快)。 --- ## 源码结构与构建 常用脚本(`package.json`): | 命令 | 作用 | |------|------| | `npm run build` | 生产构建(`rollup -c`) | | `npm run watch` | 仅监听构建 | | `npm run serve` | 仅启动静态服务器 | | `npm run develop` | watch + serve(日常开发入口) | | `npm run develop:auto-launch` | 开发并自动拉起浏览器 | | `npm run lint` | ESLint 检查 `src` | | `npm run lint:locales` | 校验语言文件(`scripts/check-locales.mjs`) | 其它位置:语言文件在 `static/locales/*.json`(i18next,`src/ui/localization.ts` 装配);`rollup.config.mjs` 负责 TypeScript + node-resolve + SCSS + image/json,生产用 terser 压缩、strip 去调试。 --- ## 常见问题(FAQ) | 问题 | 解决 | |------|------| | 删除后文件没变小 | 删除只打标记,**导出时**才真正剔除;导出后点数才下降 | | 想恢复误删的点 | 用撤销(Undo)恢复 `deleted` 标记;导出前务必确认清理无误 | | 隐藏(hidden)与删除区别 | 隐藏的点默认仍会导出,删除的点导出时被剔除 | | 导出文件太大 | 删噪点 + 勾选 Compress PLY + 降低 SH Bands;Web 发布优先压缩 PLY、SOG 或 SPZ | | 本地开发看到旧版本 | 浏览器缓存:按 README 要求关闭网络缓存、清理应用缓存后刷新 | | `npm install` 失败 | 确认 Node ≥ 20.19.0(`package.json` engines 要求) | | 该用哪种格式 | 继续编辑/归档→PLY;网页加载→压缩 PLY / SOG / SPZ;交付演示→Viewer App(HTML/ZIP) | | 找不到 KSplat 导出 | v3.5 的导出类型里已无 `ksplat`,改用 splat / SOG / SPZ;`.ksplat` 只作为旧文件名识别保留 | | 原始 .ply 从哪来 | 3DGS 训练工具(COLMAP+gaussian-splatting、Postshot、Nerfstudio 等)产出 | --- ## AI 使用建议 - 用户提到「高斯泼溅 / 3DGS 编辑」「清理 .ply 噪点」「压缩高斯模型上网页」「SuperSplat 二次开发」时加载本技能。 - 区分**用工具**(在线 superspl.at/editor 的后期处理流程)与**改源码**(本地 `npm run develop` + 事件驱动架构)两类需求。 - 减体积一律建议「删除噪点 + Compress PLY + 降低 SH Bands」组合,并按目标查看器选格式(PLY / 压缩 PLY / splat / SOG / SPZ)。 - 本地开发看到旧页面先查浏览器缓存,而不是怀疑构建没跑。 - 二次开发强调通过 `src/events.ts` 的 `Events` 解耦,新增功能=注册事件+新增 PCUI 面板。 - **不要臆造**:导出类型只有 `ply` / `splat` / `sog` / `spz` / `viewer`(旧的 ksplat 已移除);源码里没有 `src/sw.ts`,不要再引用 Service Worker 那套说法;模块名以仓库 `src/` 实际文件为准。 --- ## 相关技能 - **ara3d-sdk** — .NET 网格与 BIM 管线(与 3DGS 表示互为补充):[../ara3d-sdk/SKILL.md](../ara3d-sdk/SKILL.md) - **photo-sphere-viewer** — Web 全景/虚拟导览(另一种「实景」展示路线):[../photo-sphere-viewer/SKILL.md](../photo-sphere-viewer/SKILL.md) - **cesiumjs** — 3D 地球与大规模三维场景:[../../gis/cesiumjs/SKILL.md](../../gis/cesiumjs/SKILL.md) --- ## 参考资源 - 用户手册:<https://developer.playcanvas.com/user-manual/gaussian-splatting/editing/supersplat/> - PlayCanvas 引擎:<https://github.com/playcanvas/engine> - 3DGS 论文:《3D Gaussian Splatting for Real-Time Radiance Field Rendering》(Inria, 2023) - 上游中文教程:<https://znlgis.github.io/>(3d/supersplat 系列)