Unity ImageEffect 效率分析

Unity ImageEffect 效率分析

作者:news 发表时间:2025-08-04
大山教育:终止配售协议后续反转 韩国7月出口同比增长5.9%,芯片出口飙升31.6%官方通报来了 外卖大战的背后是即时零售争夺战 而非单纯内卷反转来了 陆家嘴国泰人寿董事长黎作强卸任,王岗将接任官方已经证实 新濠国际发展:新濠博亚娱乐第二季度应占净收入为1720万美元 同比减少19.63%秒懂 美国可控核聚变重磅 首座电厂开建 机构调研这些股(附名单)后续来了 乘风低空经济、掘金空中交通!华宝通用航空ETF联接基金8月1日火线首发 特朗普以芬太尼和报复为由对加拿大征收35%的关税太强大了 港股概念追踪|苹果最新财报远超华尔街的预期 大中华区产业链提振受益(附概念股) 美国炼油商Phillips 66因窃取商业机密被判赔偿8亿美元后续会怎么发展 9月降息要泡汤?特朗普再炮轰鲍威尔:他不配担任美联储老大! 新股提示:广东建科今日申购 新城市建设发展根据特别授权发行3133.48万股认购股份 需求激增 寒武纪以技术积淀抢占发展先机 今日630只个股突破五日均线是真的? 如祺出行股价连涨四日 Robotaxi+战略发布以来市值增超25%学习了 8月1日保险日报丨城市商业医疗险新规下发,六大维度推动惠民保高质量发展!预定利率调降带动保险产品切换 可控核聚变概念局部拉升,融发核电涨近8% 龙国儒意,拟配股融资39亿,继第四范式、商汤之后的第三家配股予无极资本 科技巨头财报释放的最重要信号:AI开始赚钱了! 如祺出行股价连涨四日 Robotaxi+战略发布以来市值增超25%后续反转来了 今日盘中突破年线个股后续来了 价值“红线”见分晓!储能安全强制国标8月1日将实施!官方处理结果 奥士康拟加码投资高端PCB产能 聚焦AI服务器与新能源汽车赛道官方处理结果 龙国儒意,拟配股融资39亿,继第四范式、商汤之后的第三家配股予无极资本太强大了 张英,正式就任「申万宏源香港」董事 高盛拟收购冰激凌制造商Froneri,估值据悉达150亿欧元科技水平又一个里程碑 光模块龙头领跌超4%,创业板人工智能ETF下挫逾2%回踩五日线,机构:算力仍处于快速发展周期中后续来了 8月1日保险日报丨城市商业医疗险新规下发,六大维度推动惠民保高质量发展!预定利率调降带动保险产品切换最新进展 东港股份:机器人产品已在政务、教育等领域实现落地交付,部分项目持续推进中,在手订单数量稳步增长官方处理结果 轿车新能源化加速,SUV市场自主品牌崛起丨2025年上半年轿车&SUV车型销量榜反转来了 生物制品上市公司董秘PK:辽宁成大邱闯成为业内唯一博士董秘 今年5月刚刚上任最新进展 原料药上市公司董秘PK:美诺华应高峰年接待投资者291次排名第五 年薪仅26.7万元 中药上市公司董秘PK:奇正藏药冯平年接待投资者超400次 2024年薪酬超130万元反转来了 东港股份:机器人产品已在政务、教育等领域实现落地交付,部分项目持续推进中,在手订单数量稳步增长 东土科技:今年公司智慧交通业务推进正常实测是真的 英维克:公司2025年半年度报告的预约披露时间是2025年8月19日 名创优品7月31日斥资24.42万美元回购5.12万股记者时时跟进 国信证券发布宁德时代研报:动储电池出货快速增长,产能扩张稳步推进 *ST天茂:天茂集团持有国华人寿51%的股份,持有华瑞保险60%的股份后续来了 中信期货:午盘点评8.1最新进展 宁波华翔:公司目前以关节总成和本体总成代工业务为主 原料药上市公司董秘PK:美诺华应高峰年接待投资者291次排名第五 年薪仅26.7万元又一个里程碑

一、问题

Unity引擎里对渲染后期处理效果很多,如Bloom、运动模糊、景深等效果。实现过程是在作用的摄像机上加脚本并实现OnRenderImage方法,Graphics.Blit(source, destination, material);使用材质material的shader处理帧缓存的数据,再拷贝回屏幕帧缓存。

使用ImageEffect之后,发现在某些机型上(华为mate7、三星N7100),运行效率极低,明显卡顿。UnityProfiler查看真机渲染情况

Unity ImageEffect 效率分析

二、调查分析

Unity文档并没有相关的详细介绍,实现的细节也不得而知。论坛里Camera.AAResolve解释为与抗锯齿有关系,关闭全屏抗锯齿之后测试,确实不会卡顿了。

Unity ImageEffect 效率分析

目前主流移动GPU由三家公司生产,英国Imagination公司的SGX系列,美国高通公司的Adreno系列,以及著名显卡芯片商美国NVIDIA公司的移动GeForce系列。Arm的mali作为非主流,但在市场上有不小的份额,华为Mate7、三星N7100的GPU正是mali系列。

使用Mali Graphics Debugger查看渲染如图:

Unity ImageEffect 效率分析

在前2个drawcall里都调用了glReadPixels接口

Unity ImageEffect 效率分析

在glReadPixels的最后个参数不为空,则表示数据从显存传输到系统内存,从CPU到GPU的逆向传输,这是非常缓慢的过程,并且是阻塞模式。

看看其它机型渲染情况,下面是高通的gpu,使用adrenoprofiler查看。

Unity ImageEffect 效率分析

它并没有调用glReadPixels,而是使用了glBindFramebuffer。FBO(Frame buffer object)在使用前需要绑定,voidglBindFramebuffer(GLenumtarget,GLuintid);第一个参数是指定绑定操作,读、写或可读可写。第二个参数指定绑定的对象,如果是0,则是默认的帧缓存对象。

这是使用了改变渲染目标缓存的方法。

由此可知不同硬件上处理的方式不一样,具体是因为Unity内部实现的原因或是硬件支持不够。查看opengl版本的版本历史和发展

Unity ImageEffect 效率分析

最大变化的版本是OPENGL3.0。其中正式把帧缓冲对象(framebufferobject)划入core profile;帧缓冲对象之间可以互相拷贝像素到持有的不同的render target,是性能上的提升。

在FBO中使用多重采样抗锯齿,在3.0版本才加入的特性,若渲染接口不支持,则用了比较低级的API来完成获取屏幕缓存数据,导致了卡顿。

我们项目使用的是OPENGL2.0,而mali系列并没有很好的支持OPENGL2.0的接口。

用OPENGL3.0导出apk运行在华为mate7(mali系列)上,是没问题的。

Unity ImageEffect 效率分析

Unity ImageEffect 效率分析

同样使用了改变渲染目标缓存的方法,因为3.0版本的FBO支持多采样。

三、问题结论

OPENGL2.0,ImageEffect屏幕后期处理时,改变渲染目标缓存,绑定FBO,若不在ProjectSettings里设置全屏抗锯齿是没问题的。若设置了全屏抗锯齿,不同硬件对不同版本OPENGL的支持不定。

四、解决方案

1、关闭抗锯齿。

2、提升OPENGL版本到3.0。

3、不使用unity的OnRenderImage方法,直接使用渲染到纹理的方法。

第一种方案效果有损失,不可取;第二种可行,但版本的提升可能会有些不可预估的问题,3.0版本也弃用了很多的特性;第三种最可行,渲染到纹理的方法在绝多数机型都支持。实现方法如下:

1、摄像机上挂接一个脚本

2、Start方法,temp =RenderTexture.GetTemporary获取渲染纹理

3、Update方法,设置Camera.targetTexture= temp;

4、OnPostRender方法,设置Camera.targetTexture=null;Graphics.Blit(temp, null, material);

运行结果:

Unity ImageEffect 效率分析

Unity ImageEffect 效率分析

相关文章