刚刚,李飞飞世界模型新成果发布量子位
距离新模型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高斯溅射场景在网页端的预处理、流式加载与跨设备渲染。
关键在于融合了三项技术:
细节层次技术(LoD,Level-of-Detail):预先生成不同分辨率的splats数据,并根据相机视角智能筛选需要渲染的splats子集。对于距离过远、肉眼无法分辨细节的区域,减少渲染的splats数量,从而显著提升渲染性能。
渐进式流式加载(Progressive Streaming):采用“从粗到精”的加载策略,优先下载能最优化当前视角细节的数据。随着数据逐步下载,场景会不断细化,实现流畅的渐进式呈现。
虚拟内存(Virtual Memory):为splats页表分配固定的GPU内存池,根据用户在场景中的位置,自动置换3D高斯溅射数据块。借助这一技术,即使是通过网络获取的海量跨对象splats数据,也能被高效访问。
下面具体来看。
Level-of-Detail
在计算机图形学领域,Level-of-Detail是处理大型3D场景的经典方案就是。它能根据物体与观察者的距离,自动调整渲染细节。当需要提升帧率时,可以降低细节等级;当用户静止观察时,则可以提高细节等级,呈现更精细的画面。
Level-of-Detail的典型应用是Mipmap纹理映射:
将一张纹理图片逐级下采样,生成一组分辨率依次减半的纹理金字塔,最顶层是单个像素。这一技术能确保在任意距离下,都能快速采样到与屏幕像素尺寸匹配的纹理数据。
Level-of-Detail的实现方案可分为离散型与连续型两大类。
离散型方案需要预先生成多套不同splat数量的模型版本,再根据物体包围盒与相机的距离,切换渲染不同版本。这种方法存在明显缺陷:
当用户在场景中移动时,模型细节的突然切换会产生“跳变”伪影;同时,将splats分块处理时,块与块之间的边界也会清晰可见。


