賈浩楠 發自 凹非寺量子位 報道 | 公衆号 QbitAI
2D變3D,還不用建模,今年谷歌用NeRF做到了以假亂真的程度:
感覺就像是視頻裡截出來的是不是?神經網絡隻需要幾張靜态照片就能生成這樣的結果。
但,總感覺離真實的場景還差點什麼?
沒錯,缺的就是光影變換效果,NeRF隻高度還原了空間,沒有給人時間上的直觀感受:
上面的結果,同樣是用幾張2D照片作為輸入,但有實時光影效果的生成結果,更加逼真生動,讓人有些“鬥轉星移”的錯覺。
這項讓2D照片變“4D”的研究,是谷歌團隊聯合MIT、UC伯克利對之前的NeRF做出的重要改進,稱為NeRV,即用于照明渲染和視圖合成的神經反射場和可見光場。
下面我們嘗試用最簡潔易懂的方式介紹NeRV,除了最關鍵重要的推導,盡量少做數學推理,讓你一文看懂。
谷歌“升維”打擊光影變幻給了我們對于場景直觀的時間感受,而研究團隊實現這個效果的方法,就是在原先的NeRF上,添加了光模拟過程。
在NeRF中,沒有将場景建模為吸收和發射光的連續的3D粒子場,而是将場景表示為吸收和反射外部光源定向粒子3D場。
這樣的模型模拟光傳輸是低效的,并且無法擴展到全局照明的場景。
研究人員引入神經能見度場參數來彌補這一點,它允許有效查詢模拟光傳輸所需的光線和像素點之間的能見度。
具體來說,NeRV網絡還原4D效果有3步,分别對應着3D場景生成、光影效果模拟、渲染。
神經反射場NeRF并沒有将入射光線的效果與表面的材料屬性分開。
這意味着NeRF隻能在輸入圖像中呈現的固定光照條件下呈現場景的視圖。
修改NeRF以實現動态光照是很直接的:将場景表示為反射入射光的粒子場。
給定一個任意的光照條件,就可以用一個标準的體積渲染積分來模拟光在粒子反射時在場景中的傳輸:
其中,方程(1)中的視圖相關發射項Le(x, ωo)被替換為物體表面S上,光射入方向的積分,即來自任何方向的進光輻射度Li和反射函數 R的乘積,它描述了從某一個方向ωi入射的光有多少被反射到方向ωo。
神經可視場的光傳輸雖然修改NeRF實現一定程度的光照效果是很直接的,但對于像NeRF這樣的連續體積表示法,一般照明場景的體積渲染積分,在計算上是有難度的。
上圖直觀地展示了模拟光照場景的縮放特性,這使得模拟體積光傳輸特别困難。
即使隻考慮從光源到場景點的直接照明,對于超過單點光源的情況下,暴力計算的方案也很吃力,因為它需要沿着從每個場景點到每個光源的路徑,反複查詢形狀MLP的體積密度。
暴力采樣渲染一束間接照明下的單條光線将需要一個petaflop的計算量,而訓練過程中渲染大約十億條光線。
所以團隊通過用學習的近似值替換幾個體積密度積分來改善這個問題:引入一個 “能見度 “多層神經網絡,它可以對任意輸入方向的照明能見度給出近似值,以及相應光線的預期終止深度的近似值。
這種方法,大大降低将直接照明和間接照明的計算複雜度,使得在優化連續照明場景表示的訓練循環中,可以同時模拟直接照明和其反彈的間接照明。
渲染假設現在有一條通過NeRV的相機射線x(t)=c tωo,使用以下過程來渲染:
1) 沿射線繪制256個分層樣本,并查詢每個點的體積密度、表面法線和BRDF(雙向反射分布函數)參數的形狀和反射神經網絡。
2)沿射線對每個點進行直接照明的遮擋。
3) 用間接照明對射線沿線的每個點進行遮擋。
4) 沿着攝影機光線的每個點的總反射輻射度 Lr(x(t), ωo)是步驟 2 和步驟 3 的數量之和。将這些沿射線複合起來,用同樣的正交規則計算像素顔色。
通俗的說,就是對一條入射光線在整個場景所有像素點上的反射情況分别計算,然後整合起來。
測試結果在最後的測試結果上,NeRV的表現遠遠超過了NeRF和NLT:
團隊分别在不同的數據集上訓練模型,然後對雕像、推土機、熱狗三個圖像進行還原。
從結果中可以看出,峰值信噪比(PSNR)、MS-SSIM(多尺度結構比)損失函數這兩個指标,普遍優于之前的方法。
對于個人視頻制作者、遊戲開發人員,以及缺乏3D建模經驗的動畫公司來說,這類技術的成熟,可謂“福音”。
通過AI技術,讓3D效果的實現進一步簡化,這也是Facebook、Adobe及微軟等公司紛紛投入這方面研究的原因所在。
最後,研究人員透露,這個算法即将開源,直接把項目主頁給你,先馬後看:
https://people.eecs.berkeley.edu/~pratul/nerv/
這是最近最酷的3D圖片方面的突破了。
如果你有更酷的,也歡迎留言分享~~
— 完 —
量子位 QbitAI · 頭條号簽約
關注我們,第一時間獲知前沿科技動态
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!