通过前面一小节,我们初步认识了后处理是什么,在Unity中简单的试了试后处理的效果。本节我们来创建一个我们自己的后处理配置文件(post-processing profile)。
一个后处理配置文件包含了一系列为了达到特定视觉效果的后处理效果的配置。后处理配置文件对于项目整体的视觉风格和感觉有着非常大的影响。我们来看一个实际的例子感受一下后处理的威力。
选择一种视觉风格
在添加任何视觉效果到场景前,请先选择一种你想要实现的视觉风格。看看以下几种不同视觉风格类型的例子,尝试解读以下每张图是哪些东西造就了整体美术风格。
例如,对于“老西部片”例子:
- 整个场景是棕色调
- 图片有颗粒质感
- 阴影非常暗,阴影区域内的细节很难看清
老西部片(Old western)
类似于1966年电影《The Good, the Bad, and the Ugly 》
明快色彩(Bright and colorful)
类似于2003年电影《Finding Nemo》
反乌托邦绿(Dystopian green)
类似于1999年电影《The Matrix》
暗黑(Dark and gritty)
类似于2013年电影《Man of Steel》
选择一种美术风格
以上四种风格,请任意选择一种作为你想做出来的效果。如果以上几种风格没有一种符合你的胃口,你也可以尝试自行选择其他类型的风格。
创建一个新的后处理配置文件
1. 在Hierarchy中选中Postprocessing Global Volume物体,在其Inspector面板的Volume组件中,选择New来创建一个新的profile。
这会自动创建并分配一个新的空白profile,重置场景的外观为默认状态。
2. 在Volume组件中,点击profile的名字,在Project窗口中会自动定位并高亮出这个文件。
3. 重命名这个文件,命名方式自定,建议取名为类似“PostProcessing - bright and colorful” 的方式。然后将它移动到有意义的目录中,比如Settings目录。
增加辉光(Bloom)效果
Bloom是什么?
Bloom是后处理效果中最流行的一种,无论我们选择哪种视觉风格,它都可以起到帮助。
在真实世界中,当相机拍摄到一些非常明亮的灯光时,会呈现出一种光源周围出现闪亮的效果。
在Uniyt中,Bloom效果会模拟这种行为,可以传达出光源非常明亮的信息。
添加Bloom到场景中
1. 在Hierarchy中选中Global Volume物体(名字为PostProcessing Global Volume或者是你自定义的名字,后文中统一用Global Volume物体代替)
2. 在其Inspector中的Volume组件里,选择Add Override,然后选择Post-processing -> Bloom。
“Override”的意思是我们的选择会覆盖(改变)当前场景的渲染方式。选择后,会出现一个新的Bloom组件,下面带有一些属性,这些属性默认是禁用的。
3. 启用Threshold和Intensity属性,然后将Intensity值增加到1.0。我们会看到场景里会有闪光的效果出现,主要是红色的盒子,浅蓝色盒子以及在深蓝色盒子后的亮点处。
我们可以尝试勾选Bloom组件名字旁边的复选框来启用和禁用Bloom效果做对比。
4. 我们可以尝试进一步调整一下Bloom组件的其他属性来对比看看效果。关于Bloom的详细描述,可以参考这里:
应用色调映射(Tonemapping)
色调映射对于让我们的场景在屏幕上看起来达到最佳效果来说,是一个非常重要的特性。要搞清楚色调映射之前,我们先要理解HDR是什么。
关于色调映射,也可以看看这篇文章:
HDR是什么?
HDR是高动态范围(High Dynamic Range)的缩写,如果它被启用,则在场景中会有更宽的亮度值(brightness or luminosity)。
举例来说,在普通的LDR(Low Dynamic Range)情况下,假设我们可能展示出的最大亮度值是1.0。但使用HDR的情况下,我们可以展示出的最大亮度值是1.5(或更高)。
没有HDR的话,高于LDR最大亮度值的时候,显示出来的效果都是一样的(超过最大值1.0)。
实际上,是HDR让Bloom效果生效了,因为HDR能够处理对于普通范围来说的“过于明亮”的光。
显示HDR的问题
尽管我们能够将我们场景中的一个物体的亮度调成和太阳一样明亮,但有个问题,普通的屏幕根本没有能力显示出这种亮度。
因此,当有限制的屏幕硬件尝试去呈现出非常明亮的物体时,它会到达屏幕亮度的物理极限,整块区域会变得发白,将其中的细节全部都丢掉了。
这看起来并不理想,并且它也并非是我们在真实生活中所感知的样子。这时我们就需要色调映射了。
什么是色调映射
色调映射将哪些极端的亮度值重新映射到了一个较低的值,这样会让原本被丢失的细节恢复出来。
我们可以从上面的对比图看出色调映射恢复了多少细节。
如果以上的所有东西对你来说有点混乱,没关系。最重要的事情是我们要知道,如果我们正在使用HDR,特别是如果正在使用Bloom的话,我们要应用色调映射来确保超级明亮的地方看起来仍然还OK。
将Tonemapping添加到场景中
1. 在Hierarchy中选中Global Volume物体。
2. 在Volume组件的底部,选择Add Override,然后选择Post-Processing -> Tonemapping(也可以在选择Add Override之后, 通过搜索框搜索)。
3. 在新建的Tonemapping组件中,启用Mode属性,在下拉框中选择Neutral或ACES(觉得哪种好看就选哪种)。
Neutral和ACES(Academy Color Encoding System)只是两种不同的执行色调映射操作的方法,它们的效果略有不同。我们可以从场景中的红色盒子的效果看出,ACES在本场景中效果更佳。
我们来看一个简化版的Neutra
l和ACES效果对比图。
做一些校色处理(Color Grading)
什么是校色(Color Grading)?
校色是为了达成一种视觉效果,调整场景里的颜色的过程,对于项目的整体视觉感知有重大影响。
根据环境中的颜色的亮度和范围不同,我们的项目可以传达出恐怖、科幻、艺术或儿童向的氛围。
在传媒行业中,有一些专职人员(比如调色师),他们的全部工作就是校色。接下来我们所接触的只是这个非常复杂的艺术和科学的毛皮,但我们可以从中学到Unity中这项工作大概会如何进行。
添加Color Grading到场景中
1. 在Volume组件中,添加Color Adjustments模块。关于这个模块的详细说明,可以参考这里:
https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@7.1/manual/Post-Processing-Color-Adjustments.html#:~:text=To%20add%20Color%20Adjustments%20to,any%20Camera%20this%20Volume%20affects.
2. 使用Color Adjustments属性,尝试调整到你想要实现的效果。
以下是一些小的指导,可能会起到点帮助。
Bright and colorful
- 增加对比度(contrast)和饱和度(saturation)
- Neutrual色调映射
Old western
- 增加曝光(exposure)
- 减少对比(contrast)和饱和度(saturation)
- 增加一个黄色滤镜(yellow color filter)
- Neutral色调映射
Dystopian green
- 降低饱和度(saturation)
- 增加一个绿色滤镜(green color filter)
- ACES色调映射
- 增加Bloom
Dark and gritty
- 增加对比度(contrast)
- 增加一个蓝色滤镜(blue color filter)
- ACES色调映射
3. 在Volume组件中,增加Lift,Gamma,Gain模块,然后通过它们下方的复选框启用它们。
这个东西叫做三向颜色校准器(three-way color corrector):
- Lift - 场景中的暗色调
- Gamma - 中间色调
- Gain - 明亮高光
4. 尝试调整一下每个滑动条看看效果。
在上面的例子中,Lift(暗色调)被降低,使得阴影更加黑暗和戏剧化,Gamma被提高,因此画面不会太暗。
大部分情况下,基本的Color Adjustments已经足够了,但如果我们想要精确地呈现出脑海中的样子,三向颜色校准会非常有用。
如果可以,你还可以尝试一下其它和颜色相关的效果,比如:
white balance
尝试看看其他的后处理效果
接下来我们来看看另外一些比较有用的效果,完整的列表和说明,请参考官方文档:
景深(Depth of Field)
Depth of Field会让特定距离的物体保持清晰,更远或更近的物体模糊。这个效果对性能影响较大,需要谨慎使用。
胶片颗粒(Film Grain)
胶片颗粒模仿了老电影中看到的颗粒感。这个效果能够让画面看起来有年代感。
渐晕(晕映,Vignette)
渐晕效果模拟出了真实镜头下图像外边界的晕影效果。这个效果也可以用来让某个东西看起来比较古老,或者让观看者目光聚焦在屏幕中央。
还有其他一些效果比如Lens Distortion(透镜畸变),Motion Blur(运动模糊),Chromatic Abberation(色差)等。感兴趣的都可以去试试看。