翻译的原文是Unity PostProcessing在GitHub上的文档,希望可以方便一些英文不是特别方便的Unity美术同学阅读学习,如果翻译的过程中有错误或者官方文档有些修改,希望大家可以留言指出,我及时进行修正
大致介绍
Post-processing是将全屏的滤镜和特效应用于摄像机的图像缓冲区,然后渲染在屏幕上的过程。只需要花费较少的时间进行设置,就可以大大提高产品的视觉效果。
你可以使用Post-processing来模拟物理摄像机和电影效果。
下面的图片展示了应用和没应用Post-processing的差别。
安装
Package(资源包)
安装和更新Post-processing比较规范的方式是使用Unity2018.1之后推出的Package Manager。
注意:如果你已经在你的项目中引入了某一个Scriptable Render Pipeline(可编程渲染管线),那么Post-processing就已经导入在你工程中了</font>
打开Window->Package Manager
,在左侧列表上方从In Project
切换到All
,并在列表中选择Postprocessing
。在右边的面板你可以看见关于这个资源包的一些信息和一个install(update)按钮,点击这个按钮可以下载当前可用的最新版本的资源包。
Sources(源代码)
如果你愿意的话也可以使用最新版本的Post-processing,但注意只有打包发布的版本是官方推荐的。如果你对Git不是很熟悉,我们建议下载Github Desktop,很容易使用并且和Github集成的很好。
首先确认你没有导入Postprocessing
资源包,不然会和当前安装方式冲突。如果已经安装了,那么可以使用package manager移除当前资源包(Window -> Package Manager
)。
然后你可以使用Git客户端将post-processing repository克隆到Assets
文件夹中。当前的branch(分支)是v2
,并且已经被设为默认,不需要转换到别的branch,除非你想获取一些其他branch中的一些特性。
如果你不想用Git客户端,也可以点击网页右上方"Clone or download"这个绿色按钮下载后,解压缩到你的工程中。使用Git的好处是可以很快的更新到最新版本,而不用再去下载、解压、覆盖真个文件。这样也更安全,可以正确的处理移动或者移除文件。
快速开始
注意:如果你创建工程的时候使用了带有Post-processing的模板,那就不用进行下面大多数步骤了,但还是建议你读一下这段,理解每一项是如何工作的</font>
Post-process Layer
要在摄像机上激活post-processing,第一件事就是在摄像机上添加Component -> Rendering -> Post-process Layer
组件。
第一部分描述摄像机的 Volume blending (体积混合) 设置:
-
Trigger(触发):默认情况下摄像机会被添加到这里,传入的Transform将用来驱动volume blending的特性。在某些情况下你可能想用摄像机之外的Transform,比如在顶视角游戏中,你可能想用角色控制器取代摄像机来驱动,如果设置为
None
将会禁用当前层的局部Volume blending(全局属性依旧会起作用)。 -
Layer(层):用来应用Volume blending的层遮罩,它可以让你对volume进行过滤,并且对优化volume遍历十分有效。应该始终将volume设置为专用的Layer(层),而不要使用Default Layer(默认层),这样可以提高性能。这个选项默认被设置为
Nothing
,所以不要忘记更改它,否则不会产生效果。关于Layer(层)的更多信息以及如何在Unity中使用,可以阅读这篇文档。
接下来是 Anti-aliasing(抗锯齿),需要对每个需要启用抗锯齿的摄像机进行设置。取代全局设置使用这种方式的好处是在项目中可以在需要抗锯齿的时候再去启用它。例如,你的主摄像机可能使用的 Temporal Anti-aliasing 抗锯齿算法,而另外一个用于渲染监控摄像头的摄像机只需要使用 FXAA 抗锯齿算法。关于抗锯齿的更多信息可以阅读这篇文档。
Stop NaN Propagation(阻止无效像素扩散) 可以在Post-processing应用之前消除任何无效的、非数值的像素,并用黑色的像素来取代它。通常建议启用这个选项,可以有效的避免场景中Post-processing的数据崩坏。
Toolkit 部分有一些功能,你可以使用下面其中一种模式将当前帧导出为EXR:
- Full Frame (as displayed): 照原样导出摄像机的画面(同Game视图中摄像机拍摄渲染的画面一样)。
- Disable post-processing: 同上个模式一样,只是不应用任何的Post-processing。
- Break before Color Grading (linear): 同第一个模式类似,但是不会应用Color Grading。适用于你想在其他软件进行调色的情况。
- Break before Color Grading (log): 同上一个模式类似,但导出的时候会对图像进行log-encoded。适用于你想在其他软件中进行高精度的HDR调色处理等工作。
其他实用的功能:
- Select all layer volumes: 选择所有可以影响当前Post-process Layer的Post-process Volume组件。
- Select all active layer volumes: 选择所有正在影响当前 Post-process Layer的 Post-process Volume组件。
最后的部分允许你去改变自定义效果的渲染顺序。关于自定义效果更多的信息可以阅读这篇文档
Post-process Volumes
Post-processing在当前这个框架中的工作方式分为局部和全局两种。它允许你给与每套volume一个优先级和一组效果重写来自动在场景中混合post-processing。例如,你可以设置一个全局的Light vignette effect(晕影效果),当玩家进入山洞的时候,你可以重写Intensity
使晕影的效果增强,同时保持其他设置不变。
Post-process Volume组件可以被添加在任何的游戏物体上,包括摄像机也可以。但通常建议新建一个专门的游戏物体来赋予这个组件。让我们从创建一个全局的Post-process Volume开始。创建一个空物体,并在它身上添加组件(Component -> Rendering -> Post-process Volume
)或者使用(GameObject -> 3D Object -> Post-process Volume
)。不要忘记将这个物体的Layer(层)设置为摄像机上的Post-process Layer组件的应用的层。
创建后默认情况组件是空的,并且有两种模式:
- Global: 设置为全局模式后,不会有任何的边界,将会被应用在整个场景中。当然你也可以在场景中拥有多个Volume。
-
Loacal: 设置为局部模式后,需要添加一个Collider(碰撞器)或Trigger(触发器)来确定这个Volume的边界。任何类型的3D Collider都可以使用,简单的Cube Collider到复杂的Mesh Collider都可以,但我们建议尽可能使用一些简单的Collider,因为Mesh Collider较为消耗资源。局部的Volume可以设置一个
Blend Distance(融合距离)
值,代表从Volume外多远开始一点点渐变到当前这个效果(根据Post-process Layer组件Trigger属性赋予的Transform来计算)。
当前这个案例我们设置为全局模式,勾选Is Global
。
Weight(权重)
可用来减少该volume的全局影响,0表示完全不起作用,1表示完全起作用。
Priority(优先级)
可用来确定该volume在堆中的优先级,值越高,优先级越高。
我们还需要创建一个profile(配置文件)应用在当前的volume上(或重用已存在的文件)。我们可以点击New
按钮(或者可以在Project视图中通过Create -> Post-processing Profile
创建)。创建之后将作为资源文件存储在工程中。你可以直接选择这个配置文件进行编辑,或者更好的方式是该volume组件的检视面板中进行编辑。当赋予了一个配置文件后,可以看到新出现了一个Clone
按钮,点击这个按钮会复制一份当前赋予的这个配置文件,并将新复制出来的配置文件赋予当前的volume组件。当你想对一个配置文件进行快速调整的时候可以这样处理(尽管我们应该尽可能的去重写同一个配置文件)。
我们现在可以向堆中覆盖这个效果了。
下面是对这个效果的分析:
每个字段左侧都有一个开关,如果你想使用这个设置,那在编辑这个设置之前应该勾选这个开关。你也可以通过左上角的开关来快速的关闭或开启下面的子项的这些开关。
右上角的on/off
切换按钮用来更改当前效果在堆栈中是否启用(比如,如果你想在一个优先级更高的Volume上禁用一组效果),然后这个切换按钮处于标题栏上,所以会作用于当前Volume的一整组效果。
最后,你可以右键点击某一个效果的标题栏,可以进行复制、粘贴、移除、重置等操作。