Unity ImageEffect 效率分析

Unity ImageEffect 效率分析

作者:news 发表时间:2025-08-22
瑞银:升众安在线目标价至22.3港元 星展:升华润啤酒目标价至38港元 维持“买入”评级官方处理结果 华为nova 14 Ultra手机,天猫优惠价3309元后续会怎么发展 官方处理结果 星展:升华润啤酒目标价至38港元 维持“买入”评级 保利天奕三批次认购率 95.9%!170㎡楼王为唐镇8年难遇?官方已经证实 航旅纵横杀入机票直销市场 民航版“12306”能否撼动OTA江湖?后续会怎么发展 优布局、提品质 越秀服务基础物管增速“四连升”最新进展 华为nova 14 Ultra手机,天猫优惠价3309元又一个里程碑 分期支付公司Zip:拟赴美双重上市,美区收入占比逾八成 优布局、提品质 越秀服务基础物管增速“四连升”秒懂 DeepSeek 一句话让国产芯片集体暴涨,背后的 UE8M0 FP8 到底是什么太强大了 从“促和”到“促攻”,短短四天特朗普对乌克兰立场急转,油价有望终结两周连跌专家已经证实 华为nova 14 Ultra手机,天猫优惠价3309元 优布局、提品质 越秀服务基础物管增速“四连升”后续来了 福建大田一煤矿发生井下作业人员伤亡事件 致7人死亡 燃爆了!A股连续8日成交超2万亿元!资金爆买金融科技!159851猛冲3%续刷新高,净申购超4亿份专家已经证实 惠民保陷可持续发展“困境”,普惠保险经营难待解后续反转来了 会稽山热度爆了,为何业绩没爆发? 北大医药:上半年归母净利润同比增长15.51%记者时时跟进 四川屏山农商行被罚64.1万元:因个人结算账户未备案和超期备案等 光峰科技:仲裁事项落定轻装上阵,光博会将携前沿技术亮相实时报道 南京银行:拟于9月5日派发优先股现金股息每股4.07 元学习了 紫金银行:聘任阙正和为行长,兼任首席合规官官方处理结果 尹艳林:应构建大中小银行协同发展的生态体系 实测是真的 南京银行:拟于9月5日派发优先股现金股息每股4.07 元实垂了 防御性上涨行情中核心宽基、泛红利和债券仍有关注价值——银华投顾每日观点2025.8.21实时报道 莱尔科技半年报:营业收入为3.84亿元,同比上升69.4%官方通报 关岭恒升村镇银行被罚24万元:未按规定对异常交易进行人工分析、识别,排除理由不合理 四川屏山农商行被罚64.1万元:因个人结算账户未备案和超期备案等后续来了 REDMI Note 15 Pro+上手:品质小金刚 屏幕续航通讯都升级学习了 晨丰科技股东方东晖减持335万股完毕 惠民保陷可持续发展“困境”,普惠保险经营难待解专家已经证实 惠民保陷可持续发展“困境”,普惠保险经营难待解最新进展 张卫滨新任玉禾田董秘兼副总,10天前刚从ST中珠离职年薪73万,到新公司能否年薪百万?又一个里程碑 尹艳林:应构建大中小银行协同发展的生态体系科技水平又一个里程碑 金山办公(688111)6月30日股东户数3.05万户,较上期增加2.78%学习了 百奥泰(688177)6月30日股东户数0.95万户,较上期增加11.2% 奥普特(688686)6月30日股东户数0.6万户,较上期减少13.18%专家已经证实 8月21日新光光电发布公告,股东减持18万股官方通报来了 A股火爆,开户升温!券商转挖“睡眠账户” ETF躺赢 四方科技(603339)6月30日股东户数2.07万户,较上期减少4.94%实垂了 老将“老鼠仓”倒亏、投资经理操纵市场!国寿安保基金员工为何老出岔子?实测是真的 贤丰控股(002141)6月30日股东户数4.12万户,较上期增加46.7%又一个里程碑 小鹏汽车(XPEV)盘前涨1.08% 机构指一车双能车型有望带动销量持续增长是真的吗? 回收二手机4年亏3亿,闪回科技身背对赌闯港股IPO学习了 裕太微罢免90后女董秘:权力博弈下的资本暗涌专家已经证实 英国面临财政紧缩之际 央行仍具降息空间专家已经证实 今日煤市快讯 空港股份(600463)6月30日股东户数2.23万户,较上期增加55.55%学习了 三未信安:上半年归母净亏损2938.58万元,同比由盈转亏反转来了 唐晓斌卸任广发多元新兴,任期5年半仅赚1%跑输基准12%,亏损金额4.18亿元收取管理费2.66亿元是真的吗? 汉马科技(600375)6月30日股东户数3.9万户,较上期增加85.72%官方已经证实 四方科技(603339)6月30日股东户数2.07万户,较上期减少4.94%科技水平又一个里程碑

一、问题

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 效率分析

相关文章