3D 高斯潑濺技術簡介
3D 高斯潑濺是一種在《用於即時輻射場渲染的 3D 高斯潑濺》一文中所描述的光柵化技術,它允許從少量影像樣本中學習並即時渲染逼真的場景。本文將解析其工作原理以及它對圖形學未來的意義。
什麼是 3D 高斯潑濺?
3D 高斯潑濺的核心是一種光柵化技術。這意味著:
- 擁有描述場景的資料。
- 將資料繪製在螢幕上。
這類似於計算機圖形學中的三角形光柵化,後者用於在螢幕上繪製許多三角形。
然而,這裡繪製的不是三角形,而是高斯函式。這是一個經過光柵化的單一高斯函式,為了清晰起見,繪製了邊框。
它由以下引數描述:
- 位置:它所在的位置 (XYZ)
- 協方差:它如何被拉伸/縮放 (3x3 矩陣)
- 顏色:它的顏色 (RGB)
- Alpha:它的透明度 (α)
在實踐中,會同時繪製多個高斯函式。
這是三個高斯函式。那麼七百萬個高斯函式呢?
這是每個高斯函式以完全不透明的方式進行光柵化後的樣子。
以上是關於 3D 高斯潑濺的簡要概述。接下來,讓我們詳細瞭解論文中描述的完整流程。
工作原理
1. 從運動中恢復結構 (Structure from Motion)
第一步是使用“從運動中恢復結構”(SfM) 方法,從一組影像中估算出一個點雲。這是一種從一組 2D 影像估算 3D 點雲的方法。這可以透過 COLMAP 庫來完成。
2. 轉換為高斯函式
接下來,每個點都被轉換為一個高斯函式。這已經足以進行光柵化了。然而,只能從 SfM 資料中推斷出位置和顏色。為了學習一個能產生高質量結果的表示,我們需要對其進行訓練。
3. 訓練
訓練過程使用隨機梯度下降 (Stochastic Gradient Descent),類似於神經網路,但沒有層。訓練步驟如下:
- 使用可微分高斯光柵化將高斯函式光柵化為影像(稍後會詳細介紹)
- 根據光柵化影像與真實影像之間的差異計算損失
- 根據損失調整高斯引數
- 應用自動化的緻密化和修剪
步驟 1-3 在概念上非常直接。步驟 4 涉及以下內容:
- 如果某個高斯函式的梯度很大(即它錯得太離譜),則分裂/克隆它
- 如果高斯函式很小,則克隆它
- 如果高斯函式很大,則分裂它
- 如果一個高斯函式的 alpha 值變得太低,則移除它
這個過程幫助高斯函式更好地擬合精細的細節,同時修剪掉不必要的高斯函式。
4. 可微分高斯光柵化
如前所述,3D 高斯潑濺是一種光柵化方法,它將資料繪製到螢幕上。然而,一些重要的元素還包括:
- 快
- 可微分
光柵化器的原始實現可以在這裡找到。光柵化過程包括:
- 從相機視角將每個高斯函式投影到 2D。
- 按深度對高斯函式進行排序。
- 對於每個畫素,從前到後迭代每個高斯函式,將它們混合在一起。
論文中描述了其他最佳化措施。
光柵化器必須是可微分的,這一點也至關重要,這樣才能用隨機梯度下降進行訓練。然而,這隻與訓練相關——訓練好的高斯函式也可以用非可微分的方法進行渲染。
誰會關心這個?
為什麼 3D 高斯潑濺技術會受到如此多的關注?顯而易見的答案是,結果本身就說明了一切——它能即時呈現高質量的場景。然而,故事可能不止於此。
關於高斯潑濺還能做些什麼,還有許多未知數。它們可以被動畫化嗎?即將發表的論文《動態 3D 高斯:透過持續動態檢視合成進行跟蹤》表明它們可以。還有許多其他未知數。它們能處理反射嗎?它們可以在沒有參考影像訓練的情況下進行建模嗎?
最後,對具身人工智慧 (Embodied AI) 的研究興趣日益增長。在這個人工智慧研究領域,最先進的效能仍然比人類效能低幾個數量級,其中大部分挑戰在於表示 3D 空間。鑑於 3D 高斯潑濺能產生非常密集的 3D 空間表示,這對具身人工智慧研究可能有什麼影響?
這些問題引起了人們對該方法的關注。其實際影響尚待觀察。
圖形學的未來
那麼,這對圖形學的未來意味著什麼?讓我們將其分為優點和缺點:
優點
- 高質量、逼真的場景
- 快速、即時的光柵化
- 訓練相對較快
缺點
- 高視訊記憶體使用率(檢視需 4GB,訓練需 12GB)
- 磁碟佔用大(一個場景 1GB+)
- 與現有的渲染管線不相容
- 靜態(目前如此)
到目前為止,原始的 CUDA 實現尚未被適配到生產渲染管線中,如 Vulkan、DirectX、WebGPU 等,因此其影響尚待觀察。
目前已經有了以下適配:
這些要麼依賴於遠端流式傳輸 (1),要麼依賴於傳統的基於四邊形 (quad-based) 的光柵化方法 (2-5)。雖然基於四邊形的方法與數十年的圖形技術相容,但可能會導致較低的質量/效能。然而,檢視器 #5 表明,儘管採用基於四邊形的方法,最佳化技巧仍可帶來高質量/效能。
那麼,我們會在生產環境中看到 3D 高斯潑濺被完全重新實現嗎?答案是很可能。主要瓶頸是對數百萬個高斯函式進行排序,這在原始實現中使用 CUB 裝置基數排序 來高效完成,這是一種僅在 CUDA 中可用的高度最佳化的排序方法。然而,只要投入足夠多的努力,在其他渲染管線中實現這種效能水平是完全可能的。
如果您有任何問題或想參與其中,請加入 Hugging Face Discord!