一個 4000 萬粒子的 3D 場景,文件體積超過 1 GB,過去只能在高端顯卡上勉強(qiáng)跑動。現(xiàn)在,World Labs 把它塞進(jìn)了手機(jī)瀏覽器。
這不是 demo,是開源代碼。任何人今天就能下載、部署、修改。
![]()
為什么這件事值得興奮
3D 高斯點(diǎn)云(3DGS)技術(shù)火了兩三年,但"能用"和"好用"之間隔著一道鴻溝。
拍一圈照片生成 3D 場景,這個環(huán)節(jié)已經(jīng)成熟。真正的瓶頸在渲染端:高質(zhì)量掃描動輒幾千萬個 splat(潑濺體),普通手機(jī)的上限是 100-500 萬個,差了一個數(shù)量級。
更麻煩的是,市面上的渲染器要么只能渲染單個對象,要么把多個對象塞進(jìn)同一場景時,排序錯亂、互相穿模,畫面慘不忍睹。
World Labs 的解法是一套完整的技術(shù)棧,從文件格式到內(nèi)存管理重新設(shè)計。他們把這個引擎開源了,取名 Spark 2.0。
Spark 1.0:先解決"能跑"的問題
Spark 最初只是 World Labs 的內(nèi)部工具。他們需要在網(wǎng)頁上展示 3DGS 生成的世界,試了一圈現(xiàn)有方案,發(fā)現(xiàn)都有硬傷。
有的渲染器依賴 WebGPU,很多設(shè)備還不支持。有的不支持動態(tài)動畫。最致命的是,沒有一款能正確處理多個 3DGS 對象在同一場景中的深度排序。
World Labs 選擇的技術(shù)底座是 THREE.js,Web 上最流行的 3D 框架,運(yùn)行在 WebGL2 之上,幾乎覆蓋所有現(xiàn)代設(shè)備。
核心渲染邏輯分三步:先在 GPU 上生成跨對象的全局 splat 列表,再統(tǒng)一按從遠(yuǎn)到近排序,最后一次性渲染完畢。
「全局排序」聽起來平平無奇,實(shí)則是讓多個 3DGS 對象共存于同一場景、不互相穿模的關(guān)鍵。Spark 還開放了一套 GPU 處理流水線,支持對每個 splat 重新上色、調(diào)整透明度、添加動態(tài)動畫,用 GLSL 編寫或像 Blender 那樣連節(jié)點(diǎn)圖實(shí)現(xiàn)。
1.0 版本解決了多對象渲染,但 4000 萬 splat 的場景依然是道跨不過去的坎。這才有了 2.0。
Spark 2.0:三項(xiàng)技術(shù)合力,撐起億級粒子
Spark 2.0 的核心是三項(xiàng)技術(shù)的組合:LoD 細(xì)節(jié)層級、漸進(jìn)式流式加載、GPU 虛擬內(nèi)存。單獨(dú)看都有先例,三者合力才撐起了手機(jī)瀏覽器里流暢渲染億級 splat 的能力。
第一,連續(xù) LoD 樹:讓遠(yuǎn)處變"糊"得有技巧。
LoD(Level of Detail,細(xì)節(jié)層級)在游戲圈是成熟概念。近處的樹用幾千個三角形,遠(yuǎn)處的只留幾十個,按需分配算力。Unreal Engine 的 Nanite 系統(tǒng)也是這個思路。
Spark 2.0 把同樣邏輯搬到 splat 上,做得更徹底。
離散切換幾個版本容易產(chǎn)生畫面"跳變",Spark 的做法是構(gòu)建一棵完整的「連續(xù) LoD 樹」。每個內(nèi)部節(jié)點(diǎn)都是其子節(jié)點(diǎn) splat 融合后的近似版本,層層向上匯聚,最終到達(dá)根節(jié)點(diǎn)——整個場景最粗粒度的單一 splat。
渲染時,系統(tǒng)根據(jù)當(dāng)前視角在這棵樹上動態(tài)劃一刀。靠近視角的區(qū)域取底層細(xì)節(jié),遠(yuǎn)處取高層粗粒度。
整個過程受一個固定的 splat 預(yù)算約束:移動端約 50 萬,桌面端約 250 萬。場景里總共有多少 splat 都無所謂,實(shí)際送上 GPU 的數(shù)量始終穩(wěn)定,幀率自然穩(wěn)了。
在此基礎(chǔ)上,Spark 還引入了「注視點(diǎn)渲染」(Foveated Rendering)。更多預(yù)算集中分配給你正在看的方向,邊緣和背后的區(qū)域細(xì)節(jié)自動收窄。這個效果在 VR 設(shè)備上尤其直觀,通常需要眼動追蹤,Spark 用固定錐形區(qū)域近似模擬,同樣奏效。
第二,.RAD 格式:像刷短視頻一樣流式加載。
渲染效率解決了,傳輸效率同樣棘手。現(xiàn)有 3DGS 文件格式有兩個:.PLY 和 .SPZ。
.PLY 未壓縮,10M splat 高達(dá) 2.3 GB。雖然可以邊下邊顯示,但體積實(shí)在吃不消。.SPZ 用列式存儲加 Gzip 壓縮,同等數(shù)據(jù)量壓到 200-250 MB,代價是必須等整個文件下載完才能顯示——每個 splat 的屬性分散在文件各處,缺了哪一段都拼不出完整內(nèi)容。
Spark 2.0 設(shè)計了新格式 .RAD(RADiance fields)。它把 splat 數(shù)據(jù)切成每塊 64K 個 splat 的獨(dú)立小塊,分別壓縮,并在文件頭記錄所有塊的字節(jié)偏移位置,支持隨機(jī)訪問任意一塊。
第一塊永遠(yuǎn)是整個場景最粗粒度的 64K 個 splat,下載完畢后場景輪廓立刻可見。此后系統(tǒng)根據(jù)視角判斷哪些區(qū)域最需要細(xì)化,優(yōu)先拉取對應(yīng)數(shù)據(jù)塊,畫面從模糊逐漸推演出細(xì)節(jié)。3 個并行的 Web Worker 線程在后臺同步拉取和解碼,你走到哪,細(xì)節(jié)就跟到哪。
第三,GPU 虛擬內(nèi)存:在有限顯存里裝下無限空間。
流式加載解決了帶寬,但 GPU 內(nèi)存的硬上限依舊難啃。移動端瀏覽器對顯存有嚴(yán)格約束,塞不下整個 4000 萬 splat 的場景。
Spark 2.0 借鑒了操作系統(tǒng)的虛擬內(nèi)存機(jī)制。
系統(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ù)個獨(dú)立掃描場景可以無縫拼接成一個無限大的世界。
李飛飛的選擇:為什么開源
Spark 2.0 發(fā)布后,李飛飛第一時間公開表態(tài):「Spark 2.0 現(xiàn)在可以在任何設(shè)備上流暢播放超過 1 億個 splat 對象,非常榮幸能為基于 Web 的 3DGS 渲染開源生態(tài)系統(tǒng)做出貢獻(xiàn)。」
她沒有強(qiáng)調(diào)"做到了什么",而是把重點(diǎn)放在"為開源社區(qū)貢獻(xiàn)了什么"。
這個表述耐人尋味。3DGS 渲染是一個仍在快速演進(jìn)的領(lǐng)域,單靠一家公司推不動整個生態(tài)。開源才是加速這件事的正確姿勢——讓更多開發(fā)者參與進(jìn)來,把引擎用在各自場景里,反饋問題、貢獻(xiàn)優(yōu)化,技術(shù)迭代才會更快。
從已有案例看,開發(fā)者確實(shí)在用 Spark 做各種嘗試。Webby 獎得主 James C. Kane 獨(dú)立開發(fā)了一款名為 Still Life 的 3D 敘事游戲,完全基于 Spark 構(gòu)建。建筑可視化團(tuán)隊開始用它做網(wǎng)頁端的房產(chǎn)漫游。文化遺產(chǎn)數(shù)字化項(xiàng)目用它展示大型遺址掃描。
技術(shù)底座的選擇:為什么是 WebGL2 而非 WebGPU
這里有一個值得玩味的工程決策。
WebGPU 是新一代 Web 圖形標(biāo)準(zhǔn),性能更強(qiáng)、更接近底層硬件。但 Spark 團(tuán)隊選擇了 WebGL2,原因是兼容性。
WebGL2 覆蓋幾乎所有現(xiàn)代設(shè)備,包括大量中低端安卓機(jī)和舊款 iPhone。WebGPU 雖然勢頭很猛,但普及率仍有差距,尤其在企業(yè)內(nèi)網(wǎng)、教育機(jī)房、發(fā)展中國家市場,設(shè)備更新周期往往以年為單位。
這個選擇犧牲了部分性能上限,換來了最大的用戶觸達(dá)面。對于想"讓任何設(shè)備都能跑"的 World Labs 來說,這是合理的權(quán)衡。
當(dāng)然,Spark 的架構(gòu)預(yù)留了擴(kuò)展空間。核心渲染邏輯與底層圖形 API 有一定解耦,未來 WebGPU 普及后,遷移成本可控。
商業(yè)模式的想象空間
World Labs 本身是一家商業(yè)公司,去年完成 2.3 億美元融資,估值超過 10 億美元。開源核心引擎,不等于沒有商業(yè)路徑。
可能的變現(xiàn)方向有幾個:一是云服務(wù),提供 3DGS 場景的托管、轉(zhuǎn)換、全球加速分發(fā),按流量或存儲收費(fèi);二是企業(yè)級功能,比如團(tuán)隊協(xié)作、版本管理、與 CAD/BIM 工作流的深度集成;三是垂直行業(yè)解決方案,針對建筑、電商、文旅等場景打包交付。
更長期來看,當(dāng) 3D 內(nèi)容的生產(chǎn)和分發(fā)成本降到足夠低,World Labs 可能成為"3D 互聯(lián)網(wǎng)"的基礎(chǔ)設(shè)施層之一。就像 Cloudflare 之于靜態(tài)網(wǎng)頁,Twilio 之于短信驗(yàn)證。
這個愿景的前提是,3D 內(nèi)容真的會從"炫酷 demo"變成"日常剛需"。Spark 2.0 解決的是分發(fā)環(huán)節(jié)的關(guān)鍵瓶頸,但生產(chǎn)環(huán)節(jié)的成本、消費(fèi)端的用戶習(xí)慣,仍需時間培育。
對開發(fā)者的實(shí)際意義
如果你今天就想上手,Spark 2.0 提供了什么?
首先是性能基準(zhǔn):移動端 50 萬 splat 預(yù)算下穩(wěn)定 30fps,桌面端 250 萬 splat 預(yù)算下流暢交互。這個性能水平,足以支撐大多數(shù)消費(fèi)級應(yīng)用場景。
其次是工具鏈完整性:從 .PLY/.SPZ 轉(zhuǎn)換到 .RAD 的編碼器、基于 THREE.js 的渲染器、GLSL 和節(jié)點(diǎn)圖兩種自定義方式,文檔和示例代碼齊全。
第三是擴(kuò)展性:GPU 虛擬內(nèi)存架構(gòu)允許動態(tài)加載任意數(shù)量的場景片段,為大型開放世界、元宇宙類應(yīng)用提供了技術(shù)基礎(chǔ)。
限制也客觀存在。LoD 樹的構(gòu)建需要預(yù)處理時間,不是實(shí)時生成。.RAD 格式的壓縮率相比 .SPZ 仍有優(yōu)化空間。注視點(diǎn)渲染目前用固定錐形近似,精準(zhǔn)的眼動追蹤版本尚未實(shí)現(xiàn)。
行業(yè)影響:3DGS 正在從"實(shí)驗(yàn)室"走向"生產(chǎn)線"
回顧 3DGS 技術(shù)的發(fā)展脈絡(luò),2023 年是學(xué)術(shù)突破年,2024 年是工程優(yōu)化年,2025 年可能是應(yīng)用落地年。
學(xué)術(shù)層面,3DGS 的原始論文提出了一種全新的場景表示方法,用可微分的 3D 高斯替代神經(jīng)輻射場的隱式網(wǎng)絡(luò),訓(xùn)練速度提升數(shù)個數(shù)量級。
工程層面,過去兩年出現(xiàn)了大量優(yōu)化工作:壓縮算法把模型體積縮小幾十倍,實(shí)時渲染器在高端顯卡上跑出 60fps,移動端適配方案陸續(xù)出現(xiàn)。
Spark 2.0 的意義在于,它把工程優(yōu)化的成果打包成一個"開箱即用"的開源方案,并且選擇了最廣泛的部署目標(biāo)——手機(jī)瀏覽器。這相當(dāng)于在學(xué)術(shù)成果和實(shí)際應(yīng)用之間搭了一座橋。
對比同領(lǐng)域的其他玩家:Niantic 的 8th Wall 專注 WebAR,但 3DGS 支持仍在完善;Google 的 Immersive View 依賴自家地圖數(shù)據(jù),開放程度有限;國內(nèi)廠商如商湯、曠視也在推進(jìn)類似技術(shù),但開源力度不及 World Labs。
Spark 2.0 的開源策略,可能加速整個行業(yè)的標(biāo)準(zhǔn)化進(jìn)程。當(dāng)足夠多的開發(fā)者采用同一套技術(shù)棧,工具鏈、人才儲備、最佳實(shí)踐都會快速積累,形成正向循環(huán)。
一個需要持續(xù)觀察的問題
Spark 2.0 解決了"跑起來"的問題,但 3D 內(nèi)容生態(tài)的繁榮,最終取決于"誰在生產(chǎn)"和"誰在消費(fèi)"。
生產(chǎn)端,3DGS 的采集仍需要專業(yè)設(shè)備或至少一部高端手機(jī),處理流程對普通用戶不夠友好。消費(fèi)端,用戶是否有動力在瀏覽器里探索 3D 場景,而非刷短視頻,尚無定論。
World Labs 的開源引擎降低了分發(fā)門檻,但生產(chǎn)和消費(fèi)兩端的瓶頸,需要更多參與者共同解決。當(dāng) 3D 內(nèi)容的生產(chǎn)成本降到拍一張照片、消費(fèi)體驗(yàn)流暢到刷一個短視頻,我們才會看到真正的爆發(fā)。
那一天還有多遠(yuǎn)?
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(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.