shzlq 发表于 2024-7-15 18:16

Unity手机游戏发烧发烫优化指南与技巧

前言

很多小伙伴做完游戏后,发布到Android,运行,游戏很流畅,也不卡顿,但是跑一会游戏,手机就发烧,发烫。客户提出需求,能否让它不发烫? 本文从以下3方面来分析手机发烫的问题,给大师提供一个解决此类问题的通用思路:
(1) 手机发烫是如何引起的?为什么要解决发烫问题?
(2) 如何定位手机发烫的问题?
(3) 针对性常用优化手段与策略?


1手机发烫是如何引起的?为什么要解决发烫问题?
手机可以理解为是一台小型的电脑, 里面运行了很多app。CPU措置完数据和事件后,如果没有任务要措置了,就会休眠下去, CPU占用率也就会下降。休眠下去了,CPU不工作或工作在低功耗模式下了,消耗的电流就没有那么大了。手机电路也会有电阻,电阻+电流就会转化为热能(热能=I*R^2),热能会通过手机的散热导热系统从外壳散去。长时间CPU的工作,就会导致长时间的高负荷电流,从而导致发生大量的热能,如果热能的发生速率大于热能散发的速率,手机概况温度就会升高,也就是我们说的发烫。
接下来说一个”低温烫伤”的概念,长时间握住一个高于人体体温的低热物体,会容易形成低温烫伤。一般低温烫伤容易发生的温度在42~51度。基本上40,42摆布就是一个临界点,最好我们的长时间游戏的手机温度要低于42。如果玩家长时间握住一个发烫的手机玩游戏,有可能导致玩家低温烫伤,玩家可以通过法令手段来告游戏公司索取抵偿。所以游戏公司要解决长时间游戏手机发烫的问题,避免玩家呈现低温烫伤。
“手机发烫”的本质是CPU”很努力不休息”的工作才能保证游戏app的流畅运行,达到额定的帧率。而这个过程中发生热量的速度大于散去热量的速度。所以手机发烫的本质还是CPU措置的事情较多,本质还是要提升法式的性能,让法式能更快的完成从而让CPU有机会休眠或低功耗运行,从而让手机不发烫,所以解决手机发烫的本质问题还是优化提升手机游戏app的代码性能。


2 如何定位手机发烫的问题
颠末上面的分析,虽然游戏不卡,但是CPU长时间满负荷的工作导致手机发烫,问题本质还是性能优化问题。所以本质还是性能优化的问题。定位手机发烫问题和定位性能问题大体思路与措置方式一样的。接下来我给大师分析几个常用的定位问题的方式和方式。
(1) 真机运行游戏进程,查看游戏进程的CPU占用率。当遇到手机发烫的问题,我们必然要先看以下真机的CPU占用率,一般CPU总占用率必定超过>80%以上才会有明显的手机发烫现象。如果手机的总CPU占用率>80%, 而游戏进程的CPU占用率斗劲低,其它此外进程的CPU占用率斗劲高,可以具体分析以下,可能是此外app法式导致的,和你的游戏app并没有直接的关系。
(2) 手机游戏开发的时候往往会按照游戏的”视觉品质”来进行配置,分为最高等的画质与特效效果,中等画质与特效效果,低端画质与特效效果。我们首先要将用户的机器进行分类,分成高中低三个档次,每个档次的机型我们适配匹配好对应的效果和特效。比如,高端机上跑高质量,中端机跑中质量,低端机跑低质量。当我们接收到用户反馈的手机发烫的时候,首先要按照手机来判断属于哪一档,来进行措置。比如低档机跑高质量的画质必定会发生卡顿与发烫,这个时候我们要把对应的画面质量与对应的性能做到匹配,做到每个档次的机器在对等的画质上能做到不发烧。不要呈现机器与画质不匹配与对等的情况。如果呈现发烫,我们要统计出来是阿谁档次画面的哪种机型。比如中画面质量在中档手机上发烫。有时候我们一个档次的画面来适配全部的高中低端机,那么这个时候可以考虑将画面参数进行调节来适配。
(3) 如果同一个档次画面质量在同一档的机型上发烧,那么就是性能优化的问题了。我们能做的就是提升法式的性能,让CPU有更多的休眠时间,从而解决发烧。做性能优化定位问题的时候我们要确定好是哪个部门占用的CPU+GPU资源导致发烧。一个一个模块的排查: 衬着模块,物理引擎模块,逻辑算法模块,其它,排查的时候,我们一般会一个一个的内容重建,比如,排查衬着模块,我们可以只做衬着,做同等规模的游戏地图与衬着单元,查看运行成果,分析CPU占用率,看是否引起发烫。物理引擎模块可以通过增加和减少物理计算单元来定位是否为物理引擎的问题。隔离掉逻辑算法代码,看CPU占用率是否有改善。如此按照本身的游戏逻辑逐步定位性能热点。
(4) 在游戏开发项目中,越早进行机器的性能测试,是否发烧等指标,能辅佐我们快速的定位是插手了哪些功能导致了机器发烧,同时测试机器最好都筹备几个有代表性高中低端手机。一般我们做项目的时候,每个礼拜城市完整的真机测试有代表性的机器。
(5) 超规模的资源占用,导致OS操作系统的系统进程CPU占用率飙升。比如系统的内存时1G,你游戏的内存占用了2G,这样可能会导致操作系统不竭的与磁盘swap进行数据交换释放物理内存来满足内存访谒,从而导致系统承担过重,系统进程处事的CPU占用率飙升,导致手机发烫。
3 针对性常用优化手段与策略?
接下来给大师列举一些针对性的优化标的目的供大师参考和指导,每一项优化都有很多资料,具体的操作大师可以查找相关的资料,或者查阅我们往期相关的优化技巧。
(1) 做好高中低端机型的适配, 高端手机上高端效果,低端手机上低端效果,比如高端手机正常,低端手机发烫,可以针对低端机考虑封锁光照计算,封锁暗影计算,切换一些更简单的shader, 封锁一些特效。 指定一些法则,然后游戏运行后自动判定分类手机的类型,来开关相关的参数。
(2) 调整以下方针运行时候的最高FPS, 默认情况下游戏引擎控制FPS在60摆布,如果我们中低端机所有的优化已经搞完了,虽然画面流畅,但是手机还是发烫,就可以看下游戏运行中实际的FPS,如果游戏的实际FPS 超过了一个流畅运行的最低限制(一般是30FPS),可以考虑按照机型适配游戏的最高FPS为30,这样导致的成果就是CPU拼命的工作让实际帧率维持在60FPS,你减少最高帧率到30FPS,这样CPU帧率到了30就可以休眠一点时间,从而维持流畅的情况下减少发烧。
(3) 衬着常用的优化手段: 优化衬着规模,使用增强细节的手段来代替模型面数,提升shader性能。空间换时间来提前预制烘培,合并drawcall, 减少set pass call,优化动画组件将顶点动画烘培到纹理中。等等。
(4) 物理引擎的常用优化手段: 改削物理引擎迭代计算的参数,降低刚体迭代的数目,使用更高效的方式替代物理引擎。等等。
(5) 优化数据布局内存占用与算法: 缓存池减少节点反复大规模的删除与创建,优化算法,降低算法复杂度,空间换时间(预先计算好成果存储起来,运行时查表即可),时间换空间,多线程优化等。可以把部门的计算放到GPU中。等等。
定位好问题,当真分析后针对性的来解决对应的点就可以了。我们大部门的同学不会做性能调优主要是问题定位没有思路,定位不准确,技术手段不熟练,从而导致了找不到问题,找到了问题不知道下什么手段。存眷我们可以获得更多性能调优的文章与课程。
更多教程视频
页: [1]
查看完整版本: Unity手机游戏发烧发烫优化指南与技巧