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

简介:

报告目录:

一、MMORPG手游总体性能开销分析
二、MMORPG手游CPU模块性能开销分析
三、MMORPG手游内存模块性能开销分析
四、MMORPG手游资源管理分析
五、UWA对于MMORPG手游研发团队的建议


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

请输入图片描述

iOS设备的CPU性能普遍高于Android设备,Android设备的CPU均值主体范围为14.4~73.6 ms,iOS设备的CPU均值主体范围为9.2~43.5 ms。在Android设备上,CPU耗时集中在17~50ms区间,而在iOS设备上,CPU耗时集中在33ms以内。

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

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

1)大部分MMORPG手游在中低端设备的性能开销较高,大于33ms的耗时占比范围在60%~70%
2)精品化过程中的MMORPG手游在低端移动设备上的CPU开销明显增大。相较2016年同期,2017 Q2 MMORPG手游的CPU开销均值增长超过50%

请输入图片描述

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

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


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

1、渲染模块
严重程度:地狱

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

请输入图片描述

MMORPG手游的Draw Call数量普遍较高,且设备性能越好,数量峰值越高。这主要有以下几方面原因:
1)研发团队普遍开始针对不同机型来制定自适应的渲染LOD策略,主要包括模型LOD和Shader LOD等。
2)除LOD外,研发团队同样会对一些渲染效果进行有针对性的设置,最常见的是阴影的处理,高端机上开启实时阴影,而低端机上则通过较为简单的阴影面片或Projector来处理。另外,水体模拟也越来越多地在项目中被使用,高端设备上开启水面反射效果,也会增加一定量的Draw Call。

但就目前数据表明,研发团队已经开始有意地对Draw Call进行控制,UWA建议Draw Call占用的P95 < 200,72.3%的项目可以将其控制在这个范围内。

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

1)MMORPG手游的场景渲染三角形面片数量普遍较高。且设备性能越高,数量峰值越高。经过统计,在中低端设备中,40.4%的项目能将渲染三角形面片数控制在100K以下
2)场景复杂程度明显增加,虽然2017 Q2数量有所回落,但相较于去年同期,仍然增幅33%。同时,较高的渲染面片数量也大幅增加了中低端设备的GPU渲染压力和耗能压力。

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

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

2、UI模块
严重程度:地狱

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

使用NGUI作为UI解决方案的项目占据了相当高的比例,NGUI目前仍然是MMORPG研发团队对于UI系统使用的主要解决方案。MMORPG是目前手游中工程技术难度最为复杂的游戏品类之一,对于UI模块的选择,大多数团队仍然倾向于从稳定性和把控性两方面出发,这也是NGUI占比持续较高的主要原因。

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

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

UI模块的性能开销依然很高,也是我们统计中的第二大性能杀手。在中低端设备上,超过90%的研发项目在UI端都面临较为严重的性能问题,主要体现在以下几个方面:
(1)MMORPG游戏的界面复杂,功能多(技能、背包、角色、任务、商城等),数量大(血条、名称、飘字等HUD)。
(2)同一时刻存在大量需要更新的Panel,比如,移动中血条等HUD、NPC不断更新的提示icon、面板中(任务、首充等)的提醒动画、聊天框和弹幕中随机出现的滚动文字等。
以上情况都是MMORPG项目研发团队每天面对的主要UI问题,可能一个Widget的使用疏忽,就能让研发团队的UI模块性能开销飙升一个量级。
注意:从重要函数上来看,UGUI的CPU占用大幅低于NGUI。需要说明的是,Unity 5.2版本之后已经开始将UI的部分计算操作移到子线程中进行,而主线程中的表现则为WaitingForJob、PutGeometryJobFence等,在本次报告中,我们并没有将这两项开销统计在内。

请输入图片描述

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

3、逻辑代码
严重程度:噩梦

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

1)GC触发频率很高,是造成卡顿的主要原因之一,目前只有10%的项目可以将GC的触发频率控制在1000帧/次以上
2)随着MMORPG游戏越来越重度化,GC平均耗时在逐步上升。GC耗时会逐渐成为游戏运行时的主流性能杀手,需要研发团队时刻注意!

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

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

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

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

4、动画模块
严重程度:噩梦

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

1)Animator.Update/Animation.Update的开销在中低端设备上的耗时普遍较高,但整体耗时在2017年上半年明显降低。
2)MeshSkinning.Update的耗时普遍较低。

5、粒子模块
严重程度:普通

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

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

6、物理模块
严重程度:普通

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

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


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

请输入图片描述

内存泄露是研发过程中经常面临的严峻问题,依然有将近半数的项目存在不同程度的内存泄露。但我们可以看到,内存泄露的比例正在逐步降低,相较于去年同期,2017 Q2的内存泄露占比已经下降了6%

总体内存
严重程度:地狱

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

1)总体内存峰值主要分布在146.8~576.9 MB区间,且均值在350MB以上;
2)随着MMORPG游戏的精品化趋势,其内存占用也逐步增加,虽然2016 Q4稍有回落,但整体内存的上升趋势较为明显

总体堆内存
严重程度:地狱

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

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

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

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

1、纹理资源内存
严重程度:地狱

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

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

2、网格资源内存
严重程度:噩梦

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

1)网格资源内存峰值主要分布为 8.5~ 70.4 MB,且主要集中在40MB以内;
2)MMORPG游戏的场景普遍较大、角色普遍较多,因此,其网格资源量明显高于其他类型游戏。但从使用趋势上来看,其最近一年的使用趋势较为平稳,均值均在30MB上下浮动。

3、动画资源内存
严重程度:噩梦

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

1)动画资源内存峰值主要分布在: 3.5~ 58 MB,且主要集中在15MB以内。
2)内存使用趋势较为平稳,平均峰值内存长期控制在20~25MB区间之内。

4、Shader资源内存
严重程度:噩梦

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

1)Shader资源内存峰值主要分布为 0.1~ 5.6 MB,且主要集中在1MB之内。
2)从内存趋势上来看,2016年内存占用下降较为明显,2017年略有上升。

5、RenderTexture资源内存
严重程度:地狱

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

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

6、粒子系统资源内存
严重程度:噩梦

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

1)粒子系统资源内存峰值主要分布为 1.3~ 34.8 MB,且主要集中在20MB以内;
2)粒子系统的内存占用在2016年Q3期间较高,而后在2016年Q4大幅下降,但仍然还有较大的下降空间。目前,粒子系统的内存占用较为“虚高”,即游戏运行期间Active数量远小于内存中的总数量,在大部分项目中,Active的粒子系统数量占比不到10%,即粒子系统的内存占用峰值应该在5MB左右。


四、MMORPG手游资源管理分析

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

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

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

1)LoadFromFile和New WWW是项目中AssetBundle的主要加载方式;
2)LoadFromFile的使用在2017 Q2上升了6%,这是在UWA DAY 2017上我们非常建议的AssetBundle加载方式(Unity 5.3版本后),研发团队可以通过UWA Blog的相关文章查看具体的性能对比。

请输入图片描述

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


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

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

  • 渲染方面,Draw Call的优化技巧已被越来越多的团队所熟练掌握,并且随着设备的发展,Draw Call的影响将越来越小,反观渲染Triangle数量将逐步成为渲染模块新的性能瓶颈,越来越大的渲染Triangle量会给GPU、耗电和发热等带来巨大的压力;
  • UI方面,UI网格重建开销在未来相当长的一段时间内仍然是研发团队头痛的问题,目前手游MMORPG仍然处于“端游手游化”的转变初期阶段,大多数研发团队考虑更多的仍是功能上的迁移和与移动端的结合,在UI技术上的沉淀较为薄弱。

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

三、内存泄露占比持续下降,但内存占用持续升高。虽然移动设备的内存量逐年增大,但对于希望覆盖面广阔的游戏团队来说,内存的控制仍然刻不容缓;

四、在内存优化方面,大部分研发团队都将精力放在纹理、网格和动画片段等主要资源上,但通过上述分析发现,Mono堆内存和RenderTexture内存占用在2017年的上升趋势非常明显,对此,建议研发团队在接下来的研发中密切关注这两项的内存使用;

五、动画资源和粒子系统的内存优化空间依然很大。对于前者,建议研发团队关注以下技术:

  • 动画片段的精度缩减技术,该技术在UWA Blog和UWA问答上都有详细的讲解和代码分享;
  • 关注Retargeting技术,该技术可以大幅降低多角色的动画片段内存占用,预测随着MMORPG项目的进一步重度化,该技术会得到越来越多团队的青睐。

对于后者,则建议研发团队关注粒子系统的资源配表,结合UWA线上性能报告,对不常使用的Particle System进行合理规划。

六、资源加载方面,New WWW、Resources.Load依然是研发团队非常常用的资源加载方式。但UWA建议尽可能尝试通过LoadFromFile(Async)和AssetBundle.Load来加载相关资源,从而获得更好的性能。研发团队可在UWA Day 2017的相关Blog中找到对应的性能比较和分析;

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

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






原文出处:侑虎科技
本文作者: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 游戏开发中的强大功能。
210 6
|
3月前
|
测试技术 C# 图形学
掌握Unity调试与测试的终极指南:从内置调试工具到自动化测试框架,全方位保障游戏品质不踩坑,打造流畅游戏体验的必备技能大揭秘!
【9月更文挑战第1天】在开发游戏时,Unity 引擎让创意变为现实。但软件开发中难免遇到 Bug,若不解决,将严重影响用户体验。调试与测试成为确保游戏质量的最后一道防线。本文介绍如何利用 Unity 的调试工具高效排查问题,并通过 Profiler 分析性能瓶颈。此外,Unity Test Framework 支持自动化测试,提高开发效率。结合单元测试与集成测试,确保游戏逻辑正确无误。对于在线游戏,还需进行压力测试以验证服务器稳定性。总之,调试与测试贯穿游戏开发全流程,确保最终作品既好玩又稳定。
131 4
|
4月前
|
图形学 缓存 算法
掌握这五大绝招,让您的Unity游戏瞬间加载完毕,从此告别漫长等待,大幅提升玩家首次体验的满意度与留存率!
【8月更文挑战第31天】游戏的加载时间是影响玩家初次体验的关键因素,特别是在移动设备上。本文介绍了几种常见的Unity游戏加载优化方法,包括资源的预加载与异步加载、使用AssetBundles管理动态资源、纹理和模型优化、合理利用缓存系统以及脚本优化。通过具体示例代码展示了如何实现异步加载场景,并提出了针对不同资源的优化策略。综合运用这些技术可以显著缩短加载时间,提升玩家满意度。
256 5