首先插件可以在AssetStore上免费下载(搜索 Post processing stack导入);
2018版本还可以使用Window>>PackageManager进行添加.
然后,在camera上挂载Post Processing Behaviour脚本。
这时,你需要在工程界面右键 Assets > Create > Post-Processing Profile.
然后在Post Processing Behaviour脚本上选择你新创建的 Post-Processing Profile文件。当你在选择profile的时候,会发现已经存在一个默认的文件了,我们不管这个,就选择自己创建的profile即可。
随后,我们需要在Project视图里面找到你创建的这个文件,单击这个文件,观察inspector面板:
image.png1 Antialiasing 抗锯齿 FXAA:一种非常便宜但质量差的方法,在各个平台上都能快速运行。TAA:桌面和控制台平台的质量更高,但资源消耗更高。
2 Ambient Occlusion 环境光遮挡 它依赖于深度和法线缓冲区使彼此靠近的折痕,孔和表面变暗。在现实生活中,这些区域往往会阻挡或遮挡环境光,因此它们显得更暗。
3 Screen Space Reflection 屏幕空间反射该效果基于表面粗糙度计算屏幕空间中的反射;
4 Septh Of Field 景深该效果模拟相机镜头的属性。在现实生活中,相机只能以特定的距离对焦,距离相机更近或更远的物体将会偏离焦点。模糊给出了对象距离的视觉提示。
5 Motion Blur 运动模糊这个效果模拟了大多数摄像机系统的光线随着时间的推移而累积。因此,快速的相机或物体运动将产生模糊的图像
6 Eye Adaptation 人眼适应该效果根据其包含的亮度级别的范围动态调整图像的曝光。这种调整在一段时间内逐渐进行,所以当黑暗的隧道出去时,玩家会被明亮的户外灯短暂地眩晕。同样,当从明亮的场景移动到黑暗的场景时,“眼睛”需要一些时间来调整。在内部,这种效果在每个帧上产生直方图,并对其进行滤波以找到平均亮度值。
7 Bloom 辉光是来自亮源(如闪光)的光泄漏到周围物体中的光学效应。这是一个非常独特的效果,可以对场景产生很大的影响,可以建造一个神奇或梦幻般的环境,特别是与HDR渲染结合使用时。另一方面,给定适当的设置,也可以使用这种效果来增强照片写实感。在非常明亮的物体上发光是在电影和摄影中观察到的常见现象,其中亮度值差异很大。
8 Color Grading 颜色分级这种效果提供了基于行业标准和电影业知名软件的完全实时HDR色彩分级管道。
转载于:https://blog.csdn.net/maba007/article/details/83303328
以下内容转载于:侑虎科技之Unity引擎后处理性能优化方案解析
目前我们项目使用的后处理插件是Unity-Technologies/PostProcessing。选用前,我们对比过众多后处理插件,最后根据效果和使用方便程度,结合策划的需求,选用了Unity-Technologies/PostProcessing(我用的v1,大家可以尝试v2版本)。这里我们不讨论后处理的效果,或者哪个插件的好坏。本文将介绍一个能通用的后处理性能优化方案。
一、OnRenderImage的性能问题
在我们看到的后处理教程或者后处理插件中,通常的处理方式是在OnRenderImage方法中处理后处理。
请输入图片描述在我刚开始整合后处理的过程中发现,即使不做任何后处理,仅仅一句Graphics.Blit(Source, Destination),也会导致严重的掉帧,这看起来是不符合逻辑的。在Google后,找到问题的说明Post Process Mobile Performance : Alternatives To Graphics.Blit , OnRenderImage,原因如下:
请输入图片描述答主给的解决方案如下:
请输入图片描述也就是在OnPreRender中,将RenderTexture赋值给Camera,在OnPostRender中处理后处理渲染。
通过这种方案能大幅度减少掉帧。我们测试过用同样的后处理(例如Bloom)在使用OnRenderImage的时候,从60FPS掉到40FPS左右。改用PrePost方法后,从60FPS掉到55FPS左右,改善明显(用中低端手机测试效果明显些,我们是用的360手机。不同手机改善的程度略有差异,但是还是能看到至少几帧的提升)。相信这个优化方案,有不少同学之前已经看到过并已经在使用。
这个方案略有麻烦的一点是,当我们的Camera开启MSAA或者HDR的时候,会导致后处理不起效果。我猜测应该是MSAA和HDR会激活Unity引擎内部的渲染流程必须走OnRenderImage。
这里要特别注意的一点是,我们用的是Gamma Color Space,如果我们要HDR的效果,最好不要用PrePost这个优化方式,因为经测试会导致负优化,帧数反而下降。目前我还没找到好的办法,这里我们按照不需要HDR效果来说。
我们还是可以支持MSAA,解决方案是,根据QualitySettings.antiAliasing和我们的方式来创建Temp的RenderTexture。同时,我们需要关闭摄像机的MSAA和HDR选项。
请输入图片描述 请输入图片描述https://forum.unity.com/threads/onrenderimage-is-slow-when-msaa-is-on.427006/
这里要注意处理的逻辑是:当我们在游戏设置界面开关后处理的时候,要配对地处理Camera的MSAA选项和RenderTexture的创建参数,以免出现后处理不起作用,或者关闭后处理后,抗锯齿没有正确开启的问题。
这应该是一个能立竿见影的优化,相对需要注意处理好一些细节和各种设置切换的处理,做好测试。
二、合并多个后处理效果
当我们使用Unity引擎早期的Image Effect,或者一些单个效果后处理插件的时候,他们通常没有考虑整合的效率问题。以OnRenderImage的做法举例:通常是每个效果是一个脚本,它有自己的OnRenderImage,如果我们有4个效果,那就是4个单独的OnRenderImage,这在代码层面的简洁性和易扩展性上,当然是有优势的。但是这样做性能是有问题的,我们需要尽量将各种后处理效果,整合到同一个OnRenderImage(或PrePost方法)中,这样能带来一些性能提升,虽然不如上面的PrePost效果明显,但是优化是一点点积累的,也是值得做。
具体方法,Unity-Technologies/PostProcessing这个就比较有代表性,它将所有的效果整合到同一个OnRenderImage和同一个Shader中处理,只是通过材质的EnableKeyword来开关对应的功能。详细请看链接里的代码。
这里提一句,如果用PrePost方式优化,将不能和OnRenderImage方式在同一个Camera下混用,这里整合的时候,要根据项目的需求处理好。我们现在是用Unity的 Post Processing方案,改为PrePost的方式。
同时,大家使用各种后处理插件、效果,要注意根据需求做一些裁剪,某些不需要的效果尽量注释或删除,让整合的代码更加清晰可读,也减少一些额外的性能消耗(Shaderlab内存等)。
三、修改材质属性,不要使用String
通常的例子代码中,会使用String作为Key的方式来修改Mat的属性,很多Shader的插件内也是这么用的。
请输入图片描述String的方式
请输入图片描述这里,我们通过反编译可以看到,String的方式实际上会调用Shader.PropertyToID,所以,我们应该将整个ID Cache下来,通过ID的方式来调用。
请输入图片描述 请输入图片描述这也是一个很小的点,但是如果是后处理这种,可能每帧都会调用的地方,所带来的优化效果还是很有意义的。
还有一些优化,比如减少RenderTexture的尺寸等,在网上很多关于优化的文章中都有提到,就不具体说了。
总结一下,主要的优化就是OnRenderImage转换为PrePost的方式,能大大地改善后处理的渲染效率(Opengles2和Opengles3都测试过)。我们使用的Unity版本是5.6.4,其它版本未测试,如果用其它版本,大家需要自己先测试一下。
无论优化多好,后处理始终对性能影响很大,特别是手机电量不足或者发热导致手机降频的时候,后处理将会导致掉帧加重。如果必须要使用后处理(策划,美术要求),那么做好性能开关、优化好后处理的性能是必须要做的。
最后说明一点:PrePost的优化方案只有在不需要HDR效果下才有优化效果(基于我的测试),如果需要HDR效果,还是用OnRenderImage来做吧。这块优化需要多多测试,不注意就容易出问题哦。
参考文章:
1.Post Process Mobile Performance : Alternatives To Graphics.Blit , OnRenderImage ?
2.OnRenderImage() is SLOW when MSAA is on
网友评论