电竞比分网-中国电竞赛事及体育赛事平台

關(guān)于ZAKER 合作
愛范兒 10分鐘前

剛剛,李飛飛最新成果發(fā)布,手機也能跑億級粒子的 3D 世界了

拍一圈照片,就能生成一個可交互的 3D 世界,已經(jīng)不是什么新鮮話題了。但問題是如何把一個大世界塞進(jìn)普通人的手機瀏覽器里。

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

這個專為網(wǎng)頁端設(shè)計的動態(tài) 3D 高斯點云(3DGS)渲染引擎,讓在任何設(shè)備的瀏覽器里流暢運行上億粒子的超大 3D 場景,開始逐漸成為現(xiàn)實。

為什么把億級粒子的 3D 世界塞進(jìn)手機這么難?

你可能聽說過「3D Gaussian Splatting」,簡稱 3DGS。用一句話解釋,它是一種把真實場景變成 3D 可交互內(nèi)容的技術(shù),不用建模,拍一圈照片就能生成。

和傳統(tǒng) 3D 建模用三角形面片不同,3DGS 用的是數(shù)百萬個半透明的彩色橢球體,每一個叫做一個「splat」(潑濺體 / 斑點)。

▲左側(cè)使用紋理映射三角網(wǎng)格,右側(cè)使用高斯斑點,對同一對象進(jìn)行渲染。

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

最關(guān)鍵的是透明度這個屬性。它決定了這個 splat 在疊加時對周圍的影響權(quán)重。如果把單個 splat 的空間密度畫出來,你會得到一條高斯曲線:中心最實,向外逐漸虛化,邊緣自然消融進(jìn)背景里。

正是這種「軟邊界」的疊加方式,讓數(shù)百萬個 splat 堆在一起之后,能呈現(xiàn)出磚墻的顆粒感、樹葉的透光感、玻璃的反射,而不是一堆硬邊三角形拼出來的塑料質(zhì)感。

效果好,信息量也大。一個高質(zhì)量的 3DGS 掃描場景,動輒幾千萬個 splat,文件體積輕松突破 1 GB。

這就帶來了一個棘手的問題:普通手機能流暢渲染的上限大概是 100 萬到 500 萬個 splat,比動輒 4000 萬的高質(zhì)量掃描差了整整一個數(shù)量級。

現(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)到近排序,最后一次性渲染完畢。

「全局排序」聽起來平平無奇,實則是讓多個 3DGS 對象共存于同一場景、不互相穿模的關(guān)鍵所在。Spark 還在此基礎(chǔ)上開放了一套 GPU 處理流水線,用戶可以對每個 splat 做重新上色、透明度調(diào)整、動態(tài)動畫等自定義操作,用 GLSL 編寫,或者像 Blender 那樣連節(jié)點圖來實現(xià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é)和視距掛鉤,自動縮放。

Spark 2.0 把同樣的邏輯搬到了 splat 上,做得更徹底。

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

渲染時,系統(tǒng)根據(jù)當(dāng)前視角在這棵樹上動態(tài)劃一刀,靠近視角的區(qū)域取底層細(xì)節(jié),遠(yuǎn)處取高層粗粒度。

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

在此之上,Spark 還引入了「注視點渲染」(Foveated Rendering),把更多預(yù)算集中分配給你正在看的方向,邊緣和背后的區(qū)域細(xì)節(jié)自動收窄。這個效果放在 VR 設(shè)備上尤其直觀,通常需要眼動追蹤才能實現(xiàn),Spark 用固定錐形區(qū)域近似模擬,同樣奏效。

2. 全新 .RAD 格式:像刷短視頻一樣「流式」加載

渲染效率的問題解決了,傳輸效率的問題同樣棘手?,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 的場景。

Spark 2.0 借鑒了操作系統(tǒng)的虛擬內(nèi)存機制來應(yīng)對這個問題。

系統(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>

她沒有著重強調(diào)「做到了什么」,而是把重點放在「為開源社區(qū)貢獻(xiàn)了什么」。這個表述耐人尋味。3DGS 渲染是一個仍在快速演進(jìn)的領(lǐng)域,單靠一家公司推不動整個生態(tài),開源才是加速這件事的正確姿勢。

從已有的落地案例來看,開發(fā)者確實在用 Spark 做各種方向的嘗試。Webby 獎得主 James C. Kane 獨立開發(fā)了一款名為 Starspeed 的多人宇宙飛船射擊游戲。

整個游戲場景由超過 1 億個 splat 構(gòu)建,附帶 10 首合成波風(fēng)格原聲音樂,全部通過瀏覽器以 .RAD 格式流式加載,驚艷的科幻環(huán)境可以直接在網(wǎng)頁里跑起來。

▲附體驗地址:https://starspeed.game/

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

▲ 附體驗地址:https://smallfly.com/dormant_memories/

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

▲附體驗地址:https://works.lilea.net/spark/

這些來自開發(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

相關(guān)標(biāo)簽

相關(guān)閱讀

最新評論

沒有更多評論了
愛范兒

愛范兒

發(fā)現(xiàn)創(chuàng)新價值的科技媒體

訂閱

覺得文章不錯,微信掃描分享好友

掃碼分享

企業(yè)資訊

查看更多內(nèi)容