unity 屏幕后处理插件 PostProcessing

首先插件可以在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.png

1 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容