3D 高斯点染简介
3D 高斯點染技術由 3D Gaussian Splatting for Real-Time Radiance Field Rendering 一文首次提出。作為一種柵格化技術,3D 高斯點染可用于實時且逼真地渲染從一小組圖像中學到的場景。本文將詳細介紹其工作原理并討論其對圖形學的未來會帶來什么影響。
什么是 3D 高斯點染?
3D 高斯點染本質上是一種柵格化技術。也就是說:
- 我們有場景描述數據;
- 我們會把這些數據在屏幕上渲染出來。
大家可能對計算機圖形學中的三角形柵格化比較熟悉,其通過在屏幕上渲染許多三角形的方式來繪制圖形。
其實 3D 高斯點染與三角形柵格化是一樣的,只不過把基本繪圖元素從三角形換成了高斯圖像。下圖給出了高斯圖像的一個例子,為清晰起見,我們標出了它的邊框。
每個高斯圖像可由以下參數來描述:
- 位置: 所在位置 (XYZ)
- 協方差: 縮放程度 (3x3 矩陣)
- 顏色: 顏色 (RGB)
- Alpha: 透明度 (α)
在實踐中,我們通過在屏幕上繪制多個高斯圖像,從而畫出想要的圖像。
上圖是由 3 個高斯圖像渲染出的圖像。那么用 700 萬個高斯圖像可能會渲染出怎樣的圖像呢?看看下圖:
如果這 700 萬個高斯圖像每個都完全不透明的話,渲染出的圖像又會怎么樣呢?如下:
以上,我們對 3D 高斯點染有了一個初步的認識。接下來,我們了解一下點染的具體過程。
點染過程
1. 從運動中恢復出結構
第一步是使用運動恢復結構 (Structure from Motion,SfM) 方法從一組圖像中估計出點云。SfM 方法可以讓我們從一組 2D 圖像中估計出 3D 點云。我們可以直接調用 COLMAP 庫來完成這一步。
2. 用高斯圖像對云中的每個點進行建模
接下來,把每個點建模成一個 3D 高斯圖像。從 SfM 數據中,我們能推斷出每個高斯圖像的位置和顏色。這對于一般的柵格化已經夠用了,但如果要產生更高質量的表征的話,我們還需要對每個高斯圖像進行訓練,以推斷出更精細的位置和顏色,并推斷出協方差和透明度。
3. 訓練
與神經網絡類似,我們使用隨機梯度下降法進行訓練,但這里沒有神經網絡的層的概念 (都是 3D 高斯函數)。訓練步驟如下:
- 用當前所有可微高斯圖像渲染出圖像 (稍后詳細介紹)
- 根據渲染圖像和真實圖像之間的差異計算損失
- 根據損失調整每個高斯圖像的參數
- 根據情況對當前相關高斯圖像進行自動致密化及修剪
步驟 1-3 比較簡單,下面我們稍微解釋一下第 4 步的工作:
-
如果某高斯圖像的梯度很大 (即它錯得比較離譜),則對其進行分割或克隆
- 如果該高斯圖像很小,則克隆它
- 如果該高斯圖像很大,則將其分割
-
如果該高斯圖像的 alpha 太低,則將其刪除
這么做能幫助高斯圖像更好地擬合精細的細節,同時修剪掉不必要的高斯圖像。
4. 可微高斯柵格化
如前所述,3D 高斯點染是一種 柵格化 方法,即我們可以用其將數據渲染到屏幕上。作為眾多柵格化方法的 其中之一 ,它有兩個特點:
- 快
- 可微
你可在 此處 找到可微高斯渲染器的原始實現。其主要步驟為:
- 針對給定相機視角,把每個 3D 高斯圖像投影到 2D。
- 按深度對高斯圖像進行排序。
- 對每個像素,從前到后計算每個高斯函數在該像素點的值,并將所有值混合以得到最終像素值。
更多細節及優化可參閱 論文。
渲染器可微這一點很重要,因為這樣我們就可以用隨機梯度下降法來訓練它。但這一點僅對訓練階段很重要,訓后的高斯函數是可以用不可微的方式來表示的。
有啥用?
為什么 3D 高斯點染受到如此多的關注?最直接的原因是其非凡的實力。有了它,對高畫質場景的實時渲染成為了可能。有了這個能力,我們可以解鎖更多可能的應用。
比如說,可以用它來渲染動畫嗎?即將發表的論文 Dynamic 3D Gaussians: tracking by Persistent Dynamic View Synthesis 似乎表明這有戲。還有更多其他問題有待研究。它能對反射進行建模嗎?可以不經參考圖像的訓練就直接建模嗎……
最后,當前人們對 具身智能 (Embodied AI) 興趣日隆。但作為人工智能的一個研究領域,當前最先進的具身智能的性能仍然比人類低好幾個數量級,其中大部分的挑戰在 3D 空間的表示上。鑒于 3D 高斯分布可以產生致密的 3D 空間表示,這對具身智能研究有何影響?
所有這些問題都引發了人們對 3D 高斯點染的廣泛關注。時間會告訴我們答案!
圖形學的未來
3D 高斯點染會左右圖形學的未來嗎?我們先來看下該方法的優缺點:
優點
- 高品質、逼真的場景
- 快速、實時的渲染
- 更快的訓練速度
缺點
- 更高的顯存使用率 (4GB 用于顯示,12GB 用于訓練)
- 更大的磁盤占用 (每場景 1GB+)
- 與現有渲染管線不兼容
- 僅能繪制靜態圖像 (當前)
到目前為止,3D 高斯點染的 CUDA 原始實現尚未與 Vulkan、DirectX、WebGPU 等產品級渲染管道進行適配,因此尚不清楚其會對現有渲染管線帶來什么影響。
已有的適配如下:
- 遠程顯示器
- WebGPU 顯示器
- WebGL 顯示器
- Unity 顯示器
- 優化過的 WebGL 顯示器
這些顯示器要么依賴于遠程流式傳輸 (1),要么依賴于傳統的基于 2x2 像素塊的柵格化方法 (2-5)。雖然基于 2x2 像素塊的方法與數十年來的圖形技術兼容,但它可能會導致質量/性能的降低。然而,第 5 個顯示器 的工作又表明,盡管采用基于 2x2 像素塊的方法,通過巧妙的優化我們仍可以達到高的質量及性能。
那么有沒有可能需要針對生產環境重實現 3D 高斯點染代碼呢?答案是 有可能 。當前主要的性能瓶頸在對數百萬個高斯圖像進行排序上,在論文的原始實現中,這一過程是通過 CUB 庫的基數排序 原語來高效實現的,但該高性能原語僅在 CUDA 中可用。我們相信,經過努力,其他渲染管線也可以達到相仿的性能水平。
如果你有任何問題或有興趣加入我們的工作,請加入 Hugging Face Discord!
英文原文: https://hf.co/blog/gaussian-splatting
原文作者: Dylan Ebert
譯者: Matrix Yao (姚偉峰),英特爾深度學習工程師,工作方向為 transformer-family 模型在各模態數據上的應用及大規模模型的訓練推理。
總結
以上是生活随笔為你收集整理的3D 高斯点染简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二叉树路径总和系列问题
- 下一篇: 放置江湖花灯奖励是什么(放置play是什