tech官小西

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 字节编码在大坐标系场景中的量化失真问题。

Spark 2.0 Streaming LOD Architecture

竞品格局

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

3DGS Web Renderer Landscape

项目 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。


链接