![]()
智東西
作者|王涵
編輯|李水青
智東西4月15日?qǐng)?bào)道,今天,“AI教母”李飛飛的世界模型團(tuán)隊(duì)World Labs開(kāi)源了動(dòng)態(tài)3D高斯?jié)姙R(3DGS)渲染器Spark 2.0。
![]()
▲Spark 2.0官宣開(kāi)源(來(lái)源:X)
李飛飛本人在該成果發(fā)布的第一時(shí)間評(píng)論稱(chēng):“Spark 2.0現(xiàn)在可以在任意設(shè)備上流式傳輸超過(guò)1億個(gè)高斯?jié)姙R!能夠?yàn)榛诰W(wǎng)頁(yè)的3DGS渲染開(kāi)源生態(tài)做出貢獻(xiàn),我們感到無(wú)比自豪!”
![]()
▲李飛飛評(píng)論(來(lái)源:X)
Spark系列模型于去年首次發(fā)布,是一個(gè)專(zhuān)為網(wǎng)頁(yè)構(gòu)建的動(dòng)態(tài)3D高斯?jié)姙R(3DGS)渲染器。它與網(wǎng)頁(yè)端最流行的3D框架THREE.js集成,并利用WebGL2在任意帶有網(wǎng)頁(yè)瀏覽器的設(shè)備上運(yùn)行,包括桌面端、iOS、Android以及VR設(shè)備。
與上一版本相比,Spark 2.0新增了一套細(xì)節(jié)層級(jí)(LoD)系統(tǒng),能夠在任意設(shè)備上流式傳輸并渲染超大規(guī)模的3DGS世界。
▲在兒童房間里自由探索,物品細(xì)節(jié)清晰(來(lái)源:World Labs博客)
此外,新版還使用了.RAD的3DGS文件格式,支持漸進(jìn)式細(xì)化的流式傳輸,而虛擬潑濺分頁(yè)系統(tǒng)則通過(guò)固定的GPU內(nèi)存分配,實(shí)現(xiàn)了對(duì)無(wú)限潑濺世界的訪問(wèn),通俗來(lái)講就是可以渲染無(wú)限大的3D場(chǎng)景。
![]()
▲草原中的洞穴小屋,場(chǎng)景轉(zhuǎn)換無(wú)畸變(來(lái)源:World Labs博客)
如此流暢連貫的效果是怎么實(shí)現(xiàn)的?針對(duì)大規(guī)模場(chǎng)景的擴(kuò)展難題,Spark 2.0運(yùn)用了3項(xiàng)圖形學(xué)與系統(tǒng)底層方案:細(xì)節(jié)層次優(yōu)化、漸進(jìn)式流式加載以及虛擬顯存管理。
李飛飛團(tuán)隊(duì)在博客中,對(duì)Spark 2.0背后的三項(xiàng)技術(shù)進(jìn)行了十分詳細(xì)的展開(kāi),具體如下:
一、采取連續(xù)式細(xì)節(jié)層級(jí),穩(wěn)定渲染百萬(wàn)級(jí)潑濺
在計(jì)算機(jī)圖形學(xué)中,處理大型3D場(chǎng)景時(shí)常常采用細(xì)節(jié)層級(jí)系統(tǒng),該系統(tǒng)會(huì)根據(jù)物體與觀察者之間的距離自動(dòng)調(diào)整渲染的細(xì)節(jié)程度,
不同的細(xì)節(jié)層級(jí)方法介于離散式與連續(xù)式之間,形成一個(gè)技術(shù)譜系。采用離散式細(xì)節(jié)層級(jí)(LoD,Level-of-Detail)時(shí),系統(tǒng)需要為潑濺效果制作多個(gè)版本,從精簡(jiǎn)到精細(xì)依次遞增,再根據(jù)各版本的近似邊界與相機(jī)的距離,在不同版本間進(jìn)行切換。
Spark的早期系統(tǒng)設(shè)計(jì)支持離散模式,但其存在明顯缺陷:當(dāng)用戶(hù)在場(chǎng)景中移動(dòng)、不同版本突然切換時(shí),畫(huà)面會(huì)出現(xiàn)明顯的跳變;此外,將潑濺效果按區(qū)塊分組后,用戶(hù)還能看到清晰的邊界痕跡。
Spark 2.0的LoD設(shè)計(jì)采用了一種連續(xù)式LoD方法,所有潑濺都存在于一個(gè)層級(jí)結(jié)構(gòu)中,即LoD潑濺樹(shù)。Spark 2.0會(huì)沿著樹(shù)的一個(gè)邊界切割面單獨(dú)選取潑濺,從而在視口內(nèi)優(yōu)化潑濺的細(xì)節(jié)。
![]()
▲LoD潑濺樹(shù)(來(lái)源:World Labs博客)
樹(shù)中的每個(gè)內(nèi)部節(jié)點(diǎn)都是其子節(jié)點(diǎn)的一個(gè)低分辨率版本,通過(guò)將子節(jié)點(diǎn)的多個(gè)潑濺合并成一個(gè)新的潑濺來(lái)近似表示子節(jié)點(diǎn)潑濺的形狀和顏色。這個(gè)過(guò)程一直持續(xù)到樹(shù)的根節(jié)點(diǎn)——一個(gè)單一的、大的潑濺,它聚合了該物體中所有潑濺的整體形狀和顏色。
利用這棵LoD潑濺樹(shù),Spark 2.0會(huì)計(jì)算出穿過(guò)該樹(shù)的一個(gè)“切片”,從而為當(dāng)前視口選取最佳的N個(gè)潑濺進(jìn)行渲染。通過(guò)設(shè)置一個(gè)最大潑濺預(yù)算N(根據(jù)設(shè)備類(lèi)型不同,通常在50萬(wàn)到250萬(wàn)個(gè)潑濺之間),系統(tǒng)確保每幀只需渲染恒定數(shù)量的潑濺,從而獲得穩(wěn)定、高幀率的渲染性能。通過(guò)上下調(diào)整N值,即可在幀率和潑濺細(xì)節(jié)之間進(jìn)行權(quán)衡。
![]()
▲公園中的自行車(chē),細(xì)節(jié)真實(shí),前后一致性強(qiáng)(來(lái)源:World Labs博客)
Spark 2.0通過(guò)同時(shí)遍歷多個(gè)LoD潑濺樹(shù)實(shí)例,對(duì)該算法進(jìn)行了進(jìn)一步擴(kuò)展。與僅從單一根節(jié)點(diǎn)開(kāi)始遍歷不同,針對(duì)每個(gè)3DGS物體,拓展后的算法會(huì)將其屏幕尺寸及潑濺節(jié)點(diǎn) (dm0,Sm0) 一同加入初始優(yōu)先隊(duì)列,后續(xù)流程與原有邏輯保持一致,可在場(chǎng)景中所有3DGS物體上同步篩選需細(xì)化的細(xì)節(jié)層級(jí)。
這一設(shè)計(jì)讓大規(guī)模組合世界的創(chuàng)建變得簡(jiǎn)單高效:只需在空間任意位置添加3DGS LoD物體,Spark 2.0便能自動(dòng)計(jì)算出每幀需渲染的所有LoD潑濺的最優(yōu)全局子集。
二、設(shè)計(jì)新型文件格式,大場(chǎng)景3D世界在網(wǎng)頁(yè)上秒開(kāi)
Spark2.0定義了一種新的文件格式.RAD(代表RADiance場(chǎng)),該格式能夠壓縮3DGS數(shù)據(jù),并支持隨機(jī)訪問(wèn)流式傳輸,從而在數(shù)據(jù)通過(guò)網(wǎng)絡(luò)傳輸時(shí)實(shí)現(xiàn)漸進(jìn)式細(xì)化。
目前最常見(jiàn)的兩種3DGS數(shù)據(jù)文件格式是.PLY和.SPZ,它們代表了兩種不同的數(shù)據(jù)編碼方式:行式存儲(chǔ)和列式存儲(chǔ)。
.PLY文件是按行順序存儲(chǔ)的,在接收到數(shù)據(jù)后立即顯示潑濺,從而實(shí)現(xiàn)漸進(jìn)式加載。但它未經(jīng)過(guò)壓縮,且編碼精度存在浪費(fèi)。.SPZ文件將相似類(lèi)型的數(shù)據(jù)按列順序存儲(chǔ)在一起,從而獲得了更好的壓縮率。但遺憾的是,它無(wú)法實(shí)現(xiàn)漸進(jìn)式加載,因?yàn)樵谌魏螡姙R獲得其所有屬性之前,必須接收完整的文件。
為實(shí)現(xiàn)3DGS數(shù)據(jù)的高效壓縮與流式傳輸,李飛飛團(tuán)隊(duì)設(shè)計(jì)了全新的.RAD文件格式。該格式編解碼簡(jiǎn)潔、擴(kuò)展性強(qiáng)、編碼精度可調(diào)節(jié),同時(shí)支持隨機(jī)訪問(wèn)。
![]()
▲.RAD文件格式(來(lái)源:World Labs博客)
文件結(jié)構(gòu)十分清晰:以RAD0文件頭開(kāi)頭,隨后依次為頭部元數(shù)據(jù)長(zhǎng)度、元數(shù)據(jù)JSON,以及一個(gè)或多個(gè)各含6.4萬(wàn)個(gè)潑濺的數(shù)據(jù)塊。頭部元數(shù)據(jù)記錄了所有數(shù)據(jù)塊的偏移地址與字節(jié)大小,支持任意順序讀取數(shù)據(jù)塊內(nèi)容。
單個(gè)數(shù)據(jù)塊也采用相似結(jié)構(gòu):以RADC塊頭起始,接著是塊元數(shù)據(jù)長(zhǎng)度、元數(shù)據(jù)JSON,最后為該6.4萬(wàn)個(gè)潑濺的壓縮數(shù)據(jù)。潑濺各項(xiàng)屬性按列存儲(chǔ),可分別選用自定義編碼方式。同類(lèi)數(shù)據(jù)集中存放,再通過(guò)Gzip壓縮,能獲得出色的壓縮率。
頭部采用JSON編碼,可通過(guò)版本字段與新增可選字段保障后續(xù)擴(kuò)展。數(shù)據(jù)類(lèi)型編碼與壓縮算法均以字符串名稱(chēng)在元數(shù)據(jù)中指定,方便后續(xù)擴(kuò)展新類(lèi)型。
三、采用虛擬內(nèi)存,開(kāi)辟1600萬(wàn)潑濺固定顯存池
虛擬內(nèi)存是一項(xiàng)內(nèi)存管理技術(shù),它以固定大小的物理內(nèi)存為基礎(chǔ),向程序提供大容量的虛擬地址空間,并通過(guò)頁(yè)表以固定尺寸的頁(yè)為單位,完成虛擬地址與物理地址的映射。
Spark 2.0將這一思路應(yīng)用到3DGS渲染中。具體來(lái)講,李飛飛團(tuán)隊(duì)在GPU上開(kāi)辟了一塊可容納1600萬(wàn)個(gè)潑濺的固定顯存池,自動(dòng)管理GPU中每6.4萬(wàn)個(gè)潑濺為一頁(yè)的“顯存頁(yè)”,與.RAD文件中對(duì)應(yīng)大小的虛擬數(shù)據(jù)塊之間的映射。
![]()
▲虛擬內(nèi)存(來(lái)源:World Labs博客)
數(shù)據(jù)塊會(huì)按照LoD遍歷順序加載到空閑頁(yè)面中;當(dāng)頁(yè)表占滿(mǎn),且新數(shù)據(jù)塊優(yōu)先級(jí)更高時(shí),系統(tǒng)會(huì)按最近最少使用(LRU)策略淘汰舊數(shù)據(jù)。
Spark 2.0支持同時(shí)加載多個(gè).RAD文件并共用同一張頁(yè)表。對(duì)每個(gè)文件,系統(tǒng)會(huì)記錄數(shù)據(jù)塊到頁(yè)表的映射,以及頁(yè)表到對(duì)應(yīng)文件與數(shù)據(jù)的反向映射。
在遍歷多棵LoD潑濺樹(shù)時(shí),引擎會(huì)記錄數(shù)據(jù)塊與文件的訪問(wèn)順序,形成全局統(tǒng)一的優(yōu)先級(jí)排序,進(jìn)而對(duì)場(chǎng)景中所有3DGS物體的潑濺加載與存儲(chǔ)進(jìn)行統(tǒng)一優(yōu)化。
結(jié)語(yǔ):Spark 2.0降低空間智能的創(chuàng)作門(mén)檻,爭(zhēng)奪基礎(chǔ)設(shè)施定義權(quán)
從2025年的首次亮相到今日的2.0版本迭代,Spark的進(jìn)化軌跡某種程度上也映射著3DGS這一技術(shù)的成熟曲線。
三維內(nèi)容的交付長(zhǎng)期以來(lái)被兩座大山壓著:一是資產(chǎn)太重,動(dòng)輒GB級(jí)的文件讓網(wǎng)頁(yè)端望而卻步;二是渲染太貴,高端GPU才能流暢運(yùn)行的場(chǎng)景,手機(jī)瀏覽器只能?chē)^。
Spark 2.0通過(guò)連續(xù)LoD、.RAD格式和虛擬顯存“三板斧”,讓高質(zhì)量三維內(nèi)容像普通圖片和視頻一樣,在互聯(lián)網(wǎng)上自由流動(dòng)、即點(diǎn)即看。
李飛飛團(tuán)隊(duì)選擇將該技術(shù)開(kāi)源,降低了空間智能的創(chuàng)作門(mén)檻,同樣也是在爭(zhēng)奪下一代空間內(nèi)容基礎(chǔ)設(shè)施的定義權(quán)。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶(hù)上傳并發(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.