智东西 04-15
李飞飞世界模型“杀手锏”开源!网页3D大场景秒开,手机畅跑1亿点云
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_keji1.html

 

智东西

作者|王涵

编辑|李水青

智东西 4 月 15 日报道,今天,"AI 教母 " 李飞飞的世界模型团队 World Labs 开源了动态 3D 高斯泼溅(3DGS)渲染器 Spark 2.0。

Spark 2.0 官宣开源(来源:X)

李飞飞本人在该成果发布的第一时间评论称:"Spark 2.0 现在可以在任意设备上流式传输超过 1 亿个高斯泼溅!能够为基于网页的 3DGS 渲染开源生态做出贡献,我们感到无比自豪!"

李飞飞评论(来源:X)

Spark 系列模型于去年首次发布,是一个专为网页构建的动态 3D 高斯泼溅(3DGS)渲染器。它与网页端最流行的 3D 框架 THREE.js 集成,并利用 WebGL2 在任意带有网页浏览器的设备上运行,包括桌面端、iOS、Android 以及 VR 设备。

与上一版本相比,Spark 2.0 新增了一套细节层级(LoD)系统,能够在任意设备上流式传输并渲染超大规模的 3DGS 世界。

在儿童房间里自由探索,物品细节清晰(来源:World Labs 博客)

此外,新版还使用了 .RAD 的 3DGS 文件格式,支持渐进式细化的流式传输,而虚拟泼溅分页系统则通过固定的 GPU 内存分配,实现了对无限泼溅世界的访问,通俗来讲就是可以渲染无限大的 3D 场景。

草原中的洞穴小屋,场景转换无畸变(来源:World Labs 博客)

如此流畅连贯的效果是怎么实现的?针对大规模场景的扩展难题,Spark 2.0 运用了 3 项图形学与系统底层方案:细节层次优化、渐进式流式加载以及虚拟显存管理。

李飞飞团队在博客中,对 Spark 2.0 背后的三项技术进行了十分详细的展开,具体如下:

一、采取连续式细节层级,稳定渲染百万级泼溅

在计算机图形学中,处理大型 3D 场景时常常采用细节层级系统,该系统会根据物体与观察者之间的距离自动调整渲染的细节程度,

不同的细节层级方法介于离散式与连续式之间,形成一个技术谱系。采用离散式细节层级(LoD,Level-of-Detail)时,系统需要为泼溅效果制作多个版本,从精简到精细依次递增,再根据各版本的近似边界与相机的距离,在不同版本间进行切换。

Spark 的早期系统设计支持离散模式,但其存在明显缺陷:当用户在场景中移动、不同版本突然切换时,画面会出现明显的跳变;此外,将泼溅效果按区块分组后,用户还能看到清晰的边界痕迹。

Spark 2.0 的 LoD 设计采用了一种连续式 LoD 方法,所有泼溅都存在于一个层级结构中,即 LoD 泼溅树。Spark 2.0 会沿着树的一个边界切割面单独选取泼溅,从而在视口内优化泼溅的细节。

LoD 泼溅树(来源:World Labs 博客)

树中的每个内部节点都是其子节点的一个低分辨率版本,通过将子节点的多个泼溅合并成一个新的泼溅来近似表示子节点泼溅的形状和颜色。这个过程一直持续到树的根节点——一个单一的、大的泼溅,它聚合了该物体中所有泼溅的整体形状和颜色。

利用这棵 LoD 泼溅树,Spark 2.0 会计算出穿过该树的一个 " 切片 ",从而为当前视口选取最佳的 N 个泼溅进行渲染。通过设置一个最大泼溅预算 N(根据设备类型不同,通常在 50 万到 250 万个泼溅之间),系统确保每帧只需渲染恒定数量的泼溅,从而获得稳定、高帧率的渲染性能。通过上下调整 N 值,即可在帧率和泼溅细节之间进行权衡。

公园中的自行车,细节真实,前后一致性强(来源:World Labs 博客)

Spark 2.0 通过同时遍历多个 LoD 泼溅树实例,对该算法进行了进一步扩展。与仅从单一根节点开始遍历不同,针对每个 3DGS 物体,拓展后的算法会将其屏幕尺寸及泼溅节点 ( dm0,Sm0 ) 一同加入初始优先队列,后续流程与原有逻辑保持一致,可在场景中所有 3DGS 物体上同步筛选需细化的细节层级。

这一设计让大规模组合世界的创建变得简单高效:只需在空间任意位置添加 3DGS LoD 物体,Spark 2.0 便能自动计算出每帧需渲染的所有 LoD 泼溅的最优全局子集。

二、设计新型文件格式,大场景 3D 世界在网页上秒开

Spark2.0 定义了一种新的文件格式 .RAD(代表 RADiance 场),该格式能够压缩 3DGS 数据,并支持随机访问流式传输,从而在数据通过网络传输时实现渐进式细化。

目前最常见的两种 3DGS 数据文件格式是 .PLY 和 .SPZ,它们代表了两种不同的数据编码方式:行式存储和列式存储。

.PLY 文件是按行顺序存储的,在接收到数据后立即显示泼溅,从而实现渐进式加载。但它未经过压缩,且编码精度存在浪费。.SPZ 文件将相似类型的数据按列顺序存储在一起,从而获得了更好的压缩率。但遗憾的是,它无法实现渐进式加载,因为在任何泼溅获得其所有属性之前,必须接收完整的文件。

为实现 3DGS 数据的高效压缩与流式传输,李飞飞团队设计了全新的 .RAD 文件格式。该格式编解码简洁、扩展性强、编码精度可调节,同时支持随机访问。

.RAD 文件格式(来源:World Labs 博客)

文件结构十分清晰:以 RAD0 文件头开头,随后依次为头部元数据长度、元数据 JSON,以及一个或多个各含 6.4 万个泼溅的数据块。头部元数据记录了所有数据块的偏移地址与字节大小,支持任意顺序读取数据块内容。

单个数据块也采用相似结构:以 RADC 块头起始,接着是块元数据长度、元数据 JSON,最后为该 6.4 万个泼溅的压缩数据。泼溅各项属性按列存储,可分别选用自定义编码方式。同类数据集中存放,再通过 Gzip 压缩,能获得出色的压缩率。

头部采用 JSON 编码,可通过版本字段与新增可选字段保障后续扩展。数据类型编码与压缩算法均以字符串名称在元数据中指定,方便后续扩展新类型。

三、采用虚拟内存,开辟 1600 万泼溅固定显存池

虚拟内存是一项内存管理技术,它以固定大小的物理内存为基础,向程序提供大容量的虚拟地址空间,并通过页表以固定尺寸的页为单位,完成虚拟地址与物理地址的映射。

Spark 2.0 将这一思路应用到 3DGS 渲染中。具体来讲,李飞飞团队在 GPU 上开辟了一块可容纳 1600 万个泼溅的固定显存池,自动管理 GPU 中每 6.4 万个泼溅为一页的 " 显存页 ",与 .RAD 文件中对应大小的虚拟数据块之间的映射。

虚拟内存(来源:World Labs 博客)

数据块会按照 LoD 遍历顺序加载到空闲页面中;当页表占满,且新数据块优先级更高时,系统会按最近最少使用(LRU)策略淘汰旧数据。

Spark 2.0 支持同时加载多个 .RAD 文件并共用同一张页表。对每个文件,系统会记录数据块到页表的映射,以及页表到对应文件与数据的反向映射。

在遍历多棵 LoD 泼溅树时,引擎会记录数据块与文件的访问顺序,形成全局统一的优先级排序,进而对场景中所有 3DGS 物体的泼溅加载与存储进行统一优化。

结语:Spark 2.0 降低空间智能的创作门槛,争夺基础设施定义权

从 2025 年的首次亮相到今日的 2.0 版本迭代,Spark 的进化轨迹某种程度上也映射着 3DGS 这一技术的成熟曲线。

三维内容的交付长期以来被两座大山压着:一是资产太重,动辄 GB 级的文件让网页端望而却步;二是渲染太贵,高端 GPU 才能流畅运行的场景,手机浏览器只能围观。

Spark 2.0 通过连续 LoD、.RAD 格式和虚拟显存 " 三板斧 ",让高质量三维内容像普通图片和视频一样,在互联网上自由流动、即点即看。

李飞飞团队选择将该技术开源,降低了空间智能的创作门槛,同样也是在争夺下一代空间内容基础设施的定义权。

宙世代

宙世代

ZAKER旗下Web3.0元宇宙平台

一起剪

一起剪

ZAKER旗下免费视频剪辑工具

相关标签

李飞飞 开源 spark 高斯 效果
相关文章
评论
没有更多评论了
取消

登录后才可以发布评论哦

打开小程序可以发布评论哦

12 我来说两句…
打开 ZAKER 参与讨论