Unity ImageEffect 效率分析

Unity ImageEffect 效率分析

作者:news 发表时间:2025-08-04
无视特朗普惩罚威胁?印度称继续进口俄石油实时报道 视频|乘龙汽车:理想选我算是踢到钢板了 特朗普:佩洛西是靠内幕信息发家的,她应该受到调查学习了 视频|东风汽车发言人吕海涛:支持东风柳汽依法维护自身权益,反对不正当竞争后续来了 下周关注丨7月CPI、PPI数据将公布,这些投资机会最靠谱 国家疾控局局长赴佛山指导基孔肯雅热疫情防控工作 宗庆后遗产纠纷案香港高院裁决全文 限售股转让纳税地点调整 助推全国统一大市场建设这么做真的好么? 无视特朗普惩罚威胁?印度称继续进口俄石油实测是真的 新能源车企,最新成绩单来了是真的? 雷军:在辅助驾驶技术上投入很大记者时时跟进 慈星股份,终止重组!超30亿港元,南向资金爆买科技巨头是真的吗? 雷军:在辅助驾驶技术上投入很大后续反转来了 日本农林龙国金库CEO承诺在美债投资亏损约120亿美元后将更加谨慎 巴拿马可能收回运营权,长和港口交易面临新变数是真的? 下周关注丨7月CPI、PPI数据将公布,这些投资机会最靠谱 上市以来最高大涨869%!北交所7只新股首日涨幅超150%实垂了 印度总理莫迪呼吁民众购买本土产品 美股散户投机泡沫重现?这次可能有所不同后续反转来了 2024年度A股CFO数据报告:坤恒顺维CFO牟兰薪酬涨8.42%,股价跌64.13%!业绩双降+股价腰斩 高薪合理性引质疑 文远知行Q2财报解码:当Robotaxi跑出836%增速,自动驾驶商业化拐点到了? 东风柳汽再度回应乘龙卡车碰撞测试事件:场景、设备与实际交通情况存在极大差异 长虹华意回购144万股 金额1020万元这么做真的好么? 长虹华意回购144万股 金额1020万元又一个里程碑 2024年度A股CFO数据报告:兴齐眼药股价暴跌61.73%,财务总监程亚男薪酬涨10.67%又一个里程碑 8月行情怎么看?清洗浮筹+倒车接人?创业板人工智能ETF(159363)获资金净申购8000万份!专家已经证实 挪威贸易部长:仍在与美国进行关税谈判实时报道 龙国人民银行开通国库资金汇划“绿色通道” 支持防汛抢险救灾 2024年度A股CFO数据报告:天宜新材股价跌幅65.98%,财务总监侯玉勃薪酬涨20.80%太强大了 2024年度A股CFO数据报告:索辰科技CFO杜莉薪酬大涨18.08%,股价同期跌幅达60% ETF日报:作为市场中交易量最大的单一债券品种,十年期国债规模与流动性占据绝对主导,关注十年国债ETF 天宜新材预计上半年约亏损1.9亿元至2.4亿元 同比减亏51.3%至61.44% 8月行情怎么看?清洗浮筹+倒车接人?创业板人工智能ETF(159363)获资金净申购8000万份!这么做真的好么? 7月机构最新调研动向曝光!后续反转 天宜新材预计上半年约亏损1.9亿元至2.4亿元 同比减亏51.3%至61.44%后续来了 2024年度A股CFO数据报告:华恒生物股价跌74%,财务总监樊义薪酬大涨48%达162万 亚马逊股价下跌,分析师称可逢低买入最新进展 午盘:美股继续走低 科技巨头股价普遍下跌学习了 W.W.Grainger公司二季度营收超预期 每股收益略逊预期记者时时跟进 行业稳健增长背后冷热不均 期货公司积极寻求突围之道后续会怎么发展 宗氏信托资产界定有争议!宗馥莉:非21亿美元本金,仅其利息 午盘:美股继续走低 科技巨头股价普遍下跌 Instagram现要求用户至少拥有1000名粉丝才能进行直播记者时时跟进 国家发展改革委:第四批690亿元消费品以旧换新资金10月份下达是真的吗? 国家外汇局召开下半年外汇管理工作交流会 适时开展逆周期调节 维护外汇市场稳定太强大了 桂浩明:险资缘何频繁举牌上市公司? 桂浩明:险资缘何频繁举牌上市公司?是真的吗?

一、问题

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

相关文章