當前位置:
首頁 > 知識 > 實時地播放動畫的五維光場

實時地播放動畫的五維光場

實時地播放動畫的五維光場

本來這也是筆者最想做的項目之一, 卻被迪士尼的人搶先做了第一步, 那筆者就來介紹一下這一個工作, 具體介紹以前, 我先說一個結論: 人類離自由觀察電影級畫質的3D渲染又近了一步。

以前,當我們說到自由視角的3D漫遊時, 我們首先想到的是近基於物理的渲染演算法, 人們從三角mesh開始,經過頂點變換,透視變換,一層又一層的shader,最後得到三維畫面,這一個過程, 我稱之為基於三維數據和光照模型的渲染。

實時地播放動畫的五維光場

圖1. 基於三維數據的渲染。

這一類的渲染演算法解決了大部分人們觀察虛擬的3D世界的需求,也廣泛地應用在各種遊戲和虛擬現實設備中, 但是這種渲染始終有一個瓶頸:基於數據量和計算時間的限制,它們始終不可能在一個家用機上達到無瑕疵的「電影級別畫質」。當說到影視級別畫質的時候,我說的是以下這種水準的:

實時地播放動畫的五維光場

複雜的全局光照, 軟陰影, 比像素還小的三角面片, brdf的反射, 材質.....想要利用現有的計算機計算能力實時渲染這樣的畫面, 就是痴人說夢.

然而如果目的僅僅是自由地觀察影視級畫質的3D動畫的話, 並不是沒可能, 這就要藉助於 光場渲染 .

何為光場渲染? 光場渲染是一種基於圖像的渲染技術, 簡單地說, 對於一個三維場景, 如果我們用一個影視級別的離線渲染演算法在一個view volume(觀察範圍)內, 把所有可能的相機角度, 相機位置的圖都預先渲染好存儲下來, 再接下來的實時繪製里, 對於來自於任意機位的請求, 只需要去想辦法插值已經存下來的"照片"即可. 相機可能的變數包括了xyz坐標以及theta, phi 觀察角度, 所以這就是一個在限定範圍內的 五維光場

所以一個準確的光場渲染包括了兩個階段: 階段一 光場信息的準備與壓縮, 階段二 實時的view synthesis。

其中階段一可以十分耗時, 並且可以為動態的動畫場景來準備光場(逐幀光場), 除此以外, 我們希望光場數據的採集是儘可能少冗餘的(優化採樣相機的位置), 以及壓縮的演算法是可以支持解壓時隨機訪問的(比如哈夫曼編碼或者jpeg壓縮之類的就絕對不可行,在整個數據被解壓前,不能對任意訪問位置隨機讀取)

階段二則有以下這個基本要求: 實時地重建所訪問的觀察角度和觀察點的圖像數據, 要求清新, 準確, 特別是邊界處不能模糊。(對於來自於CG渲染地數據, 是有一部分天然優勢的)。

為了更好的展開理解為何在CG數據上做光場渲染更有優勢這個話題, 我先讓大家見識一下在真實採集的照片上做光場渲染的劣勢:

實時地播放動畫的五維光場

動圖1: 來自於論文 Correspondence and Depth-Image Based Rendering, 作者是C Lipski 等。 在這個論文中, 作者指出如果你有某個場景的一系列照片, 你可以從中恢復出這個場景的3Dview, 而當你能夠足夠精確的分析出場景的深度信息時, 最終3D free view的重建就能更加的平滑和自然。 注意看, 此處左邊演算法恢復出的3D view是跳變的, 而右邊應用深度信息的演算法恢復出的3D view是自然平滑變化的。

所以這裡就提到了一個重要的信息--深度!!什麼? 準確的深度? 這不就是我大CG渲染的強項么, 逐像素準確的深度值, 要多少有多少。

所以此時,我們就有了一個光場渲染的集大成流水線:

實時地播放動畫的五維光場

第一步: 準備CG場景, 一個動畫的場景。

第二步: 在一個規定的視體範圍內, 合理優化地預測能夠cover整個場景的相機機位們, 並從所有機位,用電影級真實的渲染演算法渲染這個動畫的場景, 保存下逐相機的, 高清的cubmap,以及depth-cubmap

第三步:根據時序連續這個原則, 來壓縮存儲下來的動態光場數據, 該論文中, 數據的壓縮比達到了150:1.

第四步:一個實時的, 基於ray marching的演算法, 來重建任意角度的相片數據, 基於存儲下來的光場, 該論文中的gpu演算法達到了90fps。

第一第二步是標準的影視級真實的圖形渲染演算法, 我將假設讀者已知並跳過。

其中第三步是這個論文的重點, 也是最有意義卻枯燥的地方, 我將跳過這一部分的內容。

我就來講一下如果大家已經有了逐幀的光場數據, 該如何來進行實時渲染, 也就是論文中的第四步。在我講之前, 先給大家看一下論文中的一些結果:

實時地播放動畫的五維光場

動圖2:一個短小的機器人動畫, 旋轉的鏡頭由用戶實時調整觀察點得到,演算法實時地渲染了這個場景的光場數據。

實時地播放動畫的五維光場

動圖2:一個複雜的動態光場, 包括了重現複雜的全局光照以及反射高光等。

看完了效果, 我來簡介一下他們所使用的實時光場渲染演算法, 首先這個演算法假設用戶已經有了第i幀的光場數據, 光場數據由N個cubmap來表示, 其中第j個cubemap保存了第j個相機預渲染下來的數據, 包括了高清的24bit RGB 以及32bit depth(注意是32bit的深度, 不是遊戲引擎常用的8half精度的深度)

演算法第一步, 渲染一個等屏幕大小的quad, 並由此進入pixel shader。

pixel shader中, 進行逐像素 ray marching。marching的步長由論文里的一個非線性函數給出。

對每一次marching到的待測點x,遍歷所有的cubemap, 計算dir = x - c_j, texture lookup cubemap, 求預渲染視圖中的深度值z2, 如果:x.z>z2, 說明存在光線物體相交, 則插值顏色信息, 權重函數通過深度值的差別, 和不同的cubemap的距離的差別等求出, 最後的顏色是來自於光場的不同cubemap中插值到的顏色的加權和.

對, 就是這麼簡單, 一個pixel shader就能夠渲染影片級別真實的動畫了, 當然前提是你得有光場數據.....這個數據有多大呢? 對於一個30秒的動畫, 光場的大小大概是40G....還是壓縮之後. 逐幀光場的大小怎麼也得有個幾G.

所以未來想看光場動畫/電影, 我們對於GPU的顯存和帶寬的要求是極高的!!!!! NVIDIA又有事可做了!!! 怎麼的也得64G顯存, 10G/sec的帶寬吧!!

最後, 我來說一說這篇開山論文還無法做到的以及迫切需要解決的很多事:

1. 反射的平滑渲染,

實時地播放動畫的五維光場

https://www.zhihu.com/video/871971991173869568

disney的這篇論文中並沒有對反射進行任何特殊的處理, 所以他們的反射是有ghost motion的, 還需要提高姿勢水平.

2. 複雜的特效以及半透明物體, 利用深度來重建光場, 其邏輯假設是一個world space坐標和一個view direction對應一個顏色, 這一點在有複雜的場景特效比如運動煙霧, 爆炸燃燒煙霧造成的半透明遮擋, 透鏡 等存在的時候就站不住腳了, 對於這些場景特效的光場表達以及渲染, 顯然還有很多研究應該被完成.


轉載自知乎用戶張心欣的專欄


500萬就業基金助力,2017大學生就業扶助計劃:http://www.ujiuye.com/zt/jyfc/?wt.bd=zt36716tt

更多精彩內容,訪問中公優就業官網:http://xue.ujiuye.com/?wt.bd=zt36716tt

IT學習、就業交流互動群:http://www.ujiuye.com/zt/qqhdjlpt/?wt.bd=zt36716tt

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT優就業 的精彩文章:

es6的一些基本語法
SpringMVC項目國際化(i18n)實現方法
他隱瞞父母,背井離鄉三年,原來竟是為了……

TAG:IT優就業 |

您可能感興趣

新番動畫播放時間列表
飛傲推出七款音頻新品,音樂播放器開始全面屏時代?
電視播放奇怪的畫面,看後大病一場
楊冪出席活動,大屏幕上播放劉愷威視頻,導播切換鏡頭真調皮!
單集上億播放,一集干你一季!盤點b站動漫播放排名前十的動漫!
《進擊的巨人》第三季播放倒計時,動作場面驚艷,萬眾期待!
品牌 全屏 播放
國產播放器之光,山靈為何能拿下四項第一
品牌|全屏 播放
讓阿塔的寶具動畫成為你的手機鎖屏動態壁紙~一按就播放 永不下班
值得推薦的經典動畫,播放的時候你還沒有出生
去機場也能遇到歐巴 仁川機場宣傳視頻在循環播放
日本電台播放CG動畫重現真實歷史!網友:和宮崎駿一樣,值得大讚
品牌 紅色 播放鍵
種子磁力雲播播放器,看任何視頻一個鏈接搞定
這部動漫居然最後能夠播放,畫面也太細節了吧!
關於UI動效大爆炸的視頻播放問題
品牌|紅色 播放鍵
雪花牌電視正在播放……
B站中僅支持台灣地區播放的動漫,尺度太大遭網友抗議