Unity ImageEffect 效率分析

Unity ImageEffect 效率分析

作者:news 发表时间:2025-08-12
澳大利亚称计划承认巴勒斯坦国 新西兰也在作此考虑最新报道 冀东水泥拟变更公司名称及证券简称为“金隅冀东” 龙头券商发力?东方财富涨超3%,“牛市旗手”券商ETF(512000)明显放量,国盛金控触及涨停实垂了 港股建材水泥股拉升 西部水泥录得7连涨 水泥行业盈利水平有望持续修复后续来了 中金:首予康耐特光学跑赢行业评级 目标价54港元官方已经证实 永顺煤矿网络竞价销售公告官方通报 永顺煤矿网络竞价销售公告官方已经证实 永顺煤矿网络竞价销售公告官方通报来了 宁德时代旗下锂矿停产 碳酸锂期货、锂矿股“大爆发” 大摩:调整部分内地消费品股目标价 H&H国际控股有较高重评可能性 汇量科技早盘涨逾11% 机构看好程序化广告仍保持较高增长 5年前在上海的一次“大胆”出手,融创为自己留下一线生机实测是真的 大摩:调整部分内地消费品股目标价 H&H国际控股有较高重评可能性 紫光股份港股上市收到证监会反馈意见:控股股东西藏紫光通信的100%股权被质押,是否会导致重大权属纠纷 金融时报:英伟达和AMD上缴15%的龙国AI芯片收入,换取特朗普“放行” 最新进展 AI安全受关注!《龙国AI安全承诺框架》发布,大数据产业ETF(516700)盘中涨超1.6%,资金逐步进场布局!这么做真的好么? 招银国际:降和黄医药目标价至31.39港元 维持“买入”评级是真的吗? 东海研究 | 晨会纪要20250811实垂了 东海研究 | 晨会纪要20250811官方已经证实 AI安全受关注!《龙国AI安全承诺框架》发布,大数据产业ETF(516700)盘中涨超1.6%,资金逐步进场布局!科技水平又一个里程碑 原木期货首个合约完成交割圆满收官后续反转 通用设备行业财务总监CFO观察:宝鼎科技丛守延违规收到2次警示函 2024年薪酬为50万元学习了 通用设备行业财务总监CFO观察:迈拓股份韩旭为硕士学历 薪酬仅17万元为行业内倒数第二太强大了 本轮成品油零售限价调整或搁浅 年内已六涨六跌三搁浅 星动纪元陈建宇:通用机器人是AI应用的下一个趋势,未来必将给生产力带来革新 总投资550亿元!全球首条搭载无FMM技术的第8.6代AMOLED生产线主厂房顺利封顶 通用设备行业财务总监CFO观察:恒锋工具郑继良中专学历为行业内学历最低 2024年薪酬为25万元 通用设备行业财务总监CFO观察:迈拓股份韩旭为硕士学历 薪酬仅17万元为行业内倒数第二 大唐电信监事会老大拟被罚200万,曾任职的高鸿股份涉嫌信披违法违规官方通报 金融壹账通加快车生态平台国际化布局,技术输出助力汽车金融服务智能升级 7月比亚迪销量为34.4万辆,市场份额达13.6%居新能源车企首位最新报道 通用设备行业财务总监CFO观察:致远新能周波年龄63岁为行业内最年长 2024年薪酬为61万元是真的? 锂矿重磅,“宁王”承认停产,融资资金抢筹股曝光又一个里程碑 利好突袭!一则停产消息彻底引爆!碳酸锂股期掀涨停潮!最新报道 反超OpenAI,百川宣布开源医疗大模型发布 利好突袭!一则停产消息彻底引爆!碳酸锂股期掀涨停潮!专家已经证实 百亿私募格局再生变!量化军团扩容,最新业绩出炉最新进展 专业服务行业财务总监CFO观察:安车检测李云彬违规收2次警示函 归母净利润下滑264% 薪酬75万元较前一年涨7%学习了 仙工智能港股IPO收证监会反馈意见:需说明技术出口、外资准入及股权激励等问题实垂了 蚂蚁集团否认与央行共建稀土人民币稳定币实测是真的 美联储重磅!降息概率89.4%?后续反转 反超OpenAI,百川宣布开源医疗大模型发布 闫瑞祥:美指短期关注上行 欧美日线支撑得失成关键后续会怎么发展 专业服务行业财务总监CFO观察:零点有数刘升违规收到1次警示函 2024年薪酬为79万元 高瓴创投布局卡牌市场 “闪魂”完成数亿元首轮融资官方已经证实 降息变政绩?工党染指英国央行独立性,英镑恐步美元后尘 与龙国人民银行、龙国稀土集团共建全球首个稀土人民币稳定币?蚂蚁集团辟谣官方已经证实

一、问题

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

相关文章