天天看點

為什麼Unreal 4引擎能輕易實時渲染出vray要花半天才能渲染出的場景

為什麼Unreal 4引擎能輕易實時渲染出vray要花半天才能渲染出的場景?

這不是真的!This is Unreal!

看了這個文章,大為感慨。如果有人以unreal 4為基礎開發渲染軟體,和rhino、su、revit等常用建築軟體對接,畫面太美不敢想。 添加評論  分享

檢視全部 11 個回答

贊同368 反對,不會顯示你的姓名

為什麼Unreal 4引擎能輕易實時渲染出vray要花半天才能渲染出的場景
文刀秋二,NVIDIA圖形工程師

知乎使用者、李中元、peng lu  等人贊同 我來通過對比兩張圖檔來答一下。下面兩幅圖,同樣的場景素材,同樣的光源,非常接近的材質模型,但用的是完全不同的渲染方法。

為什麼Unreal 4引擎能輕易實時渲染出vray要花半天才能渲染出的場景
為什麼Unreal 4引擎能輕易實時渲染出vray要花半天才能渲染出的場景

第一幅是我自己的渲染器用基于光線追蹤的無偏全局光照算法渲染,第二幅是用虛幻引擎(版本4.7)的渲染引擎渲染。

首先說明一下,第一幅圖檔中椅子的扶手和桌子底部是塑膠材質(漫反射加光滑鏡面反射),而第二幅中是金屬材質(粗糙鏡面反射)。原因是UE4導出的時候沒有把整個素材弄成一個材質了,我也懶得再編輯。然後桌上的雕塑第一幅是毛玻璃,第二幅是平滑玻璃。其餘材質都一樣了。

接下來點評一下兩幅圖中的不同之處。第一個最抓眼球的差別就是場景底部平面的鏡面反射,兩個都是用粗糙參數為0.25^2的 GGX模型 描述的粗糙鏡面,上下圖的差異很大。上圖是完全基于對BRDF和光源采樣的無偏結果,可當做參考,下圖則是可以說暴露了虛幻引擎4對輕微的粗糙反射的一個缺陷。虛幻引擎4中的反射解決方案是螢幕空間反射(Screen Space Reflection,SSR)加環境貼圖。對于非常平滑的表面,當它在場景中的反射剛好在螢幕上存在時,虛幻引擎4會使用SSR。當表面變的粗糙,或者反射部分在螢幕邊緣時候,反射會變成SSR和環境貼圖的權重和,直到對特别粗糙的表面完全變成使用環境貼圖。(其實這裡我隻要再把粗糙度調高一點,SSR就完全沒有了,不過那樣就完全看不出反射了因為環境貼圖的反射特别粗糙,不利于比較)是以下圖中的結果可以說是一個平滑鏡面反射和粗糙鏡面反射的權重和,當然無法真正模拟出輕微的粗糙反射。(這個問題用最近的 Stochastic Screen-Space Reflections可以得到一定的解決,不過很多時候不那麼robust)

第二個比較細微的差別則是下圖中桌椅黃色部分的鏡面反射有資訊丢失了。這個便是因為SSR算法本身無法處理反射物體在不在目前螢幕上的情況。這個Artifact其實在現在的遊戲中也非常常見,相信很多人都注意到了。SSR另一個細微的錯誤則是反射中的鏡面高光會是錯誤的,因為高光的計算取決于視線入射方向,直接從根據相機方向計算的螢幕上取是不對的。不過這個問題比前一個丢失資訊的問題小多了,沒人care。。

第三個差别是底部平面的高光區域在下圖比上圖分散很多,看起來下圖底部的螢幕比上圖更加粗糙。這個是由于兩種完全不一樣的Image Based Lighting的方法導緻的。上圖還是一切基于環境貼圖的能量分布采樣光源,虛幻引擎4則使用了Split-Sum,将渲染方程的光照部分和BRDF部分拆開分别積分,再對于兩個積分的結果球積。具體可以看這個連結 http://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_slides.pdf

為什麼Unreal 4引擎能輕易實時渲染出vray要花半天才能渲染出的場景

其中光照部分的積分又使用了Prefilter Cube Map的方法。再講細一些,UE4的環境貼圖是128x128x6的分辨率,7層MipMap。每一層的每一面都用1024個樣本采樣不同粗糙度的GGX去Filter。這裡有幾個産生誤差的原因,第一是誤差是采樣GGX的入射光線永遠是等于表面的法線方向,是以沒辦法模拟出上圖那樣在入射角和法線角夾角大的時候那種拉長的高光。另一個誤差則是隻采樣了7個離散的粗糙度,并且不同的粗糙度使用的不同Mipmap,這樣做對性能更有利,但是這種粗糙度和Mip層的映射完全是Epic的人“發明”出來的,完全不是基于實體。我自己試過同樣的BRDF在UE4中做Image Based Lighting都會比真正的離線參考看起來粗糙許多。當然隻要結果 Artists用着舒服,粗糙度看着有變化,也沒有什麼不好的。

第4個差别是下圖中桌子下面的部分和上圖比明顯偏亮。這個誤差則是因為環境貼圖的遮擋資訊隻有在capture的那一點才是正确的,例如這裡環境貼圖是在桌子上面capture的,桌子下面的部分大部分入射光被桌子遮擋,應該會比較暗,這裡則變成桌子下面接收到的光照和桌子上面一樣,是以和上圖比偏亮了。解決辦法就是應該在桌子下面人工多capture一個單獨的環境貼圖。

除了這些差別,色調的不同,以及背景模糊度的不同,都是不同渲染系統的post processing參數以及其他工程性的小問題,就不細說了。

除了這些渲染本身的差別,實時渲染系統往往也需要更多的artists work才能hack出接近真實的畫面,例如在場景不同的地方放置probes,提前烘焙光照貼圖等。

最後,現在别說是用UE4做建築可視化,就連做低成本動畫電影的都有。畢竟快速的疊代可以降低很多的成本,也就有可能出現一些非Pixar那種一定要男女老少都能看才能保票房的題材的片子。

而且要不是我這樣把UE4脫光了衣服拿出來比較,大家直接看着也不會覺得有任何問題。甚至我相信很多讀這個答案的人盯着這兩張圖看不出差别的。搞圖形的就是這樣。。廢了半天勁很可能是自娛自樂,真的搞的真實好看了,看得人也認為是理所當然。。 編輯于 2015-10-08  60 條評論  感謝  分享   收藏  •  沒有幫助  •  舉報   •  作者保留權利 更多回答 7

Peng DU,遊戲技術 Game Technologies

不用做光線跟蹤的快都是耍流氓。螢幕空間反射還好吧。螢幕空間折射很容易穿幫。 81

韓世麟

金嘉懿、廢材世界觀、李聞  等人贊同 來補充些内容,讓這個事情說得更明白一些:

先上視訊:

為什麼Unreal 4引擎能輕易實時渲染出vray要花半天才能渲染出的場景

UE4場景練習—線上播放—優酷網,視訊高清線上觀看 http://v.youku.com/v_show/id_XMTM0OTg3NDIyMA==.html

我和餘德傑都是建築學的,愛好CG,做這件事情,就是想學一下UE4,視訊什麼的都是學習過程的副産品,學了半天總得做個小成果展示一下啊。

樓下說軟文的先生  @haisenberg ,你确實是誤會了,不過也不怪你,因為這個問題看起來确實很像軟文!(笑)為啥咧?因為這是建築系的同學問的,搞引擎和遊戲的專業同學不會有這樣的誤解。

要知道建築學這邊的學生一般都是拿Vray之類的渲效果圖的,也沒人教,都要很苦逼的自己摸索,突然看見這麼好的實時效果,自然會冒出這樣的困惑。

是以,要認認真真的的回答這個問題的話,還要按知乎的規矩來:先問是不是,再問為什麼。

不存在題主所說的情況:UE4并不能輕易 實時渲染出寫實場景。

想要一個好的UE場景,前期需要大量的優化,模型的優化,貼圖的優化,然後還需要光影烘培“Build”的時間,而這個時間,就類似于Vray在渲圖的時間。參考這個問題下的幾個專業人士的回答,拿Vray渲染器和UE比其實是不公平的。

但是UE的間接光線不像Vray渲染的精度那麼高,在能容忍的粗糙範圍内,小場景的Build的時間也不需要太長。

以我們這個場景為例,因為模型用的是現成的Evermotion高精度模型,未經優化,最終整個小沙盒的Build時間是2小時左右。配置是:i7 5820k。如果模型優化得好,Build時間會大大降低,但是優化的時間要數倍于為Build節省的時間,但是别人運作起我們這個場景來就會更流暢。我們要是把周邊的牆斷開成四個小面的話,牆的光影貼圖面積就不用那麼大了,牆上的光影精度會大大提升,Build時間也會下降。

你發現了嗎?就像等價交換一樣,一切效果都要代價,效果好則時間肯定相應增加,無論你是離線還是實時渲染。處處要取舍。

我個人一直主張在學習設計的過程中把建築的可視化技術前置,結合到方案推敲過程中,而不是方案做完了畫張效果圖交差,那樣對建築學習沒啥意義。我們看中的是實時渲染沙盒的自由度,以及模型搭建出來以後,推敲材料的友善性。

是以這裡提醒各位建築系同學,好工具要用對了地方,不要看視訊效果好就拿UE做效果圖,最後很可能吃力不讨好。這事情不是這麼個玩法的。

當然了,如果是專業做效果圖的公司,自己優化好大量的模型庫,那做起效果圖來效率也是非常高的。

Lumion就是想做這方面的嘗試,我之前搞錯了,我之前以為是ue3,經評論提醒,Lumion是基于quest3d引擎開發的。

但是之前的Lumion效果還是有點假,不知這次的新Lumion怎麼樣,有沒有突“假與真”的臨界點。

現在UE4效果更上一層樓了,如果有人用UE4做一個供建築設計專業使用的軟體,那确實會很有助于空間材質效果的推敲。

下面簡單說說光影烘培技術的思路。

實時引擎的光影烘焙利用的一個事實就是漫反射物體的光照和光線反彈是“錄影機無關的”。

比如下面這個簡單的場景,立方體、球體、光源的空間位置一旦敲定,每個點的着色就不會随着觀察者位置的移動而改變了。說白了就是,我攝影師扛着相機圍着你亂跑,模特臉上的顔色不會跟着變來變去的。

為什麼Unreal 4引擎能輕易實時渲染出vray要花半天才能渲染出的場景

如果場景光照條件固定,那麼這些光影資訊就沒必要參與實時計算了,隻需要預先計算出來,在UE4裡叫“Build”。然後把這些光線的明暗着色“烘焙”到物體表面就好了。

是以物體表面的貼圖着色就變成這樣了:

為什麼Unreal 4引擎能輕易實時渲染出vray要花半天才能渲染出的場景

如是制造了光影着色的錯覺。

是以雖然叫實時渲染,但是很多時候并不是“實時”計算的,而是預先計算的。

UE4裡的lightmass還不簡單的是一個光影貼圖,而是一個立體的陰影區域,Build好以後,隻要物體挪到了影子裡,也會變黑。很棒的技術。

剛才說了光照是“錄影機無關”,反射效果就是“錄影機相關”的:

要補一句,這裡的反射是狹義的像金屬之類物體的光亮的反射,不包括漫反射,昨天有位同學問我漫反射也是反射啊,把我提醒了。

一旦涉及反射折射等效果的着色,那麼就和錄影機的位置關系很大了(不同角度反射到的内容自然是一直在變),這種東西就要靠實時的顯示卡計算,但是在實時渲染中,這裡面trick很多,能滿足視覺效果,但是不科學。

科學的還是maxwell那種實體模拟計算,需要離線渲染,需要很多時間。

知乎圖形學大神太多,我這個壓力還是很大的。

繼續閱讀