2017 Unity手游体检蓝皮书 — ARPG篇

简介:

一、ARPG手游总体性能开销分析

请输入图片描述

iOS设备的CPU性能普遍高于Android设备,Android设备的CPU均值主体范围为12.4~66.2 ms,iOS设备的CPU均值主体范围为7.0~57.5 ms。

我们选择了测评次数最多的四款机型来进行统计,这四款机型分别是红米2、红米Note2、华为6Plus和三星S6。

请输入图片描述
请输入图片描述

1)大部分ARPG手游在中低端设备的性能开销较高,在Android设备上,CPU耗时集中在17~50ms区间,而在iOS设备上,CPU耗时集中在33ms以内。
2)相较2016年同期,2017 Q2 ARPG手游在低端设备上的CPU开销均值增长5.8 ms。

请输入图片描述

无论是高、中、低端的Android设备,渲染、UI、加载/代码都是需要研发团队重点关注的,它们的消耗总和占了总开销的80%。

下面我们就来具体分析这些主流模块的开销情况。


二、ARPG手游CPU模块性能开销分析

1、渲染模块

严重程度:地狱

为了能够更好地反映出各个性能参数的整体使用情况,我们统计了每种性能参数的主体使用范围,其范围区间是[5%~95%],以下数据中P5代表5%,P95代表95%。

请输入图片描述

在Draw Call使用上,ARPG手游的使用程度略低于MMORPG手游,且对Draw Call的控制同样较高,UWA建议Draw Call占用的P95 < 200,76.3%的项目可以将其控制在这个范围内。

请输入图片描述
请输入图片描述

1)ARPG手游的场景渲染三角形面片数量普遍较高。且设备性能越高,数量峰值越高。经过统计,在中低端设备中,46.5%的项目能将渲染三角形面片数控制在100K以下。
2)ARPG游戏的场景复杂程度明显低于MMORPG游戏,渲染面片峰值要比MMORPG手游平均低50K。同时,虽然2016 Q4和2017 Q1渲染面片数量大幅上升,但2017 Q2开始回落趋势较为明显。

请输入图片描述
请输入图片描述

Graphics.Bilt操作平均每次调用的CPU耗时主要分布在: 0.1~8.5ms。该项CPU开销在低端设备上的上升趋势较为明显,但在2017 Q1大幅下降。这主要是因为,在2017 Q1后,ARPG项目普遍开启了多线程渲染功能。

2、UI模块

严重程度:地狱

请输入图片描述
请输入图片描述

使用NGUI作为UI解决方案的项目占据了较高的比例,但从趋势上来看,UGUI从2016 Q3开始,增速非常明显。通过进一步分析,我们发现近大半年来的新ARPG手游中,使用UGUI的项目显著增加,从而大幅提升了UGUI在ARPG项目中的使用占比。

下面我们将分别说明NGUI和UGUI的CPU耗时和堆内存占用情况。

请输入图片描述
请输入图片描述
请输入图片描述
请输入图片描述

UI模块的性能开销依然很高,也是我们统计中的第二大性能杀手。在中低端设备上,超过90%的研发项目在UI端都面临较为严重的性能问题,主要体现方面与MMORPG游戏类似,功能界面复杂、同一时刻需要更新的Panel多等。但ARPG的平均耗时要略低于MMORPG,这是因为ARPG主要仍以推图形式为主,其在战斗副本中的玩家是预先固定的,大量玩家同屏打怪的情况很少出现。

请输入图片描述

经统计,NGUI中堆内存每10000帧分配的主体范围为 6.0~81.7 MB,UGUI中堆内存每10000帧分配的主体范围在12.3 MB以内。从堆内存分配来看,UGUI远低于NGUI。

3、逻辑代码

严重程度:噩梦

请输入图片描述
请输入图片描述

1)GC触发频率很高,是造成卡顿的主要原因之一,目前只有12.5%的项目可以将GC的触发频率控制在1000帧/次以上。
2)在2017年GC平均耗时趋势虽有所上升,但相比于2016年已经大幅降低。

请输入图片描述
请输入图片描述

1)Instantiate实例化操作平均每次调用的CPU耗时主要分布在: 1.2~43.5 ms,且主要集中在10ms以内。
2)Instantiate实例化耗时在2017 Q2之后大幅下降,这说明越来越多的研发团队开始重视项目运行时的资源管理。

请输入图片描述
请输入图片描述

Shader.Parse 操作是比较突出的性能杀手,目前平均每次调用的CPU耗时主要分布在 4.4~145.2ms。但随着越来越多团队了解该项的耗时特性后,该项的CPU耗时呈现出较为明显的下降趋势。

4、动画模块

严重程度:噩梦

请输入图片描述
请输入图片描述
请输入图片描述

1)Animator.Update/Animation.Update的开销在中低端设备上的耗时普遍较高,但整体耗时在2017年上半年有明显的下降趋势。
2)ARPG游戏的MeshSkinning.Update的耗时明显高于MMORPG游戏。这主要体现在角色模型的面片数和骨骼数方面,ARPG更加偏向于动作表现力上。

5、粒子模块

严重程度:普通

请输入图片描述
请输入图片描述
请输入图片描述
请输入图片描述

1)粒子系统的CPU开销普遍较低,且近一年来下降趋势较为明显。
2)粒子系统的数量使用仍然较大,这样会造成较高的内存占用。UWA建议将粒子系统的使用数量峰值控制在400以下,目前仅21.8%的项目达到。

6、物理模块

严重程度:普通

请输入图片描述
请输入图片描述

物理模块的性能普遍较好,但呈现出较为明显的上升趋势,因此在中低端机上依然需要研发团队关注。


三、ARPG手游内存模块开销分析

请输入图片描述

内存泄露是研发过程中经常面临的严峻问题,依然有37%的项目存在不同程度的内存泄露。我们可以看到从2016 Q2开始,内存泄露占比大幅下降,但随着项目新功能的开发以及新项目的涌入,其占比又开始大幅攀升回来。虽然整体趋势有所下降,但内存泄露问题的有效防范和解决,依然任重道远。

1、总体内存

严重程度:地狱

请输入图片描述
请输入图片描述

1)总体内存峰值主要分布在95.6~573.9 MB区间,且均值在300MB以上。
2)与MMORPG游戏相比,ARPG内存占用的上线起伏更加明显。经过进一步分析,我们发现,2016 Q4的内存占用在大多数老项目中的主要资源(纹理、网格和动画片段等)都得到了较大的内存优化;但随着2017 Q1新项目不断涌入,内存占用又大幅回升;而2017 Q2内存的下降则是因为AssetBundle内存的大幅下降,大多数研发团队开始通过LoadFromFile来加载LZ4格式的AssetBundle,从而让内存又迅速回落。

2、总体堆内存

严重程度:地狱

请输入图片描述
请输入图片描述

1)总体堆内存峰值主要分布为 9.7~109.6 MB,仅37.7%的项目可以把总体堆内存峰值控制在40MB以内。
2)堆内存使用上升趋势明显,建议研发团队重点关注。对此,UWA建议重点关注以下几点:

  • 严格关注配置文件的使用,避免一次性加载过大的配置文件而撑大堆内存;
  • 不少项目的堆内存增大是由于热更新所致。因此,对于过大的数据Data的使用,建议通过分帧进行,并及时进行GC回收;
  • 避免不必要的代码堆内存分配,虽然是老生常谈,但从趋势上可以看出,大多数研发团队仍需加强重视。

项目的内存占用很大一部分来自于资源的使用,下面我们将对项目中主流资源的使用情况进行分析。

3、纹理资源内存

严重程度:地狱

请输入图片描述
请输入图片描述

1)纹理内存峰值主要分布为 22.4~198.8 MB,且主要分布在50~100MB区间。
2)内存峰值占用在2016 Q4大幅下降,但在今年后又开始逐步上升,建议研发团队密切关注自身项目的纹理资源使用情况。

4、网格资源内存

严重程度:噩梦

请输入图片描述
请输入图片描述

1)网格资源内存峰值主要分布为 1.0~ 47.5 MB,且主要集中在40MB以内。
2)ARPG游戏的场景较之MMORPG游戏普遍较小,场景相对轻量和简单,因此,其网格资源量明显低于MMORPG游戏。

5、动画资源内存

严重程度:噩梦

请输入图片描述
请输入图片描述

动画资源内存峰值主要分布在38.7 MB以内,且主要集中在15MB以内。

6、Shader资源内存

严重程度:噩梦

请输入图片描述
请输入图片描述

1)Shader资源内存峰值主要分布在6.1 MB之内,且主要集中在1MB之内。
2)从内存趋势上来看,近一年来内存占用下降较为明显。

7、RenderTexture资源内存

严重程度:地狱

请输入图片描述
请输入图片描述

1)RenderTexture资源内存峰值主要控制在67.7 MB以内,且在各个区间都较为平均。
2)内存使用上升趋势明显,建议研发团队对其在自身项目中的使用情况特别关注!

8、粒子系统资源内存

严重程度:噩梦

请输入图片描述
请输入图片描述

1)粒子系统资源内存峰值主要分布在 33.7 MB以内,且主要集中在20MB以内。
2)粒子系统的内存占用一直较为平稳,虽然在2011年Q1期间高端机上的内存占用较高,但在2017年Q2则大幅回落到之前水平。
3)目前,粒子系统的内存占用仍然较为“虚高”,即游戏运行期间Active数量远小于内存中的总数量,在大部分项目中,Active的粒子系统数量占比不到10%,即粒子系统的内存占用峰值应该在5MB左右。


四、ARPG手游资源管理分析

请输入图片描述
请输入图片描述

1)在资源加载方面,AssetBundle.Load和Resources.Load是项目中的主要加载方式。
2)通过调用趋势可以看出,研发团队对于Resources.Load的使用仍然有明显的增长趋势。对此,UWA强烈建议研发团队尽可能使用AssetBundle作为游戏资源的主要加载方式。

请输入图片描述
请输入图片描述

1)LoadFromFile(Async)是ARPG项目中AssetBundle的主要加载方式。
2)LoadFromFile(Async)的使用在2017 Q2上大幅增长了46%,这是在UWA DAY 2017上我们非常建议的AssetBundle加载方式(Unity 5.3版本后),研发团队可以通过UWA Blog(blog.uwa4d.com)的相关文章查看具体的性能对比。

请输入图片描述

Instantiate/Destroy和Active/Deactive调用次数较高,需要研发团队根据自身项目情况时刻注意:
1)由于Active/Deactive每次调用的CPU开销不大,且不会造成崩溃、闪退等问题,所以研发团队极易忽视这两项操作所带来的性能问题,因而出现了游戏运行1万帧Active/Deactive上万次调用的情况。因此,此处存在着很大的性能浪费;
2)Instantiate/Destroy的调用次数同样较高,虽然不如Active/Deactive频繁,但每3帧调用1次Instantiate的频率依然不容忽视,建议研发团队坚持加强项目的资源管理,避免不必要的频繁Instantiate/Destroy操作发生。


五、UWA 对于ARPG手游研发团队的建议

一、警惕渲染模块和UI模块这两大性能杀手!随着精品化ARPG项目的日益增多,在日后很长一段时间内,这两项依然将是研发团队在性能优化方面的重中之重!

  • 渲染方面,Draw Call的控制技术已被越来越多的团队所熟练掌握,并且随着设备的发展,Draw Call的影响将越来越小,反观渲染Triangle数量将逐步成为渲染模块的新的性能瓶颈,越来越大的渲染Triangle量会给GPU、耗电和发热方面带来巨大的压力;
  • UI方面,UI网格重建开销在未来相当长的一段时间内仍然是研发团队头痛的问题,UI优化的原则非常简单:动静分离,但真实操作起来则是非常困难。90%项目中的UI性能问题是由于动静元素没有分离导致,但没有任何两个项目的具体原因是一致的。这是UI性能优化方面非常困难的主要原因。

二、逻辑代码方面,Instantiate实例化开销虽然在2017 Q2呈现较为明显的下降趋势,但仍需要研发团队持续对资源管理进行监控。同时,GC开销的上升趋势明显,需要研发团队加强对Mono堆内存的优化意识;

三、在内存优化方面,与MMORPG游戏类似,Mono和RenderTexture内存占用在2017年的上升趋势非常明显,对此,建议研发团队在接下来的项目研发中密切关注这两项的内存使用;

四、在动画模块方面,ARPG游戏的CPU耗时明显高于MMORPG游戏。对此,我们的建议如下:

  • 尝试动画片段的精度缩减技术,该技术在UWA Blog和UWA问答上(answer.uwa4d.com)都有详细的讲解和代码分享;
  • 由于ARPG游戏对于动作表现力的要求很高,因此,相比于Humanoid模式,Generic模式更加适合于ARPG项目,它可以让你的动画表现与3DMax、Maya等制作表现更加一致;
  • 随着ARPG中怪物角色的数量持续增加,GPU Instancing技术会受到更多游戏团队的青睐,具体做法可参加UWA Blog相关文章。但同样需要注意的是,研发团队需要控制同屏的渲染面片数。

五、资源加载方面,Resources.Load依然是比较主流的资源加载方式。但UWA建议尽可能尝试通过AssetBundle.Load来加载相关资源。在2017 Q2以后,LoadFromFile(Async)已经成为ARPG研发团队的主流AssetBundle加载方式,对于仍然没有使用该方式的研发团队,建议查看UWA的相关直播信息,并找到对应的性能比较和分析;

六、以上数据是我们对于ARPG手游性能数据的整体研究和趋势分析,旨在从宏观上为大家展现项目中普遍存在的性能瓶颈和研发团队容易忽视的潜在性能问题。但同样需要说明的是,优化是一个“抽丝剥茧”的过程,需要研发团队花费大量的时间和耐心去完成。UWA建议:多做测试,以数据说话,空杯心态,将经验归零。

以上就是UWA发布的2016-2017年ARPG手游性能测评汇总和分析。此次,我们从性能参数上增加了资源加载、资源卸载等数据扩充了报告的完整性,在测评参数上加入了机型、历史数据等方便研发团队能及时进行横向和纵向的比较。我们深信数据是会说话的,总有规律值得我们追溯求实、鉴往知来。同时我们也会不断细化评析的标准、划分,以使得这些数据更有代表性和说服力。






原文出处:侑虎科技
本文作者:admin
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

目录
相关文章
|
3月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
157 0
|
7月前
|
移动开发 安全 图形学
如何绕过某讯手游保护系统并从内存中获取Unity3D引擎的Dll文件
如何绕过某讯手游保护系统并从内存中获取Unity3D引擎的Dll文件
85 0
|
移动开发 安全 图形学
如何绕过某讯手游保护系统并从内存中获取Unity3D引擎的Dll文件
通过动态分析了它的保护方法,通过改源码刷机的方法绕过了它的保护方案(也可通过hook libc.so中的execve函数绕过保护),接下来就可以直接使用GameGuardain这个神奇附加上去进行各种骚操作了。这里主要讲一下如何去从内存中获取Assembly-CSharp.dll 和 Assembly-CSharp-fristpass.dll文件。
|
测试技术 C# Android开发
使用 Mono.Cecil 辅助 Unity3D 手游进行性能测试
Unity3D 引擎在 UnityEngine 名字空间下,提供了 Profiler 类(Unity 5.6 开始似乎改变了这个名字空间),用于辅助对项目性能进行测试。以 Android 平台为例,在构建之前,需要在 Unity 的 File/Build Settings 菜单项弹出的窗口中,勾选 Development Build 一项。
1596 0
|
缓存 机器人 测试技术
|
图形学 开发工具 Java
Unity3d手游开发中的特殊文件夹
这里列举出手游开发中用到了所有特殊文件夹。 1.Editor Editor 文件夹可以在根目录下,也可以在子目录里,只要名子叫Editor就可以。
854 0
|
4月前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
209 6