
1. 從“渲染一張圖要等半天”說起3D Gaussian Splatting 到底解決了什么如果你最近在圖形學(xué)圈子里混大概率躲不開3D Gaussian Splatting這個詞。各種演示視頻里一個場景從幾十張照片出發(fā)幾分鐘內(nèi)就能在瀏覽器里實時旋轉(zhuǎn)、縮放、漫游光影和細(xì)節(jié)還相當(dāng)能打。很多人第一反應(yīng)是“又一個新玩具”但真正上手做過三維重建的人會明白它戳中的是過去幾年一直沒被很好解決的一堆痛點。我接觸三維重建和神經(jīng)渲染這條線有幾年了從最早的 NeRF 到后來的各種加速變體踩過的坑不算少。3D Gaussian Splatting后面簡稱 3DGS在 2023 年出現(xiàn)之后我第一時間跑通了官方實現(xiàn)也拿自己的數(shù)據(jù)集做了對比。這篇是系列的第二篇專門聊它到底解決了什么問題——不是復(fù)述論文而是從一個實際使用者的角度把“為什么它值得關(guān)注”講清楚。先說結(jié)論3DGS 解決的核心問題是在保持高質(zhì)量渲染的前提下把訓(xùn)練速度和渲染速度同時拉到了實時級別并且用一種顯式、可編輯的場景表示繞開了神經(jīng)隱式表示在工程落地上的很多麻煩。它適合誰看如果你在做三維重建、數(shù)字孿生、虛擬場景搭建、AR/VR 內(nèi)容或者只是對“從照片生成可漫游三維場景”感興趣這篇應(yīng)該能幫你理清它和 NeRF 那條路線的本質(zhì)差異。2. 先搞清楚 3DGS 出現(xiàn)之前大家卡在哪里2.1 NeRF 的輝煌與它的“慢”要理解 3DGS 解決了什么得先回到它要挑戰(zhàn)的對象——NeRFNeural Radiance Fields神經(jīng)輻射場。NeRF 的思路非常優(yōu)雅用一個多層感知機MLP去擬合一個連續(xù)函數(shù)輸入是空間坐標(biāo)和觀察方向輸出是那個點的顏色和密度。渲染的時候沿著光線采樣把采樣點的顏色和密度積分起來就得到像素值。這個思路在 2020 年橫空出世時確實驚艷畫質(zhì)細(xì)膩、視角一致性好尤其是對反光和半透明材質(zhì)的處理傳統(tǒng)方法很難做到。但問題也很致命訓(xùn)練慢、渲染慢。原始 NeRF 訓(xùn)一個場景要一兩天渲染一幀要幾十秒甚至更久。原因在于每渲染一個像素都要在光線上采樣上百個點每個點都要過一遍 MLP計算量爆炸。后來出現(xiàn)了一堆加速方案比如把場景切成網(wǎng)格、用哈希編碼、用更小的網(wǎng)絡(luò)、做重要性采樣等等。這些方法確實把訓(xùn)練時間壓到了幾分鐘到幾十分鐘渲染也能到接近實時。但代價是實現(xiàn)復(fù)雜度飆升顯存占用大而且很多加速結(jié)構(gòu)本身很難編輯。你沒法簡單地“刪掉場景里的一個物體”或者“把某個區(qū)域換個顏色”因為整個場景是耦合在一個神經(jīng)網(wǎng)絡(luò)或者哈希表里的。2.2 傳統(tǒng)顯式重建的“糙”另一條路是傳統(tǒng)的顯式重建比如點云、網(wǎng)格、體素。這些表示的好處是直觀、可編輯、渲染管線成熟。但問題在于從多視角照片重建出高質(zhì)量的點云或網(wǎng)格非常困難。點云稀疏、有噪聲網(wǎng)格重建容易丟細(xì)節(jié)尤其是對細(xì)薄結(jié)構(gòu)、透明物體、復(fù)雜紋理傳統(tǒng)方法往往力不從心。而且渲染質(zhì)量高度依賴幾何精度幾何一糙畫面就崩。所以過去幾年的局面是隱式表示畫質(zhì)好但慢且難編輯顯式表示快且可編輯但畫質(zhì)糙。大家一直在等一個能兼顧兩者的方案。2.3 3DGS 的破局點用“一堆高斯球”表示場景3DGS 的核心洞察其實很樸素既然隱式表示難編輯、顯式表示畫質(zhì)糙那能不能用一種既顯式、又能表達(dá)連續(xù)輻射場的表示答案是用一堆三維高斯分布來拼出整個場景。每個高斯有自己的位置、協(xié)方差決定形狀和朝向、不透明度以及用球諧函數(shù)表示的顏色跟視角有關(guān)。渲染的時候把這些高斯投影到屏幕上按深度排序然后做 alpha 混合。整個過程是可微的所以可以用照片做監(jiān)督通過梯度下降去優(yōu)化每個高斯的參數(shù)。這個設(shè)計一下子把幾個問題同時解決了表示是顯式的每個高斯就是一個可操作單元渲染是光柵化式的天然適合 GPU 并行優(yōu)化是端到端的畫質(zhì)能逼近甚至超過 NeRF。下面我拆開講它具體解決了哪些問題。3. 3DGS 到底解決了哪些具體問題3.1 訓(xùn)練速度從“按天算”到“按分鐘算”這是最直觀的改進(jìn)。官方實現(xiàn)里一個中等復(fù)雜度的場景訓(xùn)練時間通常在幾分鐘到十幾分鐘取決于照片數(shù)量和分辨率。我實測過一個約 100 張照片的室內(nèi)場景在單張消費級顯卡上跑了大概 8 分鐘就收斂得不錯了。對比原始 NeRF 動輒一兩天這是數(shù)量級的提升。為什么能這么快關(guān)鍵在于沒有神經(jīng)網(wǎng)絡(luò)推理的瓶頸。NeRF 每次采樣都要過 MLP而 3DGS 的“前向”主要是高斯的投影和混合這些都是高度并行的矩陣運算GPU 非常擅長。反向傳播也只需要更新高斯參數(shù)不涉及深層網(wǎng)絡(luò)。再加上它用了自適應(yīng)密度控制——在細(xì)節(jié)多的地方分裂高斯在空曠區(qū)域裁剪高斯——讓高斯數(shù)量保持在合理范圍不會無謂地浪費算力。實操心得訓(xùn)練速度對硬件很敏感尤其是顯存帶寬。同樣的場景顯存大的卡能開更高分辨率、更多高斯收斂更快。如果顯存吃緊可以適當(dāng)降低初始點云密度但別降太狠否則細(xì)節(jié)恢復(fù)會變差。3.2 渲染速度真正的實時漫游訓(xùn)練快只是第一步渲染快才是 3DGS 真正出圈的原因。官方演示里1080p 分辨率下渲染幀率能到 100 FPS 以上甚至更高。這意味著你可以在普通筆記本上流暢地旋轉(zhuǎn)、縮放、漫游一個從照片重建出來的場景延遲低到幾乎感覺不到。這背后是光柵化管線的功勞。高斯投影到屏幕后按 tile 分塊每個 tile 內(nèi)做深度排序和 alpha 混合整個過程跟傳統(tǒng)游戲渲染的思路很像天然適合 GPU。相比之下NeRF 的體渲染需要沿光線采樣即使加速后也很難做到穩(wěn)定高幀率。我拿同一個場景分別用加速版 NeRF 和 3DGS 渲染過NeRF 大概能到 20-30 FPS而 3DGS 輕松跑滿 60 FPS 以上而且畫質(zhì)沒有明顯下降。對于需要交互的應(yīng)用比如虛擬看房、文物展示、游戲場景預(yù)覽這個差距是決定性的。3.3 顯式表示帶來的可編輯性這是我覺得被很多人低估的一點。因為場景是一堆獨立的高斯你可以直接對它們做操作刪掉一部分高斯就等于刪掉一個物體移動一組高斯就能移動物體改顏色、改不透明度都很直接。這在 NeRF 里幾乎是不可能輕松做到的因為信息分散在網(wǎng)絡(luò)的權(quán)重里。舉個例子我做場景清理時想把重建結(jié)果里的一些漂浮噪點去掉。在 3DGS 里我可以按高斯的不透明度或者尺寸篩選把明顯異常的高斯刪掉重新渲染立刻見效。而在 NeRF 里你只能重新訓(xùn)練或者調(diào)網(wǎng)絡(luò)非常麻煩。這種可編輯性對下游應(yīng)用意義很大數(shù)字內(nèi)容創(chuàng)作、場景編輯、物理仿真接入都變得可行。你可以把 3DGS 場景導(dǎo)出跟傳統(tǒng)渲染管線結(jié)合甚至做動態(tài)編輯。3.4 畫質(zhì)不輸 NeRF某些場景更好早期有人擔(dān)心顯式表示畫質(zhì)會糙但實際對比下來3DGS 在多數(shù)場景下畫質(zhì)跟 NeRF 持平在細(xì)節(jié)豐富、紋理復(fù)雜的場景里甚至更好。因為它用大量高斯去擬合細(xì)節(jié)不像 MLP 那樣容易過平滑。尤其是對高頻紋理、細(xì)薄結(jié)構(gòu)3DGS 恢復(fù)得更銳利。當(dāng)然它也有短板比如對鏡面反射、透明折射的處理不如 NeRF 自然因為高斯本身不擅長表達(dá)這些復(fù)雜光路。但社區(qū)已經(jīng)在改進(jìn)比如結(jié)合環(huán)境貼圖、引入反射項等。整體來說畫質(zhì)已經(jīng)足夠滿足大多數(shù)應(yīng)用需求。3.5 工程落地的友好度從工程角度看3DGS 的部署門檻低很多。訓(xùn)練好的場景就是一組高斯參數(shù)可以存成文件加載到渲染器里直接畫。不需要帶著一個神經(jīng)網(wǎng)絡(luò)推理框架到處跑也不需要擔(dān)心不同硬件上 MLP 的數(shù)值差異。渲染器可以用 CUDA 寫也可以用 WebGL/WebGPU 做瀏覽器端渲染社區(qū)已經(jīng)有多個開源實現(xiàn)。這對產(chǎn)品化很關(guān)鍵。NeRF 方案往往要綁定特定的推理后端部署復(fù)雜、優(yōu)化困難。而 3DGS 更接近傳統(tǒng)圖形管線的思路容易集成到現(xiàn)有引擎里比如 Unity、Unreal 都有相關(guān)插件在冒出來。4. 它沒解決什么邊界與注意事項4.1 顯存和存儲占用高斯數(shù)量可以很大一個精細(xì)場景可能有幾百萬甚至上千萬個高斯每個高斯要存位置、協(xié)方差、顏色、不透明度等參數(shù)存儲和顯存占用都不小。我遇到過一些場景訓(xùn)練完模型文件好幾百 MB加載到顯存里也吃緊。雖然社區(qū)有壓縮方案比如量化、剪枝但這是它相比 NeRF 的一個劣勢——NeRF 的模型文件通常小得多。注意如果你的應(yīng)用對包體大小敏感比如移動端或者網(wǎng)頁端需要提前評估高斯數(shù)量和壓縮策略。別等到部署時才發(fā)現(xiàn)加載不動。4.2 對初始點云的依賴3DGS 通常從稀疏點云比如用 SfM 工具生成初始化。如果初始點云質(zhì)量差、覆蓋不全重建效果會受影響。它雖然有自適應(yīng)密度控制但沒法憑空變出缺失區(qū)域的結(jié)構(gòu)。所以前期拍照和 SfM 的質(zhì)量仍然很重要不是隨便拍幾張就能出好結(jié)果。4.3 動態(tài)場景和光照變化原始 3DGS 假設(shè)場景是靜態(tài)的、光照固定的。如果場景里有運動物體或者拍攝時曝光變化大重建會出現(xiàn)鬼影或顏色不一致。后續(xù)有很多工作在做動態(tài) 3DGS、可重光照 3DGS但都還在演進(jìn)中。如果你要做的是動態(tài)內(nèi)容需要選對應(yīng)的變體不能直接用原版。4.4 反射和透明材質(zhì)的挑戰(zhàn)前面提過高斯本身不擅長表達(dá)鏡面反射和折射。對于玻璃、水面、金屬這類材質(zhì)3DGS 容易顯得“糊”或者不真實。這是它相比 NeRF 的一個明顯短板也是當(dāng)前研究的熱點。5. 一張表看清 3DGS 與 NeRF 的差異維度NeRF 類方法3D Gaussian Splatting場景表示隱式神經(jīng)網(wǎng)絡(luò)顯式高斯集合訓(xùn)練時間幾分鐘到幾十小時幾分鐘到十幾分鐘渲染速度通常較慢加速后接近實時實時輕松高幀率畫質(zhì)優(yōu)秀反射透明處理好優(yōu)秀細(xì)節(jié)銳利反射透明較弱可編輯性差信息耦合在網(wǎng)絡(luò)里好可單獨操作高斯存儲占用較小較大依賴高斯數(shù)量部署難度較高依賴推理框架較低接近傳統(tǒng)圖形管線動態(tài)場景需專門變體需專門變體這張表不是要分高下而是幫你判斷什么場景該選什么。要極致畫質(zhì)和復(fù)雜光路NeRF 系仍有優(yōu)勢要實時交互、可編輯、快速迭代3DGS 更合適。6. 實操中容易踩的坑與排查思路6.1 訓(xùn)練出來一片模糊或者有大量漂浮物這通常跟初始點云質(zhì)量和訓(xùn)練步數(shù)有關(guān)。先檢查 SfM 輸出的點云是否覆蓋了場景主要區(qū)域如果點太稀疏可以調(diào)高 SfM 的密度或者換更好的拍攝方式。訓(xùn)練步數(shù)不夠也會導(dǎo)致高斯沒收斂適當(dāng)增加迭代次數(shù)。漂浮物多半是背景區(qū)域的高斯沒被裁掉可以在訓(xùn)練后按不透明度或尺寸過濾。6.2 渲染時幀率上不去先看高斯數(shù)量是不是太多。幾百萬個高斯在低端卡上確實吃力??梢試L試剪枝去掉不透明度低的高斯或者對遠(yuǎn)處的高斯做簡化。另外渲染分辨率也是關(guān)鍵降低分辨率能顯著提升幀率。如果用的是瀏覽器端渲染檢查是否開了硬件加速。6.3 顏色在不同視角下不一致這往往是曝光變化或者白平衡不一致導(dǎo)致的。拍攝時盡量鎖定曝光和白平衡或者后期做顏色校正。3DGS 對輸入照片的一致性比較敏感前期多花點時間處理照片后期省很多事。6.4 模型文件太大加載慢可以用量化把參數(shù)從 32 位浮點壓到 16 位甚至 8 位或者做高斯合并把相似的高斯合并成一個。社區(qū)有現(xiàn)成工具但要注意壓縮后畫質(zhì)會有些損失需要權(quán)衡。實操心得我習(xí)慣在訓(xùn)練完后先做一輪可視化檢查把明顯異常的高斯手動刪掉再導(dǎo)出。這樣模型更干凈加載也快。別小看這一步能省掉很多下游調(diào)試時間。7. 它適合你的項目嗎幾個判斷標(biāo)準(zhǔn)如果你在做需要實時交互的三維展示比如虛擬展廳、房產(chǎn)漫游、文物數(shù)字化3DGS 幾乎是當(dāng)前最優(yōu)解。如果你需要從照片快速迭代場景比如做概念設(shè)計、場景預(yù)覽它的訓(xùn)練速度能讓你一天試很多版。如果你需要對場景做編輯比如刪物體、換材質(zhì)它的顯式表示會讓你輕松很多。但如果你要做的是動態(tài)人物、復(fù)雜反射、大范圍戶外場景或者對存儲體積極其敏感那可能需要等對應(yīng)的變體成熟或者結(jié)合其他方案。技術(shù)選型沒有銀彈關(guān)鍵是看清自己的核心需求。我個人在實際項目里的體會是3DGS 最大的價值不是某一項指標(biāo)碾壓而是它把高質(zhì)量重建的門檻拉低了一大截。以前要搭一套 NeRF 管線、調(diào)各種參數(shù)、等很久才能看到結(jié)果現(xiàn)在幾分鐘就能出一個可交互的場景這種反饋速度對創(chuàng)作和迭代的幫助是巨大的。后續(xù)這個系列我還會聊具體的訓(xùn)練配置、參數(shù)調(diào)優(yōu)和部署方案感興趣可以繼續(xù)關(guān)注。