西風 發自 凹非寺
量子位 | 公眾號 QbitAI
距離新模型Marble 1.1&1.1-Plus發布不到一個周,李飛飛空間智能獨角獸World Labs再度傳來新消息——
開源3D高斯濺射渲染引擎Spark 2.0。
我們為3D高斯濺射(3D Gaussian Splatting)打造了可流式傳輸的LoD系統,重新定義了web 3D渲染的可能性。
Spark 2.0基于Three.js構建,用戶可以通過WebGL2,將包含1億+splats(3D高斯點/潑濺點)的超大規模3D世界,流式傳輸到任意設備上,包括桌面、iOS、Android、VR。
![]()
例如下面的Coit Tower場景由超4000萬個splats構成,卻能在瀏覽器中實現完全交互:
![]()
在官方Blog中還有更多3D場景可以點開體驗:
![]()
傳統3D建模通過帶紋理映射的三角形,一塊一塊拼出物體的表面。
3D高斯濺射(3D Gaussian Splatting)則采用數百萬個半透明橢球體(也就是splats),通過這些橢球體的色彩融合,呈現出超寫實的細節效果:
![]()
什么是splat?
每一個splat都由位置、XYZ三軸縮放、旋轉角度、顏色、不透明度這5個屬性定義。
將splat渲染到屏幕上最常見的方法是畫家算法(painter’s algorithm)。
就像畫畫時先畫遠處的、再畫近處的,把幾百萬個小橢球按從遠到近的順序排好,一層一層疊上去,實時算出最終畫面。
這就像是數字版點彩畫,只不過用的是3D高斯分布輪廓來作畫。
![]()
對于這項成果,李飛飛第一時間給到了評論:
Spark 2.0現已可在任意設備上流式渲染超1億splats!能為基于網頁的3D高斯濺射渲染開源生態貢獻力量,我深感自豪!
![]()
Spark系統設計
Spark前身是World Labs開發的一款內部3D高斯濺射渲染引擎。
彼時市面上的web渲染引擎均存在明顯短板,例如,部分引擎一次只能正確渲染一個3D高斯濺射對象;部分引擎無法不能動態動畫化splats;還有些引擎基于小眾3D框架開發,或采用尚未普及的WebGPU技術,導致設備兼容性受限。
這款內部渲染引擎曾亮相于團隊2024年發布的大型世界模型研究預覽,以及早期場景展示項目Lofi Worlds。
![]()
為了讓更多開發者都能打造交互式3D高斯濺射web體驗,團隊整合技術積累,在去年開源了一款通用型3D高斯濺射渲染引擎。
當時名字還叫做Forge,量子位當時也有介紹,后改名Spark。
![]()
Spark基于主流THREE.js框架構建而成。同時,團隊將技術底座定為WebGL2,這是目前唯一能在幾乎所有設備上穩定運行的3D web API。
團隊表示,Spark的研發過程始終與Marble同步推進。
官方Blog中詳細介紹了Spark的技術細節。
全新Spark 2.0實現了超大規模3D高斯濺射場景在網頁端的預處理、流式加載與跨設備渲染。
![]()
視頻鏈接:https://mp.weixin.qq.com/s/4m-RUPdLnzvXSx-cyBqhsQ
關鍵在于融合了三項技術:
- 細節層次技術(LoD,Level-of-Detail):預先生成不同分辨率的splats數據,并根據相機視角智能篩選需要渲染的splats子集。對于距離過遠、肉眼無法分辨細節的區域,減少渲染的splats數量,從而顯著提升渲染性能。
- 漸進式流式加載(Progressive Streaming):采用“從粗到精”的加載策略,優先下載能最優化當前視角細節的數據。隨著數據逐步下載,場景會不斷細化,實現流暢的漸進式呈現。
- 虛擬內存(Virtual Memory):為splats頁表分配固定的GPU內存池,根據用戶在場景中的位置,自動置換3D高斯濺射數據塊。借助這一技術,即使是通過網絡獲取的海量跨對象splats數據,也能被高效訪問。
下面具體來看。
Level-of-Detail
在計算機圖形學領域,Level-of-Detail是處理大型3D場景的經典方案就是。它能根據物體與觀察者的距離,自動調整渲染細節。當需要提升幀率時,可以降低細節等級;當用戶靜止觀察時,則可以提高細節等級,呈現更精細的畫面。
Level-of-Detail的典型應用是Mipmap紋理映射:
將一張紋理圖片逐級下采樣,生成一組分辨率依次減半的紋理金字塔,最頂層是單個像素。這一技術能確保在任意距離下,都能快速采樣到與屏幕像素尺寸匹配的紋理數據。
Level-of-Detail的實現方案可分為離散型與連續型兩大類。
離散型方案需要預先生成多套不同splat數量的模型版本,再根據物體包圍盒與相機的距離,切換渲染不同版本。這種方法存在明顯缺陷:
當用戶在場景中移動時,模型細節的突然切換會產生“跳變”偽影;同時,將splats分塊處理時,塊與塊之間的邊界也會清晰可見。
Spark采用的是連續型Level-of-Detail,核心是為所有splats構建一個層級化結構——Level-of-Detail Gaussian splat tree。
![]()
Spark會沿著該樹的邊界,精準篩選出最適合當前視口的splats子集,實現平滑無斷層的細節過渡。
![]()
Spark 2.0內置了兩種Level-of-Detail Gaussian splat tree生成算法:
- Tiny-LoD算法:一種快速且輕量的算法,默認用于網頁端的實時生成場景。
- Bhatt-LoD算法:一種高精度算法,默認用于命令行工具的離線處理場景。
這兩種算法均為無訓練依賴的方案,無需參考圖像或其他額外輸入數據,直接對3D高斯濺射數據進行處理即可。除此之外,Spark也兼容其他第三方生成算法,例如NanoGS。
Progressive Streaming
Spark 2.0定義了一種全新的文件格式——.RAD(全稱Radiance Fields,輻射場)。該格式不僅能有效壓縮3D高斯濺射數據,還支持隨機訪問流式加載,實現了場景的漸進式精細化渲染,完美適配網絡傳輸場景。
采用RAD格式后,3D高斯濺射對象能立即以一個包含64Ksplats的粗糙版本呈現,隨后系統會根據用戶視角,優先獲取用于優化可見區域細節的數據塊,實現動態的優先級調整。
![]()
LoD splat tree本質上是一個四維結構:包含三維空間維度與一維細節層次維度。
要實現流式加載的漸進式精細化渲染,必須將LoD splats ,以合理的方式劃分到RAD文件的各個數據塊中。
實現這一目標的策略有很多,Spark采用的策略核心是空間鄰近性優先:
將三維空間遞歸劃分為更小的區域,每個數據塊都會按“從大到小”的順序,填充對應空間區域內的splats,確保每個數據塊都能最大化呈現該區域的細節。
![]()
視頻鏈接:https://mp.weixin.qq.com/s/4m-RUPdLnzvXSx-cyBqhsQ
Virtual Memory
虛擬內存是一種經典的內存管理技術,通過劃分固定大小的內存頁,構建頁表映射關系,用有限的物理內存,模擬出容量巨大的虛擬內存空間。
Spark 2.0將這一技術創新性地應用于3D高斯濺射渲染:
它會在GPU中預先分配一個固定大小的內存池(容量為1600萬個splats),并構建一套頁表映射機制,將GPU中的 64K splats“內存頁”,與RAD文件中的64K潑濺點數據塊一一對應。
![]()
數據塊的加載與置換規則如下:
- 根據LoD splat trees的遍歷結果,將高優先級的數據塊加載到空閑的GPU內存頁中。
- 當GPU內存池被占滿,且需要加載新的高優先級數據塊時,會采用LRU算法,將優先級最低的內存頁中的數據塊置換出去。
Spark的這一設計具備極高的靈活性:它支持同時加載多個RAD文件,并讓這些文件共享同一個GPU內存池。對于每個RAD文件,Spark都會維護兩套映射關系:從數據塊到內存頁的映射,以及從內存頁到文件和數據塊的反向映射。
在對多個細節層次潑濺樹進行遍歷時,Spark會統一記錄所有文件的數據塊訪問順序,最終生成一個全局數據塊優先級列表,從而實現跨所有3D高斯濺射對象的加載與存儲優化。
官方Blog中還介紹了更多技術細節,感興趣的童鞋傳送門在這里:
https://www.worldlabs.ai/blog/spark-2.0#lod-splat-tree
參考鏈接:https://x.com/i/trending/2044161909943918948
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
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.