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