虛幻引擎學習之路:相機圖像後處理

原文鏈接:虛幻引擎學習之路:相機圖像後處理 - UWA Blog

之前UWA為大家分別介紹了Unreal 4引擎中渲染模塊的光照系統和材質系統,在本篇文章中,我們將為大家介紹渲染模塊的圖像後處理這部分內容。

在此,特別感謝Unreal中國團隊對於本篇文章中Unreal引擎相關內容的審核,並在UWA團隊學習其引擎的道路上提供的大力支持。


圖像後處理

渲染模塊中圖像後處理可用於實現各種特殊的鏡頭特效以及整體調節渲染的效果。它通常是在所有場景渲染結束後才執行。Unity引擎在2017版本之前的圖像後處理都是採用將腳本組件添加到相機上實現。因此,每添加一個圖像後處理腳本,就會多至少一次全屏幕的渲染Pass。Unity引擎在2017版本中引入了Post Processing Stack組件,該組件是一系列預定義圖像後處理效果集合。它將多種圖像後處理效果進行優化合併,提高了渲染效率,使開發者使用更加方便。Unreal 4引擎的圖像後處理也是採用一系列預定義效果集合,開發者在使用時只需要從中勾選需要的效果即可。在接下來的內容中,本文將首先介紹Unreal 4引擎的圖像後處理對象Post Process Volume的使用。然後,對其包含的一系列效果進行介紹,並與Unity引擎提供的效果做比較。最後,介紹自定義圖像後處理的使用。

一、圖像後處理使用

在Unreal 4引擎中,圖像後處理模塊是單獨作為一個對象放在場景中,叫做「Post Process Volume」。創建時可以將「Modes」頁面下「Post Process Volume」拖入場景即可,如下圖所示:

其中,黃色的方框表示該Volume的範圍,當相機處於範圍中時,圖像後處理才會生效。如果在Post Process Volume的設置界面中勾選了「Unbound」,則此圖像後處理效果影響範圍將擴大為整個世界空間,如下圖所示:

同時,如果場景中出現多個Volume重疊,引擎會根據上圖中的「Blend Weight」參數設置進行融合。

在Unity中Post Processing Stack的使用如同普通的腳本組件一樣,只需掛接到相機上即可。然後通過新建Post Processing Profile進行參數設置,如下圖所示:

目前,Unity的圖像後處理有效範圍是全局有效,部分區域有效的功能可通過腳本實現。但是Unity引擎提供的Post Processing Profile配置文件使參數共享變得更加便利。在不同的項目中,想要達到相同的圖像後處理效果,只需共用相同的Post Processing Profile即可。

圖像後處理使用Unreal 4 vs Unity小結

  • Unreal 4引擎與Unity 2017引擎的圖像後處理功能都採用了統一的框架,將不同的預定義效果進行優化實現,其使用方式都很便捷。Unreal 4引擎的圖像後處理支持有效區域以及混合的功能,Unity引擎提供的圖像後處理配置文件能夠更好地支持參數共享。

二、引擎內置效果

在Unreal 4引擎中,Post Process Volume的「Details」頁面顯示了不同類型圖像後處理效果的設置,包括Color Grading,Tonemapper,Lens,Rendering等。在Unity引擎中,Post Process Profile的「Inspector」頁面中顯示了其支持的各種效果,如下圖所示:

其中,大部分效果是Unreal 4引擎和Unity引擎都支持的。我們以對照的形式將其列出(Unreal 4 vs Unity):

  • Anti-Aliasing Anti-Aliasing
  • Ambient Occlusion Ambient Occlusion
  • Auto Exposure Eye Adaptation
  • Bloom Bloom
  • Color Grading Color Grading & User Lut
  • Depth of Field Depth of Field
  • Motion Blur Motion Blur
  • Image Effects Chromatic Aberration & Grain & Vignette
  • Screen Space Reflections Screen Space Reflection

接下來,我們將對Unreal 4引擎中的圖像後處理效果逐一介紹。

1、Anti-Aliasing

Unreal 4引擎中Anti-Aliasing也是圖像後處理的一部分,可以在「Project Settings」->「Engine」->」Rendering」中找到其設置。Unreal 4引擎目前支持了三種反走樣演算法,如下圖所示:

其中,效果最好的是Temporal AA,目前該方法用的最多,引擎也是默認設置該方法。MSAA目前使用相對較少。相比較而言,FXAA效果比MSAA更好。Unity引擎中支持的圖像後處理反走樣有兩種,如下圖所示:

下圖顯示了不開啟AA與開啟MSAA以及FXAA的效果對比,讀者可以關注建築和柵欄稜線的反走樣效果。

該圖取自Nvidia的FXAA說明文檔 【1】,左圖為不開啟AA,中圖為開啟MSAA,右圖為FXAA

下圖顯示了不開AA以及開啟FXAA和Temporal AA的效果,讀者可關注建築上樓層分割線的反走樣效果:

上圖取自Unreal 4的Temporal AA文檔 【2】

2、Tone Mapper & Color Grading

在Unity引擎中Color Grading的作用是做Tone Mapping(即將HDR的渲染結果轉換成LDR)以及顏色校正(即將LDR結果進行校正使得設備顯示正常)。在Unreal 4引擎中默認的Tone Mapper採用了ACES(Academy Color Encoding System)標準,在Unity引擎中的Tone Mapper在內部計算時也是採用ACES標準,但是它提供了Neutral和 Filmic兩種選擇。其中Neutral方式採用參數化的控制,儘可能減少了在Tone Mapping過程中對色度和飽和度的影響。Filmic方式採用與ACES近似的方法,因此其對比度比Neutral更強一些。下圖顯示了Unreal 4和Unity引擎的Tone Mapper設置界面:

在Unreal 4引擎中,Color Grading的設置包含了白平衡以及飽和度、對比度、Gamma校正等參數。並且,針對場景中的全局和不同部分,Unreal 4引擎提供了不同的參數設置,其中包括:Global、Shadows、Midtones以及Highlights。Unity引擎則提供了全局的設置參數,如下圖所示:

除了設置參數,Unreal 4和Unity引擎還提供了用紋理做顏色映射的方法,它類似一個查找表(Look Up Table)。在Unreal 引擎中,該設置是在Color Grading選項中,在Unity引擎中則是單獨放在User Lut選項下,如下圖所示:

下圖顯示了使用不同的Lut紋理的渲染結果:

上圖取自Unreal 4官方網站,上排圖片顯示了渲染結果,下排圖片顯示了用做Lut的紋理。

3、Image Effects

Unreal 4引擎中的Image Effects包含了Chromatic Aberation、Vignette以及Grain的設置。分別對應Unity引擎中三種效果,如下圖所示:

Chromatic Aberation是一種模擬相機鏡頭產生的顏色偏移效果,如下圖所示:

Vignette模擬鏡頭邊緣被遮擋導致的偏暗效果,如下圖所示:

Grain是用於模擬老式相機拍出的顆粒感,如下圖所示:

4、Bloom & Dirty Mask

Unreal 4和Unity引擎都支持Bloom以及Dirty Mask效果。Bloom模擬了亮度較強區域周圍的泛光效果,Dirty Mask模擬了鏡頭被弄髒導致的效果。Unreal 4引擎的Bloom效果有兩種方式「Standard」和「Convolution」。Convolution方式使得開發者能提供一張紋理自定義卷積核達到更真實的Bloom渲染效果,如下圖所示:

下圖顯示了Bloom效果和Dirty Mask效果:

上圖取自Unreal 4官方網站

5、Auto Exposure

Unreal 4和Unity引擎的圖像後處理支持自動調節曝光度效果。當場景整體亮度偏暗或者偏亮時,該效果會自動調節曝光度,使得場景不至於過亮或過暗,並保持場景中的細節。其設置界面如下圖所示:

下圖顯示了自動調節曝光的效果:

上圖取自Unreal 4官方網站

6、Lens Flares

Unreal 4引擎支持鏡頭耀斑效果,它模擬了相機鏡頭在拍攝強光時產生的光斑。在其設置界面可以設置光斑的染色、大小、形狀,如下圖所示:

渲染效果如下圖所示:

上圖取自Unreal 4官方網站

7、Depth of Field

Unreal 4和Unity引擎的圖像後處理都支持景深效果。Unreal 4引擎的DOF效果支持三種方式,如下圖所示:

其中,BokehDOF效果最好但最耗時,GaussianDOF效率最高,CircleDOF效果和效率居中,如下圖所示:

上圖取自Unreal 4官方網站

8、Ambient Occlusion

Unreal 4和Unity引擎都支持Screen Space的Ambient Occlusion,其參數設置界面如下圖所示:

下圖顯示了Unreal 4引擎中SSAO的渲染效果:

上圖取自Unreal 4官方網站

9、Global Illumination

Unreal 4引擎的圖像後處理支持對間接光照進行染色,以及調整強度,如下圖所示:

下圖顯示了設置Indirect Lighting Color和Indirect Lighting Intensity的渲染效果:

上圖為原始渲染結果,中圖為Indirect Lighting Color設為紅色的渲染結果,下圖為Indirect Lighting Intensity設為2倍的渲染結果。

10、Screen Space Reflection

Unreal 4和Unity引擎都支持屏幕空間反射。Unity引擎支持兩種模式,如下圖所示:

其中Unity引擎支持兩種不同的Blend類型:Physically Based和Additive。使用Physically Based類型時,Unity引擎會對反射表面的材質進行採樣,然後計算反射結果。該方式比Additive更加耗時,但渲染結果更加真實。

下圖顯示了Unreal 4引擎的SSR渲染效果:

上圖取自Unreal 4官方網站

11、Motion Blur

Unreal 4和Unity引擎都支持運動模糊效果,如下圖所示:

下圖顯示Unreal 4引擎中Motion Blur的渲染效果:

上圖取自Unreal 4官方網站

圖像後處理效果Unreal 4 vs Unity小結

  • Unreal 4和Unity引擎支持的大部分圖像後處理效果都相似,少數效果兩種引擎提供的參數設置有所區別。

三、自定義效果

Unreal 4和Unity引擎都支持自定義圖像後處理。在Unity引擎中,只需要將圖像後處理腳本組件掛接到相機上即可。在Unreal 4引擎中可利用Post Process Material來實現。

1、Post Process Material

Post Process Material的創建與普通Material創建相同,只是在Material的參數設置中需將「Material Domain」選項設置為「Post Process」,如下圖所示:

其中,圖像後處理只需要用到材質的「Emissive Color」參數。在編輯時,只需將節點圖與基礎節點的「Emissive Color」引腳相連即可,如下圖所示:

創建好Post Process Material後,即可在Post Process Volume的 「Post Process Materials」參數中使用,如下圖所示:

其中,Post Process Materials參數是一個數組,可以設置多個材質進行融合。

自定義效果Unreal 4 vs Unity小結

  • 對於自定義圖像後處理效果,Unity採用腳本組件的方式,Unreal 4採用材質節點圖的方式,兩者都比較方便。

圖像後處理小結

相比較而言,Unreal 4引擎和Unity引擎2017版本的圖像後處理提供的內置效果大部分相似,使用起來都比較便利,只需在設置頁面進行勾選並調整相應參數即可。自定義圖像後處理的編輯和使用也都比較方便。


參考文獻

【1】developer.download.nvidia.com

【2】 de45xmedrsdbp.cloudfront.net

以上即為UWA團隊對Unreal 4引擎就渲染模塊之相機後處理的講解,之後我們將繼續分享渲染模塊中烘焙相關的學習心得,歡迎大家的關注!我們希望本系列文章能讓更多的中國遊戲開發者了解和理解Unreal 4引擎的重要功能和所能達到的效果,也讓更多的中國遊戲開發者對Unreal引擎和Unity引擎融會貫通,提升技術儲備。

最後非常感謝您能閱讀到這裡,希望能對您的項目有所幫助,如對文中的內容有異議或者進一步的補充說明,歡迎在後台給我們留言,謝謝!


推薦閱讀:

VRay for SketchUp工業產品表現之煤油燈
VRay for SketchUp環境阻光(AO)的簡介與應用
##譯## The Comprehensive PBR Guide by Allegorithmic — Vol.2
支持導入任意貼圖的maya工具——材質管理器

TAG:虚幻4游戏引擎 | 渲染 | 图像处理 |