【求知探新】独立游戏《Abi》场景耗时分析

【求知探新】独立游戏《Abi》场景耗时分析

【求知探新】是UWA新推出的栏目。在UWA团队做性能优化的过程中,常常会遇到一些未知的问题,在这里我们将分享UWA研究这些问题的完整过程。当然需要说明的是,一个好的问题没有标准的答案,在此也欢迎大家来积极拍砖!


今天我们分享的内容,是来自当下热门的独立游戏Abi,该游戏由莉莉丝开发,目前在Taptap上已获得9.6的高分。在测试该项目时,我们发现了其在中低端手机上帧率较低,且设备发热较为严重。通过和研发人员的沟通,我们剖析了导致该问题的原因,并将分析过程和解决方案在此分享。


一、问题描述

游戏在该场景下测试时,中低端设备上的表现为帧率较低,且设备发热较为严重。

请输入图片描述


二、问题复现

针对研发团队提供的例子,我们进行了研究分析,并在低端设备上(红米2 & 红米Note2)复现了该问题,具体CPU耗时如下图所示,无论是红米2还是红米Note2,其帧率均在25帧以下。

请输入图片描述
红米2:Gfx.WaitForPresent – 平均46ms

请输入图片描述
红米Note 2:Gfx.WaitForPresent – 平均31ms


三、问题分析

Gfx.WaitForPresent在低端机上持续过高,这可以说明目前的性能瓶颈是在GPU上,而非CPU上。对此,我们对其场景进行了检测,发现如下:

(1) Android端已经关闭AA功能;
(2) 场景中存在两个Realtime的Directional Light,且均开启了实时阴影;
(3) 场景中存在5~6个Realtime的Point Light。

从检测结果来看,场景中实时光源过多,是GPU压力过大的主要原因。因此,我们对其进行了测试,我们只保留场景中一个Directional Light为Important光源,而其他光源均设置为Not Important,其在红米Note2设备上的性能开销如下图所示。Gfx.WaitForPresent已经降低到平均14ms,且帧率已经被稳定在45FPS。

请输入图片描述

同时,我们也尝试关闭一个Directional Light的实时阴影,但性能提升不明显,这说明该阴影并不是GPU端的主要压力。

另外,我们也测试了两种不同情况下的设备耗能情况。在未优化的情况下,移动设备(测试设备为小米5S)的耗电率为20.07%/小时,在只保留一个Important Directional Light时,移动设备的耗电率下降到16.44%/小时,即设备耗能节省了20%。


四、结论

从上述分析可知,当前游戏场景在中低端设备上帧率较低、发热较快的主要原因是GPU性能压力过大,而根本原因是场景中使用了过多的Realtime光源。对此,建议研发团队根据实际情况,尽可能控制场景中的Important实时光源数量,从而降低GPU的性能压力。


文末,感谢Abi团队对于UWA团队的认可,并同意将以上研究过程中的性能数据在此分享。同时,我们也欢迎大家在UWA问答社区(answer.uwa4d.com)积极提交研发过程中遇到的问题。也许随着时间的流逝,科技的进步,答案将变得廉价,但问题会变得更有价值,因为提问和研究将比回答更有力量。

PS:安利这款超暖心的游戏,已经可以在TapTap上预约了哦~
请输入图片描述

  • Techniques for Game Development 21 发表在 3月11日 回复

    [...]Is the “accepting light” mentioned in the main description of the subject referring to Real time lighting? If so, then this performance overhead is unpredictable because it has a lot to do with the co[...]