實時高保真渲染,基于PlenOctrees的NeRF渲染速度提升3000倍
NeRF 方法擁有較好的渲染效果,但渲染速度極為緩慢,難以進行實時渲染。來自 UC 伯克利等機構的研究者使用一種名為 PlenOctrees 的數據結構為 NeRF 引入了一種新的數據表示,將渲染速度提升了 3000 多倍。
從稀疏的靜態(tài)圖像合成任意 3D 視角物體和場景新視圖是很多 VR 和 AR 應用的基礎。近年來神經輻射場(Neural Radiance Fields, NeRF)的神經網絡渲染研究通過神經網絡編碼實現(xiàn)了真實的 3D 視角場景渲染。但是 NeRF 需要極端的采樣要求和大量的神經網絡運算,導致其渲染速度十分緩慢,嚴重制約了其在實際場景,尤其是實時交互場景中的應用。例如,使用 NeRF 在高端 GPU 上渲染一張 800X800 像素的圖片大概需要 30 秒。近日,來自 UC 伯克利等機構的研究者使用一種名為 PlenOctrees 的數據結構為 NeRF 引入了一種新的數據表示,實現(xiàn)了實時的 NeRF 渲染。其渲染速度比原始的 NeRF 提高了 3000 多倍,并且圖像質量可以與 NeRF 媲美。此外,采用 PlenOctrees 結構還能有效減少 NeRF 的訓練時間。
論文地址:https://arxiv.org/pdf/2103.14024.pdf
項目地址:https://alexyu.net/plenoctrees/
方法
在 NeRF 方法中,攝像機光線從特定角度穿過場景,生成一組采樣的三維點,通過神經網絡把這些點的空間位置和視角映射成對應的密度和顏色。然后使用經典的體繪制技術將這些顏色和密度累積到二維圖像中。這要求沿射線方向的每個樣本都需輸入神經網絡來獲取密度和顏色。這種方式是很低效的,因為大部分樣本都是在自由空間中采樣的,對整體的顏色并沒有貢獻。因此本篇論文提出使用稀疏的八叉樹(Octree)結構來避免過度采樣。另外該方法還預計算了每個體素的值,避免重復輸入網絡。
圖 1 算法框架圖
該算法的框架如圖 1 所示。該研究提出了名為 PlenOctree 的數據結構,將訓練好的 NeRF 預采樣轉換成 PlenOctree 的數據結構,具體地講,該方法使用 Octree 結構,把建模所需的密度值和球諧函數(SH)存儲到樹的葉子節(jié)點上。球面諧波代替了某一角度的 RGB 值,可以從任意角度恢復獨立的顏色信息。此外,為了更直接地實現(xiàn) PlenOctree 轉換,該研究提出了一種改進的 NeRF 模型(NeRF-SH),產生球面諧波表示,以此避免對網絡輸入不同視角數據。這些信息可以直接存儲在 PlenOctree 的葉子節(jié)點上。同時通過微調 Octree 結構就可以進一步提升圖像質量。
NeRF-SH 模型
NeRF-SH 模型如圖 1(a)所示,其基本的優(yōu)化過程和渲染過程與 NeRF 相同,但 NeRF-SH 模型不直接輸出 RGB 顏色,而是輸出球諧函數 k。顏色 c 由在相應的射線方向 (θ, φ) 上的球諧函數 k 基上加權求和計算得出。轉換公式如下:
其中 d 為視角角度,k 是網絡輸出的球諧函數 SH。使用 SH 基無需對視圖方向進行采樣,從而減少了訓練時間。在 NeRF-SH 的訓練過程中,該研究還引入了稀疏先驗約束,以提升 Octree 結構的存儲效率。整個提取過程大約需要 15 分鐘。
PlenOctree 結構
PlenOctree 結構如圖 1(b)所示,在 NeRF-SH 模型訓練完成后,將其轉換成稀疏的 Octree 結構以實現(xiàn)實時渲染。轉換的過程分為以下三個步驟:1)在較高的層次上,在網格上評估網絡,只保留密度值,2)通過閾值過濾體素。3)對每個剩余體素內的隨機點進行采樣,并對它們進行平均,以獲得 SH 函數,并存儲在 Octree 葉子中。在渲染的過程中樹的值是完全可微的,直接在原始訓練圖像上微調就可以進一步提升圖像質量。PlenOctree 結構的優(yōu)化速度約為每秒 300 萬射線,相比之下,NeRF 優(yōu)化速度約為每秒 9000 射線。該方法的優(yōu)化速度相比 NeRF 具有明顯的提升,因此可以提前結束 NeRF-SH 的訓練來構建 PlenOctree 結構,而幾乎不會降低模型性能。
實驗結果
渲染效果如圖 2 所示,相比于 NeRF,該方法渲染的圖像在細節(jié)上更優(yōu),更接近于真實圖像,并且渲染速度快了 3000 多倍。
圖 2 渲染效果
圖 3 是幾種方法訓練時間的對比結果,可以看出 NeRF 模型和 NeRF-SH 模型所需的訓練時間接近。而 PlenOctree 結構轉換和微調需要大約 1 小時的訓練時間。但是將 NeRF-SH 和 PlenOctree 結合可以讓模型只需 4.5 小時,就能達到 NeRF 大約 16 小時的訓練質量。
圖 3 算法收斂時間
雖然渲染速度和性能都有所提升,但使用 Octree 結構也會占用更多內存資源。感興趣的讀者可以閱讀原文了解更多詳細內容。
*博客內容為網友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯(lián)系工作人員刪除。