Spark 2.0:李飞飞团队开源的流式 3D 高斯溅射引擎,10亿溅射体在手机浏览器流畅渲染
2026 年 4 月中旬。当整个 AI 世界还在追逐越来越大的语言模型时,视觉计算领域的一场悄然革命刚刚落地。由李飞飞创立的 World Labs 开源的 3D 高斯溅射渲染器 Spark 2.0,自带了一套层级细节(LOD)流式传输系统——让你的手机浏览器也能流畅渲染包含十亿个溅射体的场景。这不是夸张,往下看。
一句话了解
Spark 是一个 MIT 协议开源的 3D 高斯溅射(3DGS)渲染器,深度集成 THREE.js——网页端最主流的 3D 图形库。它把「溅射体」(tiny oriented Gaussian blobs)当作场景图的一等公民,与传统的三角面片网格混排、叠加着色器特效、实时动画化。2.0 版本直接把格局改了。
核心卖点:流式 LOD 系统 + 虚拟内存管理器。简单说就是把操作系统里的分页模型搬到了 3D 渲染领域。Spark 预分配一个固定大小的 GPU 内存池(默认 1600 万溅射体),按需通过 HTTP Range 请求拉取数据块,用 LRU 策略淘汰最不重要的旧数据。结果:包含上亿甚至十亿+溅射体的场景,在任何设备上都能保持稳定可调的帧率——从 Vision Pro 到千元安卓手机。
为什么这件事重要
在 Spark 2.0 之前,网页端的 3DGS 浏览器都有硬伤。加载一个几 GB 的 .PLY 文件会让浏览器直接崩溃——因为无法分配那么大的缓冲区。实时排序几百万个溅射体是计算瓶颈。大坐标系场景会出现明显的量化失真(条纹和闪烁)。Spark 2.0 一次性解决了这三个问题。
技术拆解:
-
LOD 溅射树:任何溅射体文件都可以转化为一棵树。内部节点是逐级降采样的溅射体,一直到最顶端的「根溅射体」——整个场景的平均颜色和形状。渲染时 Spark 在 O(N log N) 时间内计算树的最优切片,精确选取当前视角下视觉最重要的 N 个溅射体。
-
组合 LOD 世界:把多个 SplatMesh 对象随意散布在空间中,Spark 会联合遍历所有 LOD 树,计算全局最优子集。这意味着你可以用模块化的方式构建超大世界——每个部分独立可编辑,各有自己的着色器效果图。
-
.RAD 格式:一种全新的可扩展文件格式,专为流式传输设计。加载从最粗粒度的根溅射体开始,随网络带宽逐步填充细节。首帧瞬出,持续精化。
-
双 LOD 算法:
tiny-lod在浏览器 WebWorker 中按需运行(每 100 万输入溅射体耗时 1-3 秒)。bhatt-lod是为高质量预处理的离线算法。两者都有 Rust 写的命令行工具。 -
ExtSplats:32 字节编码,float32 中心坐标,彻底消除了 16 字节编码在大坐标系场景中的量化失真问题。

竞品格局
3DGS 生态一直是碎片化的。Inria/GraphDeco 的原始参考实现(GitHub 21k stars)是研究代码,不是应用级渲染引擎。其他网页端查看器各有限制:

| 项目 | Stars | 定位 | 软肋 |
|---|---|---|---|
| antimatter15/splat | 3k | WebGL 溅射浏览器 | 单个静态场景,无动态编辑 |
| mkkellogg/GaussianSplats3D | 2.7k | THREE.js 集成 | 单对象,无 LOD,无流式传输 |
| PlayCanvas Engine | 14.8k | 完整网页图形运行时 | 3DGS 只是格式插件,不是可编程引擎 |
| Spark 2.0 | 2.9k | 可编程 3DGS 渲染器 + LOD 流式 | 社区较小,但引擎更丰富 |
Spark 定位独特:它不是查看器,而是可编程渲染引擎。其 Dyno 着色器图系统允许组装任意 GLSL 计算图——程序化生成溅射体、实时调色、位移变形、骨骼动画。Spark 2.0 甚至允许注入自定义的顶点和片段着色器代码,无需 fork 库。
更大的图景:空间智能
Spark 不是孤立的项目。World Labs 由李飞飞创立,2026 年 2 月宣布新融资,正在构建他们所称的「空间智能」(Spatial Intelligence)——能感知、推理并交互于 3D 世界的 AI。他们的产品 Marble 可以从文字、图片或视频生成可交互的 3D 世界。Spark 是消费层:让这些世界在任何有浏览器的设备上可访问的渲染器。
换句话说,Spark 之于 World Labs,就像网页浏览器之于互联网。Marble 生成内容,Spark 渲染内容。两者组成了 AI 生成沉浸式体验的端到端管线。
这值得注意,因为它与空间计算领域常见的「围墙花园」策略背道而驰。Apple Vision Pro 开发者需要 Xcode、Apple Developer 账号、以及数千美元的设备。而 Spark 在 200 美元安卓手机的浏览器里就能跑同样的内容,无需应用商店审核。网页作为空间计算平台不是新概念,但 Spark 2.0 第一次让它在大规模场景上真正可行。
一组数字
- 146,000 npm 最近 30 天下载量
- 250 万 桌面端默认溅射体预算
- 50 万 Oculus Quest 溅射体预算
- 1-3 秒 在浏览器 WebWorker 中从 100 万溅射体构建 LOD 树
- 98%+ WebGL2 设备覆盖率目标
- 3,900+ 人为 Spark 项目做出贡献
哪些还在早期
Spark 2.0 从 0.1 的跳跃很大——迁移指南甚至专门记录了破坏性变更。部分特性挂着「实验性」标签:用于各向异性缩放的协方差溅射体、用于角色动画的线性混合蒙皮、以及用于非连续场景空间的实时溅射体传送门。LOD 系统本身还有可调的眼动追踪注视点参数(锥角、后方缩放),开发者需要花时间在质量和性能之间找到平衡。
.RAD 格式很新,创作工具尚未广泛支持。文档质量不错但仍在扩张。而社区——2.9k stars 对比 PlayCanvas 的 14.8k——还在早期。
但这些不是弱点。这是一个刚刚跨过「有前景的实验」与「严肃平台」门槛的项目所呈现的形态。World Labs 以 MIT 协议发布 Spark,对 Marble 生态不做锁定,这传递了战略自信:当基础设施是开放的,价值就会向内容创作层转移。
五分钟上手
三行代码把一个 LOD 溅射树放进你的页面:
<script type="importmap">
{
"imports": {
"three": "https://cdnjs.cloudflare.com/ajax/libs/three.js/0.180.0/three.module.js",
"@sparkjsdev/spark": "https://sparkjs.dev/releases/spark/2.0.0/spark.module.js"
}
}
</script>
<script type="module">
import * as THREE from "three";
import { SparkRenderer, SplatMesh } from "@sparkjsdev/spark";
const scene = new THREE.Scene();
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
const spark = new SparkRenderer({ renderer });
scene.add(spark);
const splats = new SplatMesh({
url: "./my-scene-lod.rad",
paged: true, // HTTP Range 流式加载
});
scene.add(splats);
renderer.setAnimationLoop(() => renderer.render(scene, camera));
</script>
先用命令行预构建 LOD 树:
npm run build-lod -- my-scene.spz --quality
这会产生 my-scene-lod.rad,立即可加载、逐步流式传输。
我为什么关注
我看着 3D 网页经历了好几波炒作周期——WebGL、WebXR、glTF、USDZ——每一个都承诺让沉浸式内容变得触手可及,但每一个在「触手可及」这一项上都掉了链子。瓶颈从来不是渲染 API,而是内容:如何创建、流式传输、组合海量 3D 场景,让它看起来像照片级真实、又不需要一台游戏 PC?
高斯溅射解决了创建问题(从照片或 AI 生成)。Spark 2.0 解决了交付问题(通过 HTTP 流式传输,在任何设备上渲染)。这种组合让我觉得,这次可能真的不一样。
如果你在做任何涉及网页端 3D 可视化的东西——电商产品展示、建筑漫游、虚拟旅游——你应该盯紧 Spark 2.0。
链接
- Spark 2.0 GitHub:https://github.com/sparkjsdev/spark
- World Labs:https://www.worldlabs.ai
- Spark 文档:https://sparkjs.dev
- 原始 3DGS 论文实现(GraphDeco/Inria):https://github.com/graphdeco-inria/gaussian-splatting
- npm:https://www.npmjs.com/package/@sparkjsdev/spark