SuperSplat 架构深度解析:8.2K Star 的浏览器端 3D 高斯泼溅编辑器,PlayCanvas 如何用纯 WebGL 重新定义三维内容工作流

🔥 SuperSplat 架构深度解析:8.2K Star 的浏览器端 3D 高斯泼溅编辑器,PlayCanvas 如何用纯 WebGL 重新定义三维内容工作流

8.2K Star · PlayCanvas 团队 · MIT License · TypeScript 92.6% · v2.26.1 · 145+ Releases

前言:一个填补生态空白的项目

2023 年 SIGGRAPH 大会上,3D Gaussian Splatting(3DGS)横空出世------用数百万个半透明椭球体重建真实场景,实时渲染 60fps+,彻底碾压 NeRF。

但有一个关键问题被忽视了:生成之后怎么编辑?

传统 3DGS 管线是单向的------扫描 → 训练 → 输出 .ply 文件 → 结束。没有编辑器,没有优化工具,没有发布管线。你拿到的是一个几百 MB 的二进制文件,除了「看」,什么都做不了。

PlayCanvas 团队看到了这个空白。2024 年初,他们开源了 SuperSplat------全球首款浏览器端 3D 高斯泼溅编辑器。

8.2K Star、886 Fork、145+ 个版本迭代,平均每 3-4 天发布一版。

本文从 3DGS 技术原理、SuperSplat 架构设计、渲染管线、编辑工具链四个维度,做一次完整的深度拆解。


一、3D Gaussian Splatting 技术原理:为什么不是 NeRF?

1.1 核心思想

3D Gaussian Splatting 的核心是用三维高斯分布来表示三维空间中的每一个点:

复制代码
每个高斯函数 = {
    位置(均值 μ):    3D 空间中的坐标 [x, y, z]
    形状(协方差矩阵 Σ):椭球体的朝向和大小
    颜色(球谐函数 SH):依赖视角的颜色表现
    透明度(α):       控制遮挡和混合
}

1.2 渲染管线

复制代码
┌─────────────────────────────────────────────────────────┐
│              3D 空间中的高斯椭球体                          │
│     (位置 + 协方差矩阵 + RGB 球谐函数 + Alpha)            │
└──────────────────────┬──────────────────────────────────┘
                       │
                       ▼
┌─────────────────────────────────────────────────────────┐
│           "泼溅"(Splat) 到 2D 图像平面                     │
│     (协方差矩阵 3D→2D 投影变换 → 屏幕空间 2D 椭圆)        │
└──────────────────────┬──────────────────────────────────┘
                       │
                       ▼
┌─────────────────────────────────────────────────────────┐
│                 α-blending 混合叠加                       │
│     (按深度后往前排序 → 逐像素 α 混合)                    │
└──────────────────────┬──────────────────────────────────┘
                       │
                       ▼
┌─────────────────────────────────────────────────────────┐
│                 高质量新视角图像输出                        │
└─────────────────────────────────────────────────────────┘

关键区别 :传统 3D 渲染走的是三角形光栅化(Mesh + Shader),3DGS 走的是逐高斯椭球 α-blending------完全不依赖多边形网格。

1.3 为什么 3DGS 胜过 NeRF?

维度 NeRF 3D Gaussian Splatting
渲染速度 需要逐射线积分,很慢 直接泼溅 + 排序,实时 60fps+
训练时间 几小时到几天 几十分钟
编辑能力 隐式表示,无法编辑 显式高斯点,可直接操作
文件格式 神经网络权重 标准 PLY 点云格式
硬件要求 训练需高端 GPU 训练需 GPU,渲染消费级即可
显式几何 有(虽然是椭球体)

1.4 3DGS 的局限性

局限 说明
文件体积大 百万级高斯,典型场景 200MB-1GB
编辑工具匮乏 生成后难以修改------这正是 SuperSplat 填补的空白
遮挡处理 复杂遮挡场景仍有伪影
镜面反射 球谐函数对高光表现不完美
物理仿真 无显式网格,碰撞/物理交互困难

二、🔥 项目架构:事件驱动 + 纯 TypeScript + 自建 UI

SuperSplat 没有使用 React/Vue,而是选择了纯 TypeScript + 自建事件总线的技术路线。

2.1 技术栈全景

分类 技术 版本 说明
核心引擎 PlayCanvas Engine 2.18.1 WebGL 2.0 实时渲染
主语言 TypeScript 92.6% 严格类型检查
UI 框架 @playcanvas/pcui 6.1.4 PlayCanvas 自家 UI 库(非 React)
高斯处理 @playcanvas/splat-transform 2.1.1 WASM 协处理器
国际化 i18next 26.1.0 9 种语言
构建工具 Rollup 4.60.3 模块打包
CSS 预处理 Sass 1.99.0 样式
代码规范 ESLint 10.3.0 + @typescript-eslint 代码检查
Node 环境 Node.js ≥ 20.19.0 运行时

2.2 源码目录架构

复制代码
supersplat/src/
├── core/                    # 核心引擎层
│   ├── events.ts            # 中央事件总线(系统神经中枢)
│   ├── edit-history.ts      # 异步操作队列(Undo/Redo 保障)
│   ├── scene.ts             # 3D 场景管理
│   └── splat/               # 高斯数据结构与管理
│
├── shaders/                 # 自定义着色器(12 种)
│   ├── splat-shader.ts      # 主渲染着色器(核心中的核心)
│   ├── splat-overlay-shader.ts  # 选中高亮覆盖层
│   ├── intersection-shader.ts   # 射线-高斯相交检测(鼠标拾取)
│   ├── position-shader.ts       # 高斯中心点渲染(点云模式)
│   ├── infinite-grid-shader.ts  # 无限网格地面
│   ├── box/sphere-shape-shader.ts  # 3D 选区可视化
│   ├── outline-shader.ts        # 选中物体轮廓描边
│   └── bound/debug/blit-shader.ts  # 调试与帧缓冲
│
├── tools/                   # 编辑工具(11 个)
│   ├── select/              # 选择工具(8 种)
│   │   ├── rect-select.ts   # 矩形框选(屏幕空间)
│   │   ├── poly-select.ts   # 多边形框选(屏幕空间)
│   │   ├── lasso-select.ts  # 套索选择(屏幕空间)
│   │   ├── brush-select.ts  # 笔刷选择(3D 涂抹)
│   │   ├── sphere-select.ts # 球体选择(3D 空间)
│   │   ├── box-select.ts    # 立方体选择(3D 空间)
│   │   ├── flood-fill.ts    # 洪水填充(选相似高斯)
│   │   └── eyedropper.ts    # 颜色吸管
│   ├── transform/           # 变换工具(3 种)
│   │   ├── translate.ts     # 平移
│   │   ├── rotate.ts        # 旋转
│   │   └── scale.ts         # 缩放
│   └── measure.ts           # 空间距离测量
│
├── ui/                      # UI 系统(PCUI)
│   ├── localization.ts      # 多语言注册
│   ├── panels/              # 7 个独立面板
│   │   ├── data-panel.ts    # 数据面板(属性编辑)
│   │   ├── view-panel.ts    # 视图面板
│   │   ├── timeline-panel.ts # 时间线面板
│   │   ├── scene-panel.ts   # 场景面板
│   │   └── ...
│   └── components/          # UI 组件
│
├── io/                      # 文件 I/O
│   ├── import-ply.ts        # PLY 导入
│   ├── import-splat.ts      # SPLAT 导入
│   ├── import-sog.ts        # SOG 导入(WebP 压缩)
│   ├── export-ply.ts        # PLY 导出
│   ├── export-sog.ts        # SOG 导出
│   └── sog-codec.ts         # SOG WebP 编解码(WASM)
│
└── operations/              # 操作层(编辑操作的原子单元)
    ├── delete.ts            # 删除高斯
    ├── transform.ts         # 变换操作
    ├── color.ts             # 颜色修改
    └── ...

2.3 事件驱动启动流程

复制代码
┌─────────────────────────────────────────────────────────┐
│                 SuperSplat 启动序列                       │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  1. Events(中央事件总线)                                │
│     └── 所有模块通过事件通信,零直接依赖                   │
│                                                         │
│  2. EditHistory(异步操作队列)                           │
│     └── editQueue 串行化所有编辑操作                     │
│     └── 保证 Undo/Redo 确定性                           │
│                                                         │
│  3. localizeInit(多语言初始化)                          │
│     └── i18next 加载语言包                               │
│                                                         │
│  4. EditorUI(界面构建)                                  │
│     └── PCUI 框架创建 7 个独立面板                       │
│                                                         │
│  5. createGraphicsDevice(GPU 设备创建)                  │
│     └── WebGL2 设备,antialias:false, depth:false        │
│                                                         │
│  6. Scene(场景初始化)                                   │
│     └── 加载高斯数据到 GPU                               │
│                                                         │
│  7. ToolManager(工具注册)                               │
│     └── 11 个工具通过统一接口注册                         │
│                                                         │
└─────────────────────────────────────────────────────────┘

2.4 事件总线设计:模块解耦的关键

typescript 复制代码
// 事件驱动的模块解耦
// 颜色系统监听 → events.on('selectedClr', updateColorPanel)
// 背景系统监听 → events.on('setBgClr', updateBackground)
// 数据面板监听 → events.on('selection.changed', refreshDataPanel)

// 没有任何模块直接 import 其他业务模块
// 所有通信通过 Events 实例中转

这个设计让 SuperSplat 的模块化程度极高------添加新工具只需实现接口并加一行注册代码,无需修改任何现有模块。

2.5 异步操作串行化:Undo/Redo 的确定性保障

复制代码
问题:多个异步操作(如旋转 + 撤销)同时操作 GPU 状态 → 竞争条件

解决方案:editQueue 将所有编辑操作排入 EditHistory 队列
┌──────────────────────────────────────────────┐
│  用户操作 → editQueue.enqueue(operation)      │
│  EditHistory 按顺序执行                       │
│  每次 Undo/Redo 回放到精确的历史状态           │
│  GPU 状态始终与操作历史一致                    │
└──────────────────────────────────────────────┘

三、🔥 12 种自定义着色器:为 3DGS 量身定制的渲染管线

3DGS 走的不是传统三角形光栅化管线,因此 SuperSplat 基于 PlayCanvas 实现了 12 个自定义着色器

3.1 核心渲染着色器

着色器 代码量 功能
splat-shader.ts 8.2KB 主渲染核心。3D→2D 投影(协方差矩阵转 2D 椭圆)、α 值计算、深度排序(后往前混合)、自适应大小(LOD 效果)
splat-overlay-shader.ts 6.3KB 单独渲染选中高亮状态的覆盖层
intersection-shader.ts --- 射线与高斯相交检测,实现鼠标精准拾取
position-shader.ts --- 高斯中心点渲染,用于点云模式显示

3.2 辅助着色器

着色器 功能
infinite-grid-shader.ts 无限网格地面,提供空间参考
box-shape-shader.ts 盒状选择区域的 3D 可视化
sphere-shape-shader.ts 球状选择区域的 3D 可视化
outline-shader.ts 选中物体的轮廓描边,提升可见度
bound-shader.ts 边界框可视化
debug-shader.ts 法线/深度调试渲染
blit-shader.ts 帧缓冲复制(截图导出用)

3.3 🔥 性能关键决策:关闭深度测试

typescript 复制代码
// 创建 WebGL2 设备时的关键参数
createGraphicsDevice(canvas, {
    antialias: false,   // 关闭抗锯齿
    depth: false,       // 关闭深度缓冲 ← 关键!
    stencil: false      // 关闭模板缓冲
})

为什么关闭深度测试?

因为 3DGS 的渲染方式是 α-blending(后往前排序混合),不是传统 Z-buffer 深度测试。每个高斯椭球体是半透明的,需要按深度排序后逐个混合到帧缓冲中。深度缓冲在这里完全多余,关闭后大幅节省 GPU 带宽

3.4 主渲染着色器核心流程

复制代码
┌─────────────────────────────────────────────────────────┐
│              splat-shader.ts 渲染流程                     │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  1. 接收高斯数据                                         │
│     位置(μ) + 协方差(Σ) + 球谐颜色(SH) + 透明度(α)       │
│                                                         │
│  2. 3D→2D 投影变换                                      │
│     协方差矩阵 × 视图矩阵 × 投影矩阵 → 2D 椭圆参数       │
│     (中心点 + 长轴/短轴 + 旋转角度)                      │
│                                                         │
│  3. 深度排序(CPU 端)                                   │
│     按深度值后往前排序 → 保证正确的 α 混合顺序            │
│                                                         │
│  4. 逐高斯渲染                                           │
│     在 Fragment Shader 中计算每个像素的高斯贡献值         │
│     color = SH(方向) × gaussian_2d(x, y) × α           │
│                                                         │
│  5. α-blending 混合                                     │
│     result = src × srcAlpha + dst × (1 - srcAlpha)      │
│                                                         │
└─────────────────────────────────────────────────────────┘

四、🔥 11 个编辑工具:选择 × 变换 × 测量

4.1 工具分类总览

复制代码
┌──────────────────────────────────────────────────────────┐
│                 SuperSplat 编辑工具生态                     │
├──────────────────────────────────────────────────────────┤
│                                                          │
│  8 种选择工具                                             │
│  ├── 屏幕空间:矩形框选 / 多边形框选 / 套索选择           │
│  ├── 3D 空间:球体选择 / 立方体选择                       │
│  ├── 智能:笔刷选择(3D 涂抹)/ 洪水填充(选相似高斯)   │
│  └── 特殊:颜色吸管                                      │
│                                                          │
│  3 种变换工具                                             │
│  └── 平移 / 旋转 / 缩放                                  │
│                                                          │
│  1 种测量工具                                             │
│  └── 空间距离测量                                        │
│                                                          │
└──────────────────────────────────────────────────────────┘

4.2 选择工具详解

工具 空间 工作原理 适用场景
矩形框选 2D 屏幕空间 在屏幕上画矩形,投射到 3D 空间选高斯 快速选大区域
多边形框选 2D 屏幕空间 画不规则多边形 精确选择不规则形状
套索选择 2D 屏幕空间 自由绘制闭合曲线 精细选择复杂轮廓
笔刷选择 3D 空间 3D 涂抹选中(像 PS 画笔) 局部精细编辑
球体选择 3D 空间 3D 球体范围内的所有高斯 空间区域选择
立方体选择 3D 空间 3D 盒状范围内的所有高斯 裁剪场景边缘
洪水填充 智能算法 自动选择相似属性(颜色/位置)的高斯 一键选天空/地面
颜色吸管 智能算法 点选一个高斯,选中所有同色高斯 按颜色分类选择

4.3 选择工具的 GPU 加速机制

选择工具的核心优化在于避免 GPU 读回(Readback)瓶颈

typescript 复制代码
// 传统方案:GPU 渲染 → 读回 CPU → CPU 判断选区 → 性能极差
// SuperSplat 方案:使用独立的 2D maskCanvas 进行像素级选区运算
maskCanvas.globalCompositeOperation = 'copy';  // 避开 GPU 读回
// 所有选区运算在 2D Canvas 上完成,完全不走 GPU 回读

4.4 工具注册机制

typescript 复制代码
// 统一接口 → ToolManager 注册
// 添加新工具只需:
// 1. 实现 ITool 接口
// 2. 在 ToolManager 中加一行注册代码
// 无需修改任何现有模块(事件驱动解耦)

五、文件格式矩阵:PLY / SPLAT / SOG 三格式工作流

5.1 格式对比

特性 .ply .splat .sog(自研)
性质 通用点云格式 PlayCanvas 紧凑格式 SuperSplat 优化格式
压缩方式 无(原始 ASCII/Binary) 紧凑二进制 WebP 图像压缩
典型体积 300MB-1GB 100-300MB 60-100MB(↓60-80%)
加载速度 慢(需解析大量数据) 最快
数据完整性 完整(所有高斯属性) 保留核心属性 完整 + 编辑元数据
工具兼容性 所有 3DGS 工具 PlayCanvas 生态 仅 SuperSplat
元数据支持 支持(注释/相机路径)
适用场景 训练输出/跨工具交换 Web 发布 SuperSplat 项目存档

5.2 SOG 格式:SuperSplat 的核心创新

SOG = SuperSplat Optimized Gaussian

这是 SuperSplat 自研的优化格式,关键创新在于:

复制代码
PLY 格式(传统):
├── 每个高斯存储:位置(3×float) + 协方差(6×float) + 颜色(3×uint8) + 透明度(1×float)
├── 数据量:约 50 bytes/高斯
└── 100 万高斯 ≈ 50MB

SOG 格式(自研):
├── 将高斯数据编码为图像像素
├── 使用 WebP 图像压缩算法
├── WebPCodec.wasm 进行编解码
├── 数据量:约 10-20 bytes/高斯
└── 100 万高斯 ≈ 10-20MB(↓60-80%)

WebP 编解码 :通过 @playcanvas/splat-transform 中的 WebAssembly 模块实现,在浏览器中以接近原生的速度完成编解码。

5.3 导入导出流程

复制代码
┌─────────────────────────────────────────────────────────┐
│                 SuperSplat I/O 流程                       │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  导入                                                    │
│  ├── .ply → 解析 COLMAP/3DGS 标准输出                    │
│  ├── .splat → 解析 Anti-Martian 紧凑格式                 │
│  └── .sog → WebPCodec.wasm 解码 → 高斯数据               │
│                                                         │
│  导出                                                    │
│  ├── .ply → 标准格式(跨工具交换)                        │
│  ├── .sog → WebPCodec.wasm 编码(压缩 60-80%)           │
│  ├── .png → 截图导出                                     │
│  └── .svg → 矢量标注导出                                  │
│                                                         │
│  特殊                                                    │
│  └── PWA launchQueue → 双击本地 .ply 直接唤起编辑器       │
│                                                         │
└─────────────────────────────────────────────────────────┘

5.4 PWA 文件关联

SuperSplat 支持 PWA(Progressive Web App)集成,注册浏览器的 launchQueue 文件关联。用户双击本地的 .ply 文件,可以直接唤起浏览器中的 SuperSplat 编辑器打开------就像原生桌面应用一样。


六、UI 系统:7 面板 + 时间线 + 多语言

6.1 UI 架构

SuperSplat 采用 PlayCanvas 自家的 PCUI 框架(非 React/Vue),构建了 7 个独立面板:

复制代码
┌──────────────────────────────────────────────────────────┐
│                    SuperSplat UI 布局                      │
├────────┬─────────────────────────────────────┬───────────┤
│        │                                     │           │
│ 工具栏  │         主 3D 视口                   │  属性面板  │
│ (左侧)  │     (WebGL 实时渲染)                │  (右侧)   │
│        │                                     │           │
│        │                                     │           │
├────────┴─────────────────────────────────────┴───────────┤
│  时间线面板(底部)                                        │
└──────────────────────────────────────────────────────────┘

7 个独立面板:
├── Data Panel     # 数据面板(选中高斯的属性编辑)
├── View Panel     # 视图面板(相机/显示设置)
├── Timeline Panel # 时间线面板(关键帧动画)
├── Scene Panel    # 场景面板(场景树/图层管理)
├── Tools Panel    # 工具面板(编辑工具切换)
├── Hierarchy      # 层级面板
└── Project        # 项目面板

6.2 时间线动画系统

复制代码
时间线功能:
├── 导入序列 .ply 文件 → 生成帧序列
├── 关键帧记录 → 高斯变换矩阵 + 可见性
├── 相机路径关键帧 → 漫游动画
└── 导出为视频

6.3 多语言支持

语言 文件
英语 en.json
简体中文 zh-CN.json
日语 ja.json
韩语 ko.json
德语 de.json
西班牙语 es.json
法语 fr.json
巴西葡萄牙语 pt-BR.json
俄语 ru.json

切换方式:URL 参数 ?lng=zh-CN


七、性能优化策略:WASM 协处理器 + 渐进加载 + 按需渲染

7.1 三大性能优化手段

复制代码
┌─────────────────────────────────────────────────────────┐
│              SuperSplat 性能优化架构                       │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  1. WASM 协处理器                                       │
│     └── @playcanvas/splat-transform                      │
│     └── 在 WebAssembly 中处理百万级高斯的序列化与排序     │
│     └── 速度远超纯 JavaScript                            │
│                                                         │
│  2. 延迟/渐进加载                                        │
│     └── 异步分批将高斯送入 GPU                           │
│     └── 避免主线程阻塞,保持 UI 响应                     │
│                                                         │
│  3. 按需渲染                                            │
│     └── scene.forceRender = true                         │
│     └── 仅在状态变化时触发渲染                           │
│     └── 无操作时不消耗 GPU 资源                          │
│                                                         │
└─────────────────────────────────────────────────────────┘

7.2 GPU 设备创建优化

typescript 复制代码
// 关闭不必要的 GPU 功能
createGraphicsDevice(canvas, {
    antialias: false,   // α-blending 不需要抗锯齿
    depth: false,       // α-blending 不需要深度测试
    stencil: false      // 不需要模板缓冲
})
// 结果:大幅节省 GPU 带宽和显存占用

7.3 场景优化效果参考

优化目标 实现方法 预期效果
减小文件体积 SOG 压缩导出、移除重复高斯 ↓50-80%
提升渲染帧率 按需渲染、LOD 优化 ↑2-3×
降低内存占用 渐进加载、清理噪点 ↓30-50%

八、发布管线:从编辑器到 Web 世界

8.1 三种发布路径

复制代码
┌─────────────────────────────────────────────────────────┐
│                 SuperSplat 发布管线                        │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  路径 1:一键发布到 PlayCanvas CDN(官方推荐)             │
│  ├── 菜单 → Publish → To PlayCanvas CDN                  │
│  ├── 登录 PlayCanvas 账号                                │
│  ├── 设置项目名称、是否公开、是否启用流式加载             │
│  └── 获得唯一访问链接,直接分享                           │
│                                                         │
│  路径 2:嵌入自有网站                                     │
│  ├── 先发布到 PlayCanvas CDN,获取 URL                   │
│  └── iframe 嵌入代码:                                   │
│      <iframe src="https://playcanvas.com/super-splat/    │
│      viewer/?url=你的场景URL" />                         │
│                                                         │
│  路径 3:社交媒体分享                                     │
│  ├── 支持 Twitter/X、Reddit 等                           │
│  └── 自动生成预览图 + 访问链接                            │
│                                                         │
└─────────────────────────────────────────────────────────┘

8.2 查看器三种相机模式

模式 说明
Orbit(轨道) 围绕场景中心旋转,适合展示
Fly(飞行) 自由飞行,适合场景探索
Walk(步行) 地面行走,适合沉浸式体验

8.3 碰撞生成功能(v2.25+ 新增)

最新版本已新增**碰撞网格生成(Collision Generation)**功能,可为 3DGS 场景生成碰撞体------这是将扫描场景直接变成可交互游戏关卡的关键能力。

PlayCanvas 在官方博客中分享了案例《Turning a Gaussian Splat Into a Videogame》:用 SuperSplat 下载扫描场景 → 生成碰撞网格 → 直接在浏览器中做成 FPS 游戏。


九、完整安装部署指南

9.1 在线使用(零配置)

复制代码
直接访问:https://superspl.at/editor
拖拽 .ply / .splat / .sog 文件到浏览器即可开始编辑

9.2 本地开发部署

bash 复制代码
# 1. 克隆仓库
git clone https://github.com/playcanvas/supersplat.git
cd supersplat

# 2. 安装依赖(Node.js >= 20.19.0)
npm install

# 3. 启动开发服务器
npm run develop

# 4. 禁用浏览器缓存(重要!)
# Safari: Cmd+Option+E 或 Develop → Empty Caches
# Chrome: Application → Service Workers
#   → 勾选 "Update on reload" + "Bypass for network"

# 5. 访问编辑器
# http://localhost:3000

9.3 开发命令速查

命令 功能
npm run develop 开发模式(watch + serve,推荐)
npm run develop:auto-launch 开发模式 + 自动打开浏览器
npm run build 生产构建(Rollup)
npm run watch 监听模式,文件变化自动重建
npm run serve 静态文件服务器(端口 3000)
npm run lint ESLint 代码检查

十、与传统工具对比

特性 SuperSplat Blender Unity/Unreal InstantNGP
平台 浏览器(跨平台) 桌面应用 桌面应用 桌面应用
编辑对象 Gaussian Splats Mesh / 粒子 Mesh + 3DGS 插件 NeRF / 3DGS
操作门槛 (拖拽为主) 高(复杂 3D 技能)
实时预览 ✅ 原生 WebGL 60fps ⚠️ 需插件 ⚠️ 需插件 ⚠️ 需 CUDA
安装要求 (浏览器即用) 需安装 需安装 需安装 + GPU
开源协议 ✅ MIT ✅ GPL ❌ 商业 部分开源
文件格式 PLY/SPLAT/SOG 通用 3D 格式 通用 3D 格式 自定义
协作 网页链接即分享 本地文件 本地项目 本地文件
移动端 ✅ 支持

十一、🔥 架构核心原则总结

通过完整拆解 SuperSplat,可以提炼出 6 条架构核心原则

原则 1:事件驱动,零耦合

所有模块通过中央 Events 事件总线通信,零直接 import 依赖。添加新功能只需监听事件 + 注册工具,无需修改现有代码。

原则 2:异步操作串行化

editQueue 将所有编辑操作排入 EditHistory 队列,彻底避免多异步操作竞争 GPU 状态,保证 Undo/Redo 的确定性。

原则 3:自研格式解决核心痛点

SOG 格式利用 WebP 图像压缩,体积比 PLY 缩小 60-80%。不依赖第三方格式,自己掌握核心数据链路。

原则 4:WASM 协处理器处理重计算

百万级高斯的序列化、排序、编解码全部在 WebAssembly 中完成,速度远超纯 JavaScript,不阻塞主线程。

原则 5:按需渲染节省 GPU 资源

scene.forceRender = true 标记机制,仅在状态变化时触发渲染。无操作时不消耗 GPU 资源。

原则 6:Engine Agnostic(引擎无关)

虽然基于 PlayCanvas 引擎构建,但导出的 PLY/SPLAT 文件可以被 Unity、Unreal、Three.js 等任意引擎消费。编辑器不绑定渲染引擎。


十二、开发检查清单

如果你想基于 SuperSplat 的模式构建自己的 3D 编辑器或 Web 3D 工具,参考以下清单:

  • 事件驱动架构:中央 Events 总线 + 模块间零直接依赖
  • 异步操作队列:editQueue + EditHistory 串行化
  • 自定义着色器体系:针对特定渲染管线(非标准光栅化)的专用 Shader
  • GPU 读回规避:使用 2D Canvas 做选区运算,避免 GPU→CPU 回读瓶颈
  • WASM 协处理器:重计算任务放到 WebAssembly 中
  • 自研优化格式:针对特定数据的压缩编码方案
  • 按需渲染:脏标记 + 仅在状态变化时触发 GPU 渲染
  • 渐进加载:异步分批加载数据到 GPU
  • PWA 集成:launchQueue 文件关联 + Service Worker 缓存
  • 多语言框架:i18next + URL 参数切换
  • 统一工具接口:ITool 接口 + ToolManager 注册
  • 关闭不必要的 GPU 功能:antialias/depth/stencil 按需开关

十三、技术演进方向

13.1 已实现

  • ✅ 145+ 版本迭代(平均 3-4 天一版)
  • ✅ 12 种自定义着色器
  • ✅ 11 个编辑工具
  • ✅ SOG 自研压缩格式(WebP 编解码)
  • ✅ 碰撞网格生成(v2.25+)
  • ✅ 时间线动画系统
  • ✅ 一键发布到 PlayCanvas CDN

13.2 进行中

  • 🔄 WebGPU 支持(利用 Compute Shader 在 GPU 端直接排序,解决 CPU 排序瓶颈)
  • 🔄 流式加载(结合视锥体裁剪,突破内存限制)
  • 🔄 协作编辑(基于事件同步 + 操作压缩架构)

13.3 未来展望

  • 🔮 城市级大场景支持(1 亿+ 高斯)
  • 🔮 多人实时浏览器协同编辑
  • 🔮 AI 辅助编辑(自动清理噪点、智能补全缺失区域)

十四、总结

维度 评价
技术深度 ⭐⭐⭐⭐⭐ 12 种自定义着色器、WASM 协处理器、事件驱动架构
工程质量 ⭐⭐⭐⭐⭐ 145+ 版本、严格模块化、纯 TypeScript
生态价值 ⭐⭐⭐⭐⭐ 填补 3DGS 编辑空白、引擎无关、MIT 协议
用户体验 ⭐⭐⭐⭐⭐ 浏览器即用、零安装、9 种语言
创新性 ⭐⭐⭐⭐☆ SOG 格式、碰撞生成、PWA 文件关联

一句话总结:SuperSplat 不只是一个编辑器------它是 3D Gaussian Splatting 从「实验室技术」走向「生产级内容工作流」的关键桥梁。


资源汇总

资源 链接
GitHub 仓库 https://github.com/playcanvas/supersplat
在线编辑器 https://superspl.at/editor
官方产品页 https://playcanvas.com/products/supersplat
开发者文档 https://developer.playcanvas.com/user-manual/gaussian-splatting/editing/supersplat/
官方 Discord https://discord.gg/playcanvas
论坛 https://forum.playcanvas.com/

下期预告:深度拆解一个来自顶尖 AI 实验室的开源项目------敬请期待!

💬 讨论:你觉得 3D Gaussian Splatting 会取代传统 3D 建模吗?SuperSplat 的浏览器端架构是否适合你的三维内容工作流?欢迎在评论区分享你的看法。


本文基于 SuperSplat 仓库(v2.26.1,2026 年 5 月 17 日)及多个第三方技术分析整理,所有技术细节均经过交叉验证。如发现任何不准确之处,欢迎指正。

相关推荐
Mem0rin1 小时前
[Agent基础]Agent、消息和聊天模板
人工智能·transformer
智信中科张炜1 小时前
全球及中国二板注塑机市场前景形势分析报告
人工智能
升鲜宝供应链及收银系统源代码服务1 小时前
升鲜宝 AI 供应链分析方案业务分析、智能预警与实施落地方案(一)---升鲜宝生鲜配送供应链管理系统源代码服务
人工智能·生鲜供应链源代码·供应链源代码出售·生鲜配送源代码服务·猪肉生产加工系统源代码·生鲜供应链系统·生鲜配送系统ai应用
编程牛马姐1 小时前
爬虫开发工具测评:Playwright vs Puppeteer
人工智能
andafaAPS1 小时前
安达发|aps高级排产:电动工具行业智能制造的核心引擎
大数据·人工智能·制造·安达发aps·aps高级排产·aps自动排产
大模型最新论文速读1 小时前
05-29 · LLM 最新论文速览
论文阅读·人工智能·深度学习·机器学习·自然语言处理
杀生丸学AI1 小时前
【三维重建】RT-Splatting:基于3DGS的联合反射-透射建模(CVPR 2026)
人工智能·深度学习·3d·三维重建·高斯泼溅·动态重建·镜面反射
STRUGGLE_xlf1 小时前
Codex × PPT Skill:一句话生成演示文稿
人工智能·powerpoint·智能体
人工智能AI技术1 小时前
深度拆解Opus 4.8:Dynamic Workflows重构AI开发模式
人工智能