
就在剛剛,李飛飛旗下 AI 世界模型公司 World Labs 發(fā)布并開源了一個最新成果:Spark 2.0。


你可能聽說過「3D Gaussian Splatting」,簡稱 3DGS。用一句話解釋,它是一種把真實場景變成 3D 可交互內(nèi)容的技術(shù),不用建模,拍一圈照片就能生成。
和傳統(tǒng) 3D 建模用三角形面片不同,3DGS 用的是數(shù)百萬個半透明的彩色橢球體,每一個叫做一個「splat」(潑濺體 / 斑點)。

每一個 splat 并不是一個簡單的點,而是一個有完整「人格」的橢球體。它記錄著自己在空間中的位置、三條軸的半徑長短、朝向角度、RGB 顏色值,以及透明度。

正是這種「軟邊界」的疊加方式,讓數(shù)百萬個 splat 堆在一起之后,能呈現(xiàn)出磚墻的顆粒感、樹葉的透光感、玻璃的反射,而不是一堆硬邊三角形拼出來的塑料質(zhì)感。
效果好,信息量也大。一個高質(zhì)量的 3DGS 掃描場景,動輒幾千萬個 splat,文件體積輕松突破 1 GB。

現(xiàn)有渲染器也沒法把多個掃描對象放在同一個場景里正確渲染,要么只能單獨渲染一個,要么排序亂掉、對象「貼在」彼此表面上,看起來一團糟。
于是乎,Spark 應(yīng)運而生。根據(jù)官方博客介紹,Spark 最開始是 World Labs 自己用的內(nèi)部工具。World Labs 需要在網(wǎng)頁上展示 3DGS 生成的世界,但市面上的渲染器都有硬傷,有的只能渲染單個對象,有的依賴 WebGPU(很多設(shè)備還不支持),有的不支持動態(tài)動畫。
幾番對比下來,他們決定干脆自己造一個。
他們選擇的技術(shù)底座是 THREE.js,Web 上最流行的 3D 框架,運行在 WebGL2 之上,幾乎覆蓋所有現(xiàn)代設(shè)備。核心渲染邏輯分三步走,先在 GPU 上生成跨對象的全局 splat 列表,再統(tǒng)一按從遠(yuǎn)到近排序,最后一次性渲染完畢。

1.0 版本解決了多對象渲染的問題,但 4000 萬 splat 的場景依然是一道跨不過去的坎。這才有了 Spark 2.0。
讓設(shè)備永遠(yuǎn)只渲染「夠用」的信息量
Spark 2.0 的核心是三項技術(shù)的組合,LoD 細(xì)節(jié)層級、漸進(jìn)式流式加載和虛擬內(nèi)存管理。單獨拿出來看,每一項都有先例可循,但三者合力,才撐起了在手機瀏覽器里流暢渲染億級 splat 世界的能力。
1. 連續(xù) LoD 樹:把好鋼用在刀刃上
LoD(Level of Detail)在游戲圈早已是成熟概念。近處的樹用幾千個三角形,遠(yuǎn)處的樹只留幾十個,按需分配,省算力。Unreal Engine 的 Nanite 系統(tǒng)也是這個思路,把三角形細(xì)節(jié)和視距掛鉤,自動縮放。

離散切換幾個版本容易產(chǎn)生畫面「跳變」,Spark 的做法是構(gòu)建一棵完整的「連續(xù) LoD 樹」,每個內(nèi)部節(jié)點都是其子節(jié)點 splat 融合后的近似版本,層層向上匯聚,最終到達(dá)根節(jié)點,也就是整個場景最粗粒度的單一 splat。

整個過程受一個固定的 splat 預(yù)算約束,移動端約 50 萬,桌面端約 250 萬。場景里總共有多少 splat 都無所謂,實際送上 GPU 的數(shù)量始終穩(wěn)定在預(yù)算范圍內(nèi),幀率自然穩(wěn)了。


渲染效率的問題解決了,傳輸效率的問題同樣棘手?,F(xiàn)有的 3DGS 文件格式有兩個:.PLY 和 .SPZ。前者未壓縮,10M splat 高達(dá) 2.3 GB,雖然可以邊下邊顯示,但體積實在吃不消。
后者用列式存儲加 Gzip 壓縮,同等數(shù)據(jù)量壓縮到 200-250 MB,代價是必須等整個文件下載完才能顯示,因為每個 splat 的屬性分散在文件各處,缺了哪一段都拼不出完整內(nèi)容。
為了魚和熊掌兼得,Spark 2.0 設(shè)計了新格式 .RAD(RADiance fields)。它把 splat 數(shù)據(jù)切成每塊 64K 個 splat 的獨立小塊,分別壓縮,并在文件頭中記錄所有塊的字節(jié)偏移位置,支持隨機訪問任意一塊。
第一塊永遠(yuǎn)是整個場景最粗粒度的 64K 個 splat,下載完畢后場景輪廓立刻可見。此后系統(tǒng)根據(jù)視角判斷哪些區(qū)域最需要細(xì)化,優(yōu)先拉取對應(yīng)的數(shù)據(jù)塊,畫面從模糊逐漸推演出細(xì)節(jié)。3 個并行的 Web Worker 線程在后臺同步拉取和解碼,你走到哪,細(xì)節(jié)就跟到哪。
3. GPU 虛擬內(nèi)存:在有限顯存里裝下無限空間
流式加載解決了帶寬的問題,但 GPU 內(nèi)存的硬上限依舊是個難啃的骨頭。移動端瀏覽器對顯存有嚴(yán)格約束,塞不下整個 4000 萬 splat 的場景。

系統(tǒng)會在 GPU 上分配一個固定內(nèi)存池,上限 1600 萬個 splat,用一張頁表記錄哪些 .RAD 數(shù)據(jù)塊當(dāng)前駐留在 GPU 上。需要渲染某個區(qū)
域時調(diào)入對應(yīng)的塊,內(nèi)存滿了就按最久未使用的順序換出舊塊。
得益于這一機制,不同來源的 3DGS 場景可以共享同一個內(nèi)存池。理論上,只要網(wǎng)速跟得上,無數(shù)個獨立的掃描場景可以無縫拼接成一個無限大的世界。
一行鏈接,交付世界
Spark 2.0 發(fā)布之后,李飛飛也第一時間公開表態(tài),「Spark 2.0 現(xiàn)在可以在任何設(shè)備上流暢播放超過 1 億個 splat 對象,非常榮幸能為基于 Web 的 3DGS 渲染開源生態(tài)系統(tǒng)做出貢獻(xiàn)?!?/p>

從已有的落地案例來看,開發(fā)者確實在用 Spark 做各種方向的嘗試。Webby 獎得主 James C. Kane 獨立開發(fā)了一款名為 Starspeed 的多人宇宙飛船射擊游戲。
整個游戲場景由超過 1 億個 splat 構(gòu)建,附帶 10 首合成波風(fēng)格原聲音樂,全部通過瀏覽器以 .RAD 格式流式加載,驚艷的科幻環(huán)境可以直接在網(wǎng)頁里跑起來。

藝術(shù)方向則有 Hugues Bruy è re 的《Dormant Memories》。他是互動體驗工作室 Dpt. 的聯(lián)合創(chuàng)始人,這個系列把真實地點的 3D 掃描和想象中的空間并置在一起,做成可探索的交互環(huán)境?,F(xiàn)實與虛構(gòu)之間的邊界在 splat 顆粒感里變得模糊,倒是意外地切題。

來自 Hololive 空間信息技術(shù)部門的藤原龍則用 Spark 渲染了多個大型真實捕獲場景,單場景最高達(dá)到 4000 萬 splat,在智能手機、Quest 和 Vision Pro 上均能流暢運行。

這些來自開發(fā)者的多元化嘗試,充分證明了 Spark 2.0 在不同設(shè)備和應(yīng)用場景下的強悍實力。但這僅僅是故事的一半。
對于一家致力于打造「AI 世界模型」的公司而言,李飛飛團隊的野心絕不止于提供一個開源的渲染工具。如果說 Spark 2.0 解決了「如何流暢觀看」的最后一步交付難題,那么如何低門檻地創(chuàng)造這些 3D 內(nèi)容,才是他們真正的殺手锏。
Spark 和 World Labs 的創(chuàng)作平臺 Marble 深度綁定,用一行文字或一張圖片在 Marble 里生成 3D 世界,用 Marble Studio 把多個世界拼合成更大的場景,再用 Spark 渲染成可分享的網(wǎng)頁體驗,這條鏈路目前已經(jīng)跑通。
技術(shù)進(jìn)步往往以「強無止境」為最高原則,但有時「夠用」或許才是最合適。Spark 2.0 講的正是這么一個故事。
而讓設(shè)備在任何時候只渲染「剛好夠用」的 splat,這個想法本身并不新鮮,但把它落地到網(wǎng)頁端的渲染上,還要同時兼容手機瀏覽器和 Quest,每一步都是實打?qū)嵉墓こ虇栴}。
當(dāng) AI 能生成無限大的 3D 世界時,我們用什么載體把它交付給每一個普通人?現(xiàn)在,World Labs 給出的最新答案是一個網(wǎng)頁鏈接。
附上博客地址:
https://www.worldlabs.ai/blog/spark-2.0