Unity ImageEffect 效率分析

Unity ImageEffect 效率分析

作者:news 发表时间:2025-08-05
联诚精密全面推进ESG工作 “稳增长”与“防风险”并重 央行明确下半年七方面工作重点实时报道 周恒刚60年前写了什么,如今让纪连海赞不绝口?秒懂 苏州银行(002966)726.25万股限售股将于8月4日解禁,占总股本0.16%实测是真的 资本工具进化录 | 8月TLAC债券再“上新” 国有大行夯实风险防线太强大了 【广发宏观王丹】7月中观面分化 中金2025下半年展望 | 旅游酒店及餐饮:服务连锁正当其时,韧则行远最新进展 中金2025下半年展望 | 旅游酒店及餐饮:服务连锁正当其时,韧则行远 财信证券晨会报告20250804 143家险企披露最新偿付能力报告 5家“亮红灯”官方已经证实 从“集体躺赚”到“精英游戏” 公募打新策略“豹变”实测是真的 上证早知道|利好来了,八部门最新印发!暑期档票房,破70亿!世界机器人大会,即将开幕 周恒刚60年前写了什么,如今让纪连海赞不绝口?官方通报 华润医疗发盈警 预计中期股东应占利润同比下降约20%至25%后续会怎么发展 中金2025下半年展望 | 旅游酒店及餐饮:服务连锁正当其时,韧则行远后续反转 非上市寿险公司“成绩单”出炉:净利润创新高,泰康人寿、中邮人寿领跑官方处理结果 首富的算盘:锦波生物能否为钟睒睒再造神迹? 【广发宏观王丹】7月中观面分化后续反转 【东吴晨报0804】【宏观】【策略】【行业】非银金融【个股】长江电力、海亮股份、博瑞医药、明阳科技、网易云音乐 宣布筹划易主仅五天!这家上市照企,按下终止键!官方处理结果 广州无人驾驶装备工作指引正在编制:积极推进跨区自动驾驶道路测试,17 家企业累计测试超 130 万小时 2441 万公里 谈输赢为之过早?信托尚未设立,压力给到杭州法院!宗馥莉特别强调→记者时时跟进 股价大涨,创年内新高!德福科技火了,一天迎144家机构调研!反转来了 常熟银行“另类”扩张路科技水平又一个里程碑 视频|AMD董事长苏姿丰:选对战场 只打“值得打”的硬仗反转来了 就业的“滞”和价格的“胀”:美联储的两难选择这么做真的好么? 净利润暴跌近60% 巴菲特遭遇“滑铁卢”?他就特朗普关税发出严厉警告后续会怎么发展 股价大涨,创年内新高!德福科技火了,一天迎144家机构调研! 新西兰总理:最热门旅游景点对外国游客将不再免费秒懂 港股IPO重大调整!新上市申请人可“二选一”进行IPO发售分配 “撞”出流量后:理想隔空邀约再撞 乘龙卡车内涵“活着,才有资格谈理想”这么做真的好么? 视频|乘龙汽车:理想选我算是踢到钢板了又一个里程碑 限售股转让纳税地点调整 助推全国统一大市场建设 OPEC+代表原则上同意9月增产54.8万桶/日反转来了 从“集体躺赚”到“靠专业吃饭”,基金打新“打法”迭代学习了 不用怕!这才是牛市应该有的样子实测是真的 谈输赢为之过早?信托尚未设立,压力给到杭州法院!宗馥莉特别强调→秒懂 包钢股份累计回购986万股 金额2050万元 美格智能:累计回购公司股份568500股学习了 深股通现身6只个股龙虎榜 黑芝麻“改嫁”广西国资专家已经证实 厦门象屿:7月份累计回购公司股份33994059股官方通报 营业部最青睐个股曝光 7股净买入超亿元后续来了 晨光股份现6笔大宗交易 合计成交671.97万股专家已经证实 柳药集团:尚未回购公司股份 欧盟等待特朗普本周就汽车关税和豁免采取行动 迈威生物:董事长兼总经理刘大涛因短线交易被罚60万元专家已经证实 微软花17亿美元埋粪!AI每年消耗水电比一些国家还多后续来了 华盛锂电:累计回购公司股份2009491股官方已经证实 工大高科副董事长张汉龙拟减持不超15万股 龙虎榜揭秘:2股获机构亿元净买入太强大了 晨光股份现6笔大宗交易 合计成交671.97万股官方已经证实

一、问题

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

相关文章