虚幻引擎学习之路:相机图像后处理

虚幻引擎学习之路:相机图像后处理

之前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 (vs) Anti-Aliasing
  • Ambient Occlusion (vs) Ambient Occlusion
  • Auto Exposure (vs) Eye Adaptation
  • Bloom (vs) Bloom
  • Color Grading (vs) Color Grading & User Lut
  • Depth of Field (vs) Depth of Field
  • Motion Blur (vs) Motion Blur
  • Image Effects (vs) Chromatic Aberration & Grain & Vignette
  • Screen Space Reflections (vs) 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】 http://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf
【2】 https://de45xmedrsdbp.cloudfront.net/Resources/files/TemporalAA_small-59732822.pdf

以上即为UWA团队对Unreal 4引擎就渲染模块之相机后处理的讲解,之后我们将继续分享渲染模块中烘焙相关的学习心得,欢迎大家的关注!我们希望本系列文章能让更多的中国游戏开发者了解和理解Unreal 4引擎的重要功能和所能达到的效果,也让更多的中国游戏开发者对Unreal引擎和Unity引擎融会贯通,提升技术储备。

最后非常感谢您能阅读到这里,希望能对您的项目有所帮助,如对文中的内容有异议或者进一步的补充说明,欢迎在后台给我们留言,谢谢!