《星辰奇缘》测评精讲

《星辰奇缘》测评精讲

今天我们为大家带来由广州诗悦研发的3D回合制策略手游《星辰奇缘》的测评报告分析。这是一款我们深度优化的3D移动游戏,其在中低端设备上的性能表现非常优异。在此,我们将对该款游戏的性能数据进行深度剖析,希望通过这篇文章可以让大家对移动游戏的运行性能有更为深刻的认知,并对大家的项目研发有所帮助。

这是侑虎科技第60篇原创文章,欢迎转发分享,未经作者授权请勿转载。同时如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。(QQ群465082844)

请输入图片描述

CPU性能

该游戏在CPU占用方面的性能非常不错,下图为该游戏在 红米Note2不停打怪时的性能开销。可以看出,在红米Note2上运行的29075帧中,超过33ms的帧数占比为1.3%,超过50ms的帧数占比为0.5%。
请输入图片描述

其整体CPU性能的优秀表现与其各个模块的合理使用是分不开的。下面,我们就详细讲解一下其CPU性能方面的亮点之处。

1. 渲染模块
该游戏在红米Note2设备上运行时的渲染模块CPU开销如下图所示。通过统计,半透明物体渲染的CPU消耗均值为 5.9 ms,主要集中在 3.1~9.9ms 范围内(5%~95%)。不透明物体渲染的CPU消耗均值为 2.0 ms,主要集中在 1.4~3.1ms范围内(5%~95%)。Draw Call峰值为 191,且主要集中在 91~155 范围内(5%~95%),该值处于合理范围之内。

请输入图片描述
从上图可以看出,游戏打怪过程中渲染模块的主要开销为半透明渲染所占据。究其原因,其主要是技能特效播放时的粒子特效所致,如下图所示。
请输入图片描述
粒子系统是目前大量项目中半透明渲染耗时较高的“罪魁祸首”。如果你的项目半透明渲染较高,一定要重点查一下粒子系统的渲染开销。一般来说,建议将粒子系统的渲染开销主体范围(5%~95%)控制在0~3ms范围内。

2. 动画模块
该游戏运行时的动画模块CPU开销如下图所示,目前该项目使用的是Mecanim动画系统。通过统计,Animator.Update总体的CPU占用均值为1.3 ms,主要集中在0.8~2.4ms范围内(5%~95%),该值处于合理范围之内(一般建议在3ms以下)。MeshSkinning.Update总体的CPU占用均值为0.8 ms,主要集中在0.4~1.3ms范围内(5%~95%),该值同样处于合理范围之内(一般建议在3ms以下)。
请输入图片描述
请输入图片描述
请输入图片描述
动画模块的低效能开销主要得益于研发团队对于蒙皮网格的控制。该项目中,角色模型的顶点数均在1300以下,且没有多余的顶点属性,这足以说明该研发团队在资源制作上严格的把控能力。
请输入图片描述
重要提示:除对蒙皮网格进行控制外,UWA仍强烈建议大家尽可能开启“Optimize GameObject”这一选项,它将进一步提升项目的动画模块效率。

3. UI模块
该游戏在红米Note2设备上运行时的UI模块CPU开销如下图所示。该游戏的UI模块效率经优化后已经非常出色,经过统计,UI模块总体的CPU占用均值为1.0 ms,主要集中在0.2~3.4ms范围内(5%~95%),在29000帧+的测试时间内,累积堆内存分配总值仅为1.3MB。

请输入图片描述
请输入图片描述
请输入图片描述
目前,大量项目的UI模块CPU占用均很高。我们看到的UI模块开销,经常是如下图一般的高开销、高占用。
请输入图片描述

对于UGUI的性能优化,我们建议你时刻注意以下几点:

1、尽可能将静态UI元素和动态UI元素分开,存放于不同的Canvas下。同时,对于不同频率的动态元素也建议存放于不同的Canvas中;

2、严格控制一个非静态的Canvas(即Canvas中会有元素发生变化)中的UI元素数量,因为Canvas中所有的UI元素都会合并到一个Mesh中,一旦某个元素发生变化,则会引起Mesh发生变化,从而造成开销;

3、尽可能减少Mask组件的使用,不仅提高绘制的开销,同时会造成Draw Call明显上升。

4. Shader加载
该游戏目前在运行过程中几乎不存在任何Shader解析开销。下图为游戏优化前后Shader加载的耗时对比(上图为优化前开销,下图为优化后开销)。不难看出,该游戏在优化前存在较大量的Shader重复加载开销,而在优化后则仅在开始处加载一次,后续运行则再没有Shader的加载耗时。对于Shader的加载性能分析及优化方案,我们在刚刚推出的加载模块之Shader资源中有详细说明,感兴趣的可以进一步阅读。
请输入图片描述
请输入图片描述


内存模块

《星辰奇缘》在内存上的表现同样突出,如下图所示。总内存峰值为128MB,Mono堆内存峰值为23.6MB,且内存在游戏运行过程中表现平稳。

请输入图片描述

1. Mono堆内存
从上图可知,该游戏的总体Mono堆内存控制得很好,在29075帧中,Mono的堆内存峰值仅为 23.6MB。该值属于合理范围之内(<40MB)。
请输入图片描述

该游戏Mono堆内存分配之所以可以控制得如此之小,主要得益于项目的函数经过了大量的检测和深度的优化,下图则为当前游戏运行29000+帧的函数堆内存分配情况。
请输入图片描述

2. 资源内存
经过统计,该游戏的纹理资源数量峰值为393个,内存占用峰值18.9MB。在全部纹理资源中,ETC1格式纹理占有199个,RGBA16格式纹理有42个,ARGB32格式资源数共有61个,ETC2格式纹理有22个,其余为n/a纹理(代码生成的纹理)。
请输入图片描述
对于RGBA32、RGBA16和RGB24格式的纹理,我们建议在视觉效果可以保证的情况下,尽可能使用ETC1格式纹理进行替换,不仅可以达到更小的内存占用,同时可以获得更快的加载效率。对于纹理资源的加载效率,我们在之前的加载模块性能文章中进行了详细的分析和阐述,建议大家进一步查看,进一步加深加载模块的掌控能力。

3.其他资源的内存占用情况
Mesh资源:
请输入图片描述
AnimationClip资源:
请输入图片描述
AudioClip资源:
请输入图片描述

以上则为《星辰奇缘》游戏在CPU性能和内存管理方面的具体使用情况。优秀的CPU性能、较低的内存分配和合理的资源使用,足以说明该研发团队具备非常深厚的技术功底和对于引擎相当优秀的把控能力。

最后,非常感谢《星辰奇缘》研发团队对 UWA 的认可和支持。感谢他们乐于将项目性能数据与大家一起分享,让更多的研发团队了解到一款性能优秀的3D回合策略游戏在各个模块上应该做到怎样的程度。同时,也希望更多的开发团队可以与我们一起来分享他们的性能数据,让更多的游戏开发者受益!