距离新模型 Marble 1.1&1.1-Plus 发布不到一个周,李飞飞空间智能独角兽 World Labs 再度传来新消息------
开源 3D 高斯溅射渲染引擎 Spark 2.0。
我们为 3D 高斯溅射_(3D Gaussian Splatting)_打造了可流式传输的 LoD 系统,重新定义了 web 3D 渲染的可能性。
Spark 2.0 基于 Three.js 构建,用户可以通过 WebGL2,将包含 1 亿 + splats(3D 高斯点 / 泼溅点)的超大规模 3D 世界,流式传输到任意设备上,包括桌面、iOS、Android、VR。

例如下面的 Coit Tower 场景由超 4000 万个 splats 构成,却能在浏览器中实现完全交互:

在官方 Blog 中还有更多 3D 场景可以点开体验:

传统 3D 建模通过带纹理映射的三角形,一块一块拼出物体的表面。
3D 高斯溅射(3D Gaussian Splatting)则采用数百万个半透明椭球体(也就是 splats),通过这些椭球体的色彩融合,呈现出超写实的细节效果:

什么是 splat?
每一个 splat 都由位置、XYZ 三轴缩放、旋转角度、颜色、不透明度这 5 个属性定义。
将 splat 渲染到屏幕上最常见的方法是画家算法(painter's algorithm)。
就像画画时先画远处的、再画近处的,把几百万个小椭球按从远到近的顺序排好,一层一层叠上去,实时算出最终画面。
这就像是数字版点彩画,只不过用的是 3D 高斯分布轮廓来作画。

对于这项成果,李飞飞第一时间给到了评论:
Spark 2.0 现已可在任意设备上流式渲染超 1 亿 splats!能为基于网页的 3D 高斯溅射渲染开源生态贡献力量,我深感自豪!

Spark 系统设计
Spark 前身是 World Labs 开发的一款内部 3D 高斯溅射渲染引擎。
彼时市面上的 web 渲染引擎均存在明显短板,例如,部分引擎一次只能正确渲染一个 3D 高斯溅射对象;部分引擎无法不能动态动画化 splats;还有些引擎基于小众 3D 框架开发,或采用尚未普及的 WebGPU 技术,导致设备兼容性受限。
这款内部渲染引擎曾亮相于团队 2024 年发布的大型世界模型研究预览,以及早期场景展示项目 Lofi Worlds。

为了让更多开发者都能打造交互式 3D 高斯溅射 web 体验,团队整合技术积累,在去年开源了一款通用型 3D 高斯溅射渲染引擎。
当时名字还叫做Forge,量子位当时也有介绍,后改名 Spark。

Spark 基于主流 THREE.js 框架构建而成。同时,团队将技术底座定为 WebGL2,这是目前唯一能在几乎所有设备上稳定运行的 3D web API。
团队表示,Spark 的研发过程始终与 Marble 同步推进。
官方 Blog 中详细介绍了 Spark 的技术细节。
全新 Spark 2.0 实现了超大规模 3D 高斯溅射场景在网页端的预处理、流式加载与跨设备渲染。
Virtual Memory
虚拟内存是一种经典的内存管理技术,通过划分固定大小的内存页,构建页表映射关系,用有限的物理内存,模拟出容量巨大的虚拟内存空间。
Spark 2.0 将这一技术创新性地应用于 3D 高斯溅射渲染:
它会在 GPU 中预先分配一个固定大小的内存池(容量为 1600 万个 splats),并构建一套页表映射机制,将 GPU 中的 64K splats"内存页",与 RAD 文件中的 64K 泼溅点数据块一一对应。

数据块的加载与置换规则如下:
-
根据 LoD splat trees 的遍历结果,将高优先级的数据块加载到空闲的 GPU 内存页中。
-
当 GPU 内存池被占满,且需要加载新的高优先级数据块时,会采用 LRU 算法,将优先级最低的内存页中的数据块置换出去。
Spark 的这一设计具备极高的灵活性:它支持同时加载多个 RAD 文件,并让这些文件共享同一个 GPU 内存池。对于每个 RAD 文件,Spark 都会维护两套映射关系:从数据块到内存页的映射,以及从内存页到文件和数据块的反向映射。
在对多个细节层次泼溅树进行遍历时,Spark 会统一记录所有文件的数据块访问顺序,最终生成一个全局数据块优先级列表,从而实现跨所有 3D 高斯溅射对象的加载与存储优化。
官方 Blog 中还介绍了更多技术细节,感兴趣的童鞋传送门在这里:
www.worldlabs.ai/blog/spark-...
参考链接:x.com/i/trending/...
欢迎在评论区留下你的想法!
--- 完 ---