李飞飞空间智能独角兽World Labs再度传来新消息——开源3D高斯溅射渲染引擎Spark 2.0。距离新模型Marble 1.11.1-Plus发布不到一个周李飞飞空间智能独角兽World Labs再度传来新消息——开源3D高斯溅射渲染引擎Spark 2.0。我们为3D高斯溅射3D Gaussian Splatting打造了可流式传输的LoD系统重新定义了web 3D渲染的可能性。Spark 2.0基于Three.js构建用户可以通过WebGL2将包含1亿splats3D高斯点/泼溅点的超大规模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高斯溅射场景在网页端的预处理、流式加载与跨设备渲染。关键在于融合了三项技术细节层次技术LoDLevel-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分块处理时块与块之间的边界也会清晰可见。Spark采用的是连续型Level-of-Detail核心是为所有splats构建一个层级化结构——Level-of-Detail Gaussian splat tree。Spark会沿着该树的边界精准筛选出最适合当前视口的splats子集实现平滑无断层的细节过渡。Spark 2.0内置了两种Level-of-Detail Gaussian splat tree生成算法Tiny-LoD算法一种快速且轻量的算法默认用于网页端的实时生成场景。Bhatt-LoD算法一种高精度算法默认用于命令行工具的离线处理场景。这两种算法均为无训练依赖的方案无需参考图像或其他额外输入数据直接对3D高斯溅射数据进行处理即可。除此之外Spark也兼容其他第三方生成算法例如NanoGS。Progressive StreamingSpark 2.0定义了一种全新的文件格式——.RAD全称Radiance Fields辐射场。该格式不仅能有效压缩3D高斯溅射数据还支持随机访问流式加载实现了场景的渐进式精细化渲染完美适配网络传输场景。采用RAD格式后3D高斯溅射对象能立即以一个包含64Ksplats的粗糙版本呈现随后系统会根据用户视角优先获取用于优化可见区域细节的数据块实现动态的优先级调整。LoD splat tree本质上是一个四维结构包含三维空间维度与一维细节层次维度。要实现流式加载的渐进式精细化渲染必须将LoD splats 以合理的方式划分到RAD文件的各个数据块中。实现这一目标的策略有很多Spark采用的策略核心是空间邻近性优先将三维空间递归划分为更小的区域每个数据块都会按“从大到小”的顺序填充对应空间区域内的splats确保每个数据块都能最大化呈现该区域的细节。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中还介绍了更多技术细节感兴趣的童鞋传送门在这里https://www.worldlabs.ai/blog/spark-2.0#lod-splat-tree