![]()
編輯|杜偉
剛剛,李飛飛世界模型新成果來了,還是開源的!
![]()
就在今天凌晨,李飛飛空間智能獨角獸公司 World Labs 官宣推出「Spark 2.0」,將最具野心的 3DGS(3D 高斯?jié)姙R)世界帶入到 Web
這意味著,原本只有專業(yè)設(shè)備才能運行的超大規(guī)模、高保真 3D 場景,現(xiàn)在變成任何人都可以在瀏覽器中訪問的內(nèi)容。
而隨著高保真 3D 內(nèi)容可以在任意設(shè)備上進行訪問,包括手機、VR 設(shè)備等,空間敘事能力向前邁進了一大步。
![]()
這個專為 3DGS 打造的渲染器還是開源的,可以流式加載 1 億 + 的 3DGS 數(shù)據(jù),將構(gòu)建一個全新的 3D 物理世界。
![]()
3D 高斯?jié)姙R渲染神器,Spark 2.0 來了
作為一個面向 Web 的動態(tài) 3D 高斯?jié)姙R(3DGS)渲染器,Spark 與當前最流行的 Web 3D 框架 Three.js 集成,并基于 WebGL2 運行,因此只要有瀏覽器,無論是桌面端、iOS、Android,還是 VR 設(shè)備,都可以使用。
在去年發(fā)布時,Spark 就帶來了不少其他渲染器沒有的能力:比如在同一場景中渲染多個 3DGS 對象、實時編輯與重光照,以及一個著色器圖系統(tǒng)讓用戶可以基于 splat 創(chuàng)建完全動態(tài)的特效和動畫。
而在 Spark 2.0 中,團隊加入了一個細節(jié)層級(LoD)系統(tǒng),可以在任意設(shè)備上流式加載并渲染超大規(guī)模的 3DGS 世界。當你在場景中移動時,Spark 會根據(jù)當前視角自動調(diào)整 3DGS 的細節(jié)等級,并通過網(wǎng)絡(luò)按需加載所需數(shù)據(jù)。我們先來看以下幾個場景的展示圖:
![]()
![]()
接著來看技術(shù)細節(jié)。
Spark 2.0 提供了一整套解決方案,用來在 Web 上為各類設(shè)備準備、傳輸并渲染超大規(guī)模的 3DGS 場景。為了解決規(guī)模化帶來的挑戰(zhàn),它主要用了三類圖形學和系統(tǒng)層面的技術(shù):
- Level-of-Detail(細節(jié)層級):為 splat 生成不同分辨率的版本,并根據(jù)當前相機視角決定實際渲染哪一部分。當對象距離較遠、細節(jié)難以分辨時,就減少渲染的 splat 數(shù)量,從而提升性能。
- 漸進式流加載(Progressive Streaming):隨著數(shù)據(jù)下載,從粗到細逐步加載 3DGS 的細節(jié)內(nèi)容,并優(yōu)先加載那些最能提升當前視角清晰度的數(shù)據(jù)。
- 虛擬內(nèi)存(Virtual Memory):在 GPU 中分配一塊固定大小的內(nèi)存池,用作 splat 的頁表,根據(jù)場景中的位置,自動換入和換出所需的 3DGS 數(shù)據(jù)塊。這樣一來,就能訪問跨多個 3DGS 對象、通過網(wǎng)絡(luò)獲取的海量數(shù)據(jù)。
細節(jié)層級(LoD)高斯 splat 樹
Spark 的 LoD 設(shè)計采用的是連續(xù) LoD 方法,即所有 splat 都被組織在一個層級結(jié)構(gòu)中,也就是一棵 LoD splat 樹。Spark 會在這棵樹上選擇一條「切面」,從中逐個挑選 splat,使當前視口中的細節(jié)達到最優(yōu)。
在這棵樹里,每一個內(nèi)部節(jié)點,都是由其子節(jié)點合并得到的低分辨率版本:通過把多個子 splat 合成為一個新的 splat,用來近似它們整體的形狀和顏色。這個過程不斷向上遞歸,直到樹的根節(jié)點,也就是:一個單一的大 splat 匯總了整個對象中所有 splat 的整體形狀與顏色。
![]()
Spark 2.0 提供了兩種用于生成 LoD splat 樹的算法:
- 一種輕量且速度更快的算法,叫做 Tiny-LoD,在 Web 端默認使用;
- 一種質(zhì)量更高的算法,叫做 Bhatt-LoD,在命令行環(huán)境中默認使用。
這兩種方法都「無需訓練」,不依賴參考圖像或其他輸入數(shù)據(jù),而是直接基于 3DGS 數(shù)據(jù)本身進行處理。
漸進式流
Spark 2.0 定義了一種新的文件格式 .RAD(Radiance fields),用于壓縮 3DGS 數(shù)據(jù),并支持在網(wǎng)絡(luò)傳輸過程中進行隨機訪問,實現(xiàn)逐步細化的流式加載。
在加載初期,3DGS 對象會以一個大約 6.4 萬 splat 的粗略版本幾乎瞬間呈現(xiàn)出來。隨后系統(tǒng)會分塊獲取數(shù)據(jù),優(yōu)先細化當前畫面中最粗糙、最需要提升細節(jié)的 LoD splat,并隨著用戶在場景中的移動動態(tài)調(diào)整加載優(yōu)先級。
![]()
虛擬內(nèi)存
虛擬內(nèi)存是一種內(nèi)存管理技術(shù),通過一小塊固定的「物理內(nèi)存」,來提供對海量虛擬內(nèi)存的訪問能力。系統(tǒng)通過頁表,將虛擬地址與物理內(nèi)存中的固定大小頁進行映射。
Spark 2.0 將這一機制引入到 3DGS 中,在 GPU 上分配一個固定容量(約 1600 萬 splat)的內(nèi)存池,并自動管理 GPU 中 64K splat 的「頁」與 .RAD 文件中對應的 64K 數(shù)據(jù)塊之間的映射關(guān)系。
數(shù)據(jù)塊會按照 LoD 遍歷順序加載進空閑頁中;當頁表已滿時,如果有新的、更高優(yōu)先級的數(shù)據(jù)需要加載,就會按照「最近最少使用」(LRU)的策略,把優(yōu)先級較低的舊數(shù)據(jù)塊替換出去。
![]()
更多技術(shù)細節(jié)請參考博客原文。
博客地址:https://www.worldlabs.ai/blog/spark-2.0
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。
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.