3D Gaussian Splatting 是什麼,和網格、NeRF 的差別
3D Gaussian Splatting(以下簡稱 3DGS)把場景表示成大量的三維高斯,每個高斯帶有位置、大小、方向、不透明度與顏色。渲染時,這些高斯依深度排序,投影到螢幕上,再逐一疊合成畫面。原始論文是 Kerbl 等人發表於 ACM Transactions on Graphics 的《3D Gaussian Splatting for Real-Time Radiance Field Rendering》(Kerbl 等,2023)。
與網格相比,3DGS 沒有明確的表面與拓樸,而是直接從多視角影像重建外觀,所以細碎的細節與隨視角變化的光澤容易保留;代價是場景裡的物件沒有被分開,無法像網格那樣逐件替換或編輯。與 NeRF 相比,NeRF 以神經網路隱式表示場景,渲染時要沿每條光線大量取樣查詢;3DGS 是顯式的資料,可以走接近光柵化的渲染路徑,這是 3DGS 有機會在瀏覽器裡執行的原因。
數位孿生裡的位置:有外觀,沒有語意
NIST IR 8356 把數位孿生定義為現實實體的電子化表示,讓使用者能檢視實體的狀態,以及狀態之間的轉換(Voas 等,2025)。ISO 23247 是製造業數位孿生框架的一組標準,依 NIST 的摘要,目的是提供製造業的術語與實作指引(ISO 23247 系列,經 NIST 摘要確認)。
在這個框架裡,3DGS 負責的是外觀:貼近真實物件的樣子。物件邊界、構件之間的關係、狀態與感測資料,不在掃描裡,必須由其餘資料層補上。3DGS 也不提供量測精度與語意,所以把掃描放上網頁,得到的是可以走進去看的場景,而不是可以查詢的模型。這個定位決定了後面所有取捨的方向。
網頁上的瓶頸:同一個像素疊了太多層
以一份約 800 MB 的 ply 掃描為例,內含約 1,500 萬個高斯,目標是在桌機與手機的瀏覽器上漫遊。直覺會把問題歸咎於數量太多,但量測的結果指向別處。
量測之前,先確認資料的編碼慣例。3DGS 的 ply 常以對數儲存尺寸、以 sigmoid 之前的值儲存不透明度;而部分統計指令(例如 splat-transform --stats)印出的是解碼後的值,若把這些值當成檔案內的原始數值,很容易誤判。所以這份資料先用原始位元組確認慣例,數字才有意義。
慣例確認後,再量填充率,也就是每個像素平均被多少個高斯覆蓋。結果是平均約 180 層重疊,中位數的高斯只有約 5 mm。畫面上每個像素都要混合這麼多層細小的高斯,成本主要花在這裡,高斯的總數反而不是主因。這種瓶頸稱為重複繪製(overdraw)。

這個差別決定後續的做法。減少高斯總數,不等於減少每個像素上的層數;只要高斯仍沿著視線方向層層堆疊,繪製時就仍要逐一排序並混合。反過來,總數不大但疊層很深的場景,成本一樣高。網頁 3D 效能的一般做法,可參考Web 3D 效能工程。
硬剪枝收不掉疊層,合併抽稀才收得掉
最直接的做法是依不透明度硬剪枝。這份資料的不透明度中位數約 0.24,門檻設在 0.10 時剩約 1,200 萬個高斯,設在 0.20 時剩約 840 萬個。數量確實下降,但這份資料的分析結論是:硬性的不透明度剪枝不會降低重疊層數。
原因在操作本身。硬剪枝只依單一屬性逐個丟棄高斯,不看這些高斯是否落在同一條視線上;留下來的高斯仍然彼此重疊。合併式抽稀則把相鄰的高斯合併,用較少的高斯表示同一塊區域,在這份資料上,是唯一能在離線階段收掉深度堆疊的操作。
實際流程是母檔先裁切,再合併抽稀到約 800 萬個高斯,然後才建立 LoD 樹並分塊串流。裁切與抽稀放在建樹之前,因為後面所有的分級與串流,都以這份母檔為基礎。
- 約 1,500 萬不處理基準否(平均約 180 層)
- 約 1,200 萬硬剪枝:不透明度門檻 0.10未降低疊層否
- 約 840 萬硬剪枝:不透明度門檻 0.20未降低疊層否
- 約 800 萬合併抽稀採用是
同一份掃描,高斯數為約略值。疊層是否收掉為這份資料的分析結論。
研究現況:修剪、壓縮、結構化三條路線
3DGS 的後續研究,有相當一部分圍繞著高斯數量、檔案大小與記憶體占用。以下依各篇論文的摘要整理三條路線,本文對這些論文的描述僅限於摘要。
修剪
第一條路線是修剪。LightGaussian 的摘要指出,方法會移除全域重要性較低的高斯,並做恢復處理(Fan 等,2024)。Papantonakis 等人的方法採用解析度感知的高斯修剪(Papantonakis 等,2024)。兩者都不是用單一的不透明度門檻切,而是以重要性或解析度為依據。兩篇摘要的重點是模型大小與記憶體占用,沒有談到像素上的疊層深度,是否有同樣的效果,要在實際資料上量測。
壓縮
第二條路線是壓縮屬性。LightGaussian 的摘要提到把球諧係數降階,並以高斯向量量化降低位元寬度;Papantonakis 等人的摘要提到依需要調整球諧階數,並使用碼本量化加半精度。球諧係數負責顏色隨視角的變化,降階等於用較少的參數描述這種變化。後者的摘要另外指出,磁碟大小與渲染速度都有改善。
結構化
第三條路線是改變資料的組織方式。Morgenstern 等人把 3DGS 的參數以平行排序放到二維網格上,使相鄰參數的數值相近,訓練時再加上局部平滑的約束,讓網格適合壓縮,同時保留 3DGS 的原始格式(Morgenstern 等,2024)。Scaffold-GS 則以錨點組織局部高斯,屬性依視角方向與距離即時預測,並依貢獻增刪錨點;摘要指出 3DGS 常產生大量冗餘的高斯,結構化的錨點用來減少這種冗餘(Lu 等,2024)。
這些論文自報的壓縮倍數與幀率,各自建立在特定的資料集與測試硬體上,而摘要多半沒有交代完整條件:Papantonakis 等人的摘要只寫標準資料集而未具名,Morgenstern 等人的摘要沒有列出資料集,LightGaussian 的摘要沒有寫測試硬體,Scaffold-GS 的摘要則不含任何數字。因此本文不引用這些倍數,也不把這些倍數換算成瀏覽器裡的結果。網頁部署還有傳輸量、手機的記憶體上限與依視角分塊載入等條件,這些不是上述摘要的主題。
分級與串流:檔位由使用者選
母檔處理完成後,建立 LoD 樹並切成分塊,瀏覽器依視角載入需要的部分。畫質分成三檔,三檔只調整高斯預算,渲染解析度固定在 1.0。預算的用法是以螢幕上的最小尺寸篩選高斯:小於一個像素的高斯被篩掉,畫面反而更少閃爍。
三檔的常駐高斯數約為 110 萬、220 萬與 375 萬,手機與桌機的預設預算也不同。檔位由使用者選,畫質與流暢度的取捨交給使用者。
分塊的磁碟量也調整過:LoD 樹的前後兩版,磁碟總量由約 280 MB 降到約 200 MB(約降 30%),分塊數由約 240 塊降到約 170 塊。200 MB 是磁碟總量,不是首次載入量;實際串流的量取決於視角與檔位。
離線建置的時間不是門檻。以約 1,100 萬個高斯的輸入測試,在 M1 Pro 上建置 LoD 樹,快速模式約 30 秒,品質模式約 4 分鐘。
- 掃描原始資料約 1,500 萬約 800 MB 的 ply 檔
- 裁切與合併抽稀合併為較少的高斯不是單純剪掉
- 裁切並合併抽稀後的母檔約 800 萬之後才建 LoD 樹並分塊
- 不常駐的部分留在磁碟,依視角載入LoD 樹磁碟總量約 200 MB,不是首載量
- 最高檔常駐約 375 萬依視角串流載入
- 中檔常駐約 220 萬預算低於最高檔
- 最低檔常駐約 110 萬預算最低
約略值,取自同一份掃描。三檔是不同使用者選擇下的常駐量,不是先後處理。
不報錯的地雷:入口要有預檢
新技術最危險的失敗,是沒有錯誤訊息的失敗。以 Spark 2.1.0 檢視器為例,常見三種畫面全黑、主控台乾淨或只有難懂訊息的情況,原因如下。
- 執行期 LoD 會空轉約 6 秒,回傳 0 個高斯,而且不丟錯。對同一份 .sog 資料,不啟用 LoD 時約 0.9 秒載入約 300 萬個高斯,啟用後卻得到 0 個。解法是改用預先建好的分塊檔。
- 渲染器的 LoD 開關預設為開,會靜默忽略未建 LoD 的資料,已繪高斯數停在 0,畫面全黑。資料端與渲染端的設定必須一致。
- 資產路徑錯誤時,靜態主機回應 200 並附上首頁 HTML,檢視器把回傳的 HTML 開頭當成資料解析,只在主控台留下難懂的 magic number 錯誤。解法是入口用 4 byte 的 Range 請求先預檢,把「資產沒載到」轉成看得懂的提示。
另一個小坑是格式。新版 SPZ 的預設格式在這版檢視器讀不了;而且在這份資料上,SPZ 約 46 MB,比 SOG 的約 36 MB 還大,因此沒有採用。格式的選擇以實際資料的大小為準。.sog 與 .spz 是實務上常見的壓縮封裝格式,與前述論文方法的對應關係,本文不做推論。

這三個情況的共同點,是失敗時沒有任何明確的訊息。預檢把失敗提前到載入入口,讓排查的人看到一句可讀的原因,而不是一張黑畫面。
理論上有效、實際行不通的做法也要記錄
深度預通過(depth pre-pass)的想法,是先用一份遮擋用的 mesh 寫入深度,剔除被遮住的高斯。理論上,這是改善中距離視角的槓桿中最大的一個,所以常被優先考慮。
實作上有幾個陷阱。用約 4 萬面的 mesh 加 polygonOffset,全畫面會出現破洞:polygonOffset 的單位是深度緩衝單位,在透視投影下,近處幾乎無效,遠處則偏移過量。改用約 50 萬面的 mesh 與世界單位的偏移,俯視角度下畫面乾淨;但沿用同一組設定,換到人眼高度的漫遊視角,仍然大面積破洞,偏移加到 2.5 m 也沒有改善。
真因不是面數,也不是偏移量。遮擋模型與掃描資料在大面積的結構面上對得上,但場景內物件的位置對不上;眼高視角下近物占畫面的比例大,位置誤差被放大成大片破洞。
結論是這類資產上,深度預通過行不通。要補救,得從高斯本身生成遮擋幾何、逐物件對位,或只用大面積結構面當遮擋體,這些都是另外的專案。預設不下載遮擋模型,成本為零。對評估的人來說,理論上最大的優化槓桿不一定做得出來,效能目標要和可行性一併評估。
不適合的情況
以下三種情況,建議先評估其餘路線,而不是直接採用 3DGS。
- 需要量測精度或 BIM 這類帶語意的模型資料。3DGS 不提供,這類需求要走網格或原始設計資料。
- 內容需要頻繁改動。掃描是某個時間點的外觀,內容一變就過時,而且 3DGS 無法像網格那樣逐件替換。
- 主要讀者使用低階手機,又不能接受分級。分級是用畫質換流暢,不接受分級的話,影片或預錄導覽比較穩。
- 確認用途行銷展示,或需要量測與語意
- 確認內容變動頻率掃描一次後能否長期不變
- 確認目標裝置主要讀者的手機等級,以及能否接受分級
- 需要量測精度或 BIM 這類語意資料網格與模型資料3DGS 不提供量測精度與語意
- 內容頻繁改動網格掃描一次就過時,3DGS 也無法逐件替換
- 重點是真實外觀,內容固定,可接受分級3DGS 分級串流母檔先合併抽稀,再建 LoD 樹分塊
- 主要讀者用低階手機,且不接受分級影片或預錄導覽不依賴使用者裝置的即時渲染
工業設備這類以結構與零組件為展示重點的內容,通常先評估網格路線;磨人另有工業 3D 展示案例,可看工業題材在網頁上的呈現。3DGS 較適合重點在真實外觀、內容相對固定的場景。模型端的優化前後對照,可參考3D 模型優化前後對照。
評估掃描資料前,要準備什麼
要判斷一份掃描資料能不能放上網頁、放到什麼程度,需要先備齊三項資訊。磨人的網頁 3D 開發服務會從這三項開始評估。
- 資料的規模與取得方式:檔案大小、高斯或點的數量、格式,以及是自行拍攝重建還是外部提供。
- 用途:行銷展示,或需要量測。這決定 3DGS 是否適用。
- 目標裝置:桌機與手機的比例,以及最低要支援到哪一級的手機。
資料備齊後,歡迎聯絡磨人開發團隊,先確認這份掃描適合哪一條路線。




