![]()
拍一圈照片,就能生成一個(gè)可交互的 3D 世界,已經(jīng)不是什么新鮮話題了。但問題是如何把一個(gè)大世界塞進(jìn)普通人的手機(jī)瀏覽器里。
就在剛剛,李飛飛旗下 AI 世界模型公司 World Labs 發(fā)布并開源了一個(gè)最新成果:Spark 2.0。
![]()
這個(gè)專為網(wǎng)頁端設(shè)計(jì)的動(dòng)態(tài) 3D 高斯點(diǎn)云(3DGS)渲染引擎,讓在任何設(shè)備的瀏覽器里流暢運(yùn)行上億粒子的超大 3D 場(chǎng)景,開始逐漸成為現(xiàn)實(shí)。
![]()
為什么把億級(jí)粒子的 3D 世界塞進(jìn)手機(jī)這么難?
你可能聽說過「3D Gaussian Splatting」,簡(jiǎn)稱 3DGS。用一句話解釋,它是一種把真實(shí)場(chǎng)景變成 3D 可交互內(nèi)容的技術(shù),不用建模,拍一圈照片就能生成。
和傳統(tǒng) 3D 建模用三角形面片不同,3DGS 用的是數(shù)百萬個(gè)半透明的彩色橢球體,每一個(gè)叫做一個(gè)「splat」(潑濺體/斑點(diǎn))。
![]()
▲左側(cè)使用紋理映射三角網(wǎng)格,右側(cè)使用高斯斑點(diǎn),對(duì)同一對(duì)象進(jìn)行渲染。
每一個(gè) splat 并不是一個(gè)簡(jiǎn)單的點(diǎn),而是一個(gè)有完整「人格」的橢球體。它記錄著自己在空間中的位置、三條軸的半徑長(zhǎng)短、朝向角度、RGB 顏色值,以及透明度。
![]()
最關(guān)鍵的是透明度這個(gè)屬性。它決定了這個(gè) splat 在疊加時(shí)對(duì)周圍的影響權(quán)重。如果把單個(gè) splat 的空間密度畫出來,你會(huì)得到一條高斯曲線:中心最實(shí),向外逐漸虛化,邊緣自然消融進(jìn)背景里。
正是這種「軟邊界」的疊加方式,讓數(shù)百萬個(gè) splat 堆在一起之后,能呈現(xiàn)出磚墻的顆粒感、樹葉的透光感、玻璃的反射,而不是一堆硬邊三角形拼出來的塑料質(zhì)感。
效果好,信息量也大。一個(gè)高質(zhì)量的 3DGS 掃描場(chǎng)景,動(dòng)輒幾千萬個(gè) splat,文件體積輕松突破 1 GB。
![]()
這就帶來了一個(gè)棘手的問題:普通手機(jī)能流暢渲染的上限大概是 100 萬到 500 萬個(gè) splat,比動(dòng)輒 4000 萬的高質(zhì)量掃描差了整整一個(gè)數(shù)量級(jí)。
現(xiàn)有渲染器也沒法把多個(gè)掃描對(duì)象放在同一個(gè)場(chǎng)景里正確渲染,要么只能單獨(dú)渲染一個(gè),要么排序亂掉、對(duì)象「貼在」彼此表面上,看起來一團(tuán)糟。
于是乎,Spark 應(yīng)運(yùn)而生。根據(jù)官方博客介紹,Spark 最開始是 World Labs 自己用的內(nèi)部工具。World Labs 需要在網(wǎng)頁上展示 3DGS 生成的世界,但市面上的渲染器都有硬傷,有的只能渲染單個(gè)對(duì)象,有的依賴 WebGPU(很多設(shè)備還不支持),有的不支持動(dòng)態(tài)動(dòng)畫。
幾番對(duì)比下來,他們決定干脆自己造一個(gè)。
他們選擇的技術(shù)底座是 THREE.js,Web 上最流行的 3D 框架,運(yùn)行在 WebGL2 之上,幾乎覆蓋所有現(xiàn)代設(shè)備。核心渲染邏輯分三步走,先在 GPU 上生成跨對(duì)象的全局 splat 列表,再統(tǒng)一按從遠(yuǎn)到近排序,最后一次性渲染完畢。
![]()
「全局排序」聽起來平平無奇,實(shí)則是讓多個(gè) 3DGS 對(duì)象共存于同一場(chǎng)景、不互相穿模的關(guān)鍵所在。Spark 還在此基礎(chǔ)上開放了一套 GPU 處理流水線,用戶可以對(duì)每個(gè) splat 做重新上色、透明度調(diào)整、動(dòng)態(tài)動(dòng)畫等自定義操作,用 GLSL 編寫,或者像 Blender 那樣連節(jié)點(diǎn)圖來實(shí)現(xiàn)。
1.0 版本解決了多對(duì)象渲染的問題,但 4000 萬 splat 的場(chǎng)景依然是一道跨不過去的坎。這才有了 Spark 2.0。
讓設(shè)備永遠(yuǎn)只渲染「夠用」的信息量
Spark 2.0 的核心是三項(xiàng)技術(shù)的組合,LoD 細(xì)節(jié)層級(jí)、漸進(jìn)式流式加載和虛擬內(nèi)存管理。單獨(dú)拿出來看,每一項(xiàng)都有先例可循,但三者合力,才撐起了在手機(jī)瀏覽器里流暢渲染億級(jí) splat 世界的能力。
1. 連續(xù) LoD 樹:把好鋼用在刀刃上
LoD(Level of Detail)在游戲圈早已是成熟概念。近處的樹用幾千個(gè)三角形,遠(yuǎn)處的樹只留幾十個(gè),按需分配,省算力。Unreal Engine 的 Nanite 系統(tǒng)也是這個(gè)思路,把三角形細(xì)節(jié)和視距掛鉤,自動(dòng)縮放。
![]()
Spark 2.0 把同樣的邏輯搬到了 splat 上,做得更徹底。
離散切換幾個(gè)版本容易產(chǎn)生畫面「跳變」,Spark 的做法是構(gòu)建一棵完整的「連續(xù) LoD 樹」,每個(gè)內(nèi)部節(jié)點(diǎn)都是其子節(jié)點(diǎn) splat 融合后的近似版本,層層向上匯聚,最終到達(dá)根節(jié)點(diǎn),也就是整個(gè)場(chǎng)景最粗粒度的單一 splat。
![]()
渲染時(shí),系統(tǒng)根據(jù)當(dāng)前視角在這棵樹上動(dòng)態(tài)劃一刀,靠近視角的區(qū)域取底層細(xì)節(jié),遠(yuǎn)處取高層粗粒度。
整個(gè)過程受一個(gè)固定的 splat 預(yù)算約束,移動(dòng)端約 50 萬,桌面端約 250 萬。場(chǎng)景里總共有多少 splat 都無所謂,實(shí)際送上 GPU 的數(shù)量始終穩(wěn)定在預(yù)算范圍內(nèi),幀率自然穩(wěn)了。
![]()
在此之上,Spark 還引入了「注視點(diǎn)渲染」(Foveated Rendering),把更多預(yù)算集中分配給你正在看的方向,邊緣和背后的區(qū)域細(xì)節(jié)自動(dòng)收窄。這個(gè)效果放在 VR 設(shè)備上尤其直觀,通常需要眼動(dòng)追蹤才能實(shí)現(xiàn),Spark 用固定錐形區(qū)域近似模擬,同樣奏效。
![]()
2. 全新 .RAD 格式:像刷短視頻一樣「流式」加載
渲染效率的問題解決了,傳輸效率的問題同樣棘手。現(xiàn)有的 3DGS 文件格式有兩個(gè):.PLY 和 .SPZ。前者未壓縮,10M splat 高達(dá) 2.3 GB,雖然可以邊下邊顯示,但體積實(shí)在吃不消。
后者用列式存儲(chǔ)加 Gzip 壓縮,同等數(shù)據(jù)量壓縮到 200-250 MB,代價(jià)是必須等整個(gè)文件下載完才能顯示,因?yàn)槊總€(gè) splat 的屬性分散在文件各處,缺了哪一段都拼不出完整內(nèi)容。
為了魚和熊掌兼得,Spark 2.0 設(shè)計(jì)了新格式 .RAD(RADiance fields)。它把 splat 數(shù)據(jù)切成每塊 64K 個(gè) splat 的獨(dú)立小塊,分別壓縮,并在文件頭中記錄所有塊的字節(jié)偏移位置,支持隨機(jī)訪問任意一塊。
第一塊永遠(yuǎn)是整個(gè)場(chǎng)景最粗粒度的 64K 個(gè) splat,下載完畢后場(chǎng)景輪廓立刻可見。此后系統(tǒng)根據(jù)視角判斷哪些區(qū)域最需要細(xì)化,優(yōu)先拉取對(duì)應(yīng)的數(shù)據(jù)塊,畫面從模糊逐漸推演出細(xì)節(jié)。3 個(gè)并行的 Web Worker 線程在后臺(tái)同步拉取和解碼,你走到哪,細(xì)節(jié)就跟到哪。
3. GPU 虛擬內(nèi)存:在有限顯存里裝下無限空間
流式加載解決了帶寬的問題,但 GPU 內(nèi)存的硬上限依舊是個(gè)難啃的骨頭。移動(dòng)端瀏覽器對(duì)顯存有嚴(yán)格約束,塞不下整個(gè) 4000 萬 splat 的場(chǎng)景。
![]()
Spark 2.0 借鑒了操作系統(tǒng)的虛擬內(nèi)存機(jī)制來應(yīng)對(duì)這個(gè)問題。
系統(tǒng)會(huì)在 GPU 上分配一個(gè)固定內(nèi)存池,上限 1600 萬個(gè) splat,用一張頁表記錄哪些 .RAD 數(shù)據(jù)塊當(dāng)前駐留在 GPU 上。需要渲染某個(gè)區(qū)
域時(shí)調(diào)入對(duì)應(yīng)的塊,內(nèi)存滿了就按最久未使用的順序換出舊塊。
得益于這一機(jī)制,不同來源的 3DGS 場(chǎng)景可以共享同一個(gè)內(nèi)存池。理論上,只要網(wǎng)速跟得上,無數(shù)個(gè)獨(dú)立的掃描場(chǎng)景可以無縫拼接成一個(gè)無限大的世界。
一行鏈接,交付世界
Spark 2.0 發(fā)布之后,李飛飛也第一時(shí)間公開表態(tài),「Spark 2.0 現(xiàn)在可以在任何設(shè)備上流暢播放超過 1 億個(gè) splat 對(duì)象,非常榮幸能為基于 Web 的 3DGS 渲染開源生態(tài)系統(tǒng)做出貢獻(xiàn)。」
![]()
她沒有著重強(qiáng)調(diào)「做到了什么」,而是把重點(diǎn)放在「為開源社區(qū)貢獻(xiàn)了什么」。這個(gè)表述耐人尋味。3DGS 渲染是一個(gè)仍在快速演進(jìn)的領(lǐng)域,單靠一家公司推不動(dòng)整個(gè)生態(tài),開源才是加速這件事的正確姿勢(shì)。
從已有的落地案例來看,開發(fā)者確實(shí)在用 Spark 做各種方向的嘗試。Webby 獎(jiǎng)得主 James C. Kane 獨(dú)立開發(fā)了一款名為 Starspeed 的多人宇宙飛船射擊游戲。
整個(gè)游戲場(chǎng)景由超過 1 億個(gè) splat 構(gòu)建,附帶 10 首合成波風(fēng)格原聲音樂,全部通過瀏覽器以 .RAD 格式流式加載,驚艷的科幻環(huán)境可以直接在網(wǎng)頁里跑起來。
![]()
▲附體驗(yàn)地址:https://starspeed.game/
藝術(shù)方向則有 Hugues Bruyère 的《Dormant Memories》。他是互動(dòng)體驗(yàn)工作室 Dpt. 的聯(lián)合創(chuàng)始人,這個(gè)系列把真實(shí)地點(diǎn)的 3D 掃描和想象中的空間并置在一起,做成可探索的交互環(huán)境。現(xiàn)實(shí)與虛構(gòu)之間的邊界在 splat 顆粒感里變得模糊,倒是意外地切題。
![]()
▲ 附體驗(yàn)地址:https://smallfly.com/dormant_memories/
來自 Hololive 空間信息技術(shù)部門的藤原龍則用 Spark 渲染了多個(gè)大型真實(shí)捕獲場(chǎng)景,單場(chǎng)景最高達(dá)到 4000 萬 splat,在智能手機(jī)、Quest 和 Vision Pro 上均能流暢運(yùn)行。
![]()
▲附體驗(yàn)地址:https://works.lilea.net/spark/
這些來自開發(fā)者的多元化嘗試,充分證明了 Spark 2.0 在不同設(shè)備和應(yīng)用場(chǎng)景下的強(qiáng)悍實(shí)力。但這僅僅是故事的一半。
對(duì)于一家致力于打造「AI 世界模型」的公司而言,李飛飛團(tuán)隊(duì)的野心絕不止于提供一個(gè)開源的渲染工具。如果說 Spark 2.0 解決了「如何流暢觀看」的最后一步交付難題,那么如何低門檻地創(chuàng)造這些 3D 內(nèi)容,才是他們真正的殺手锏。
Spark 和 World Labs 的創(chuàng)作平臺(tái) Marble 深度綁定,用一行文字或一張圖片在 Marble 里生成 3D 世界,用 Marble Studio 把多個(gè)世界拼合成更大的場(chǎng)景,再用 Spark 渲染成可分享的網(wǎng)頁體驗(yàn),這條鏈路目前已經(jīng)跑通。
技術(shù)進(jìn)步往往以「強(qiáng)無止境」為最高原則,但有時(shí)「夠用」或許才是最合適。Spark 2.0 講的正是這么一個(gè)故事。
而讓設(shè)備在任何時(shí)候只渲染「剛好夠用」的 splat,這個(gè)想法本身并不新鮮,但把它落地到網(wǎng)頁端的渲染上,還要同時(shí)兼容手機(jī)瀏覽器和 Quest,每一步都是實(shí)打?qū)嵉墓こ虇栴}。
當(dāng) AI 能生成無限大的 3D 世界時(shí),我們用什么載體把它交付給每一個(gè)普通人?現(xiàn)在,World Labs 給出的最新答案是一個(gè)網(wǎng)頁鏈接。
附上博客地址:
https://www.worldlabs.ai/blog/spark-2.0
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.