《技术资料》这可能是最全面的MMORPG Unity手游性能蓝皮书

 2024-03-04 03:05:12  阅读 0

从正月初五到正月初九,我们每天都会推送一个“老文章回顾”主题,涉及运营、策划、美术、技术、营销等领域。 今天是技术文章。 本文首发于公众号“鱼狐科技”,游戏葡萄已授权转载。

在UWA成立两周年之际,UWA准备推出2016-2017年Unity手游性能评测数据分析蓝皮书,希望为游戏行业从业者提供详细信息和针对性建议。 。

这份蓝皮书收集了所有提交到网站的项目。 我们从整体性能数据、引擎模块开销、内存占用等方面进行了总结分析,呈现了Unity手游行业的现状。

报告目录:

1、手游整体性能开销分析

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

3、手游内存模组性能开销分析

4、手游资源管理分析

5. 西澳大学对手机游戏开发团队的建议

1、手游整体性能开销分析

unity单线程_unity线程安全_unity线程数自动模式

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

我们选取了评论最多的四个模型进行统计。 这四款机型分别是红米2、红米Note2、华为6Plus和三星S6。

unity单线程_unity线程数自动模式_unity线程安全

unity单线程_unity线程安全_unity线程数自动模式

1)大部分手游在中低端设备上性能开销较高,耗时大于33ms的比例在60%到70%之间。

2)低端移动设备上的手游在走向高品质的过程中CPU开销显着增加。 与2016年同期相比,2017年Q2手游平均CPU开销增长超过50%。

unity线程数自动模式_unity单线程_unity线程安全

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

接下来我们将详细分析这些主流模块的开销。

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

1. 渲染模块

严重程度:地狱

为了更好地体现各个性能参数的整体使用情况,我们计算了各个性能参数的主要使用范围。 范围为[5%~95%]。 以下数据中,P5 代表 5%,P95 代表 95%。

手游中的Draw Call数量普遍较高,且设备性能越好,峰值数量越高。 这主要是由于以下几个原因:

1)研发团队普遍开始针对不同模型制定自适应渲染LOD策略,主要包括模型LOD和LOD。

2)除了LOD之外,研发团队也会针对一些渲染效果进行针对性的设置。 最常见的是阴影处理。 在高端机器上启用实时阴影,而在低端机器上使用更简单的阴影补丁或阴影补丁。 。 此外,水体模拟也越来越多地应用于项目中。 在高端装备上开启水面反射效果也会增加一定的Draw Calls。

但目前的数据显示,研发团队已经开始有意控制Draw Call。 UWA建议Draw Call占用P95<200,72.3%的项目可以控制在这个范围内。

unity单线程_unity线程安全_unity线程数自动模式

1)手游场景中渲染的三角形面片数量普遍较多。 并且设备性能越高,峰值数越高。 统计显示,在中低端设备中,40.4%的项目可以将渲染的三角形面片数量控制在100K以下。

2)场景复杂度显着增加。 尽管2017年第二季度这一数字有所下降,但与去年同期相比仍然增长了33%。 同时,较高的渲染补丁数量也显着增加了中低端设备的GPU渲染压力和能耗压力。

unity线程安全_unity线程数自动模式_unity单线程

unity单线程_unity线程安全_unity线程数自动模式

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

2.用户界面模块

严重程度:地狱

unity线程安全_unity单线程_unity线程数自动模式

unity线程安全_unity线程数自动模式_unity单线程

有很高比例的项目使用NGUI作为UI解决方案,NGUI仍然是研发团队用于UI系统的主要解决方案。 它是目前手游中技术最复杂的游戏类别之一。 在选择UI模块时,大多数团队还是倾向于从稳定性和可控性两个方面出发。 这也是NGUI占比持续居高不下的主要原因。 。

下面我们分别讲解NGUI和UGUI的CPU时间消耗和堆内存使用情况。

unity线程安全_unity单线程_unity线程数自动模式

unity线程安全_unity单线程_unity线程数自动模式

unity线程数自动模式_unity线程安全_unity单线程

unity线程数自动模式_unity单线程_unity线程安全

UI模块的性能开销还是很高的,也是我们统计的第二大性能杀手。 在中低端设备上,90%以上的研发项目都面临着UI侧严重的性能问题,主要体现在以下几个方面:

(1)游戏界面复杂,功能多(技能、背包、人物、任务、商城等)、数量多(HUD如生命条、姓名、浮动人物等)。

(2)有大量的Panel需要同时更新,比如移动时的血条等HUD、不断更新的NPC提示图标、面板中的提醒动画(任务、首次充值等) 、随机出现滚动文字的聊天框、弹幕等。

以上情况是项目研发团队每天面临的主要UI问题。 一个疏忽就可能导致研发团队的UI模块性能开销猛增一个数量级。

注:从重要功能来看,UGUI的CPU占用率明显低于NGUI。 需要注意的是,Unity 5.2版本之后,UI的一些计算操作已经移到了子线程,而主线程中的性能则是等等。在本次报告中,我们没有统计这两项开销。 里面。

据统计,NGUI中每万帧分配的堆内存主要范围为6.1~103.3MB,UGUI中每万帧分配的堆内存主要范围在10.9MB以内。 从堆内存分配来看,UGUI比NGUI低很多。

3、逻辑代码

严重程度:噩梦

unity线程安全_unity单线程_unity线程数自动模式

unity线程数自动模式_unity单线程_unity线程安全

1)GC触发频率很高,这是造成滞后的主要原因之一。 目前只有10%的项目能够将GC触发频率控制在1000帧/次以上。

2)随着游戏越来越严重,平均GC时间逐渐增加。 GC时间消耗将逐渐成为游戏运行时主流的性能杀手,开发团队需要时刻关注!

unity线程数自动模式_unity线程安全_unity单线程

unity线程数自动模式_unity线程安全_unity单线程

1)实例化操作每次调用平均消耗的CPU时间主要分布在:1.4~33.1 ms之间,且主要集中在10ms以内。

2)实例化时间在2017年Q2之前一直呈上升趋势,但在2017年Q2大幅下降,这表明越来越多的研发团队开始关注项目运行时的资源管理。

unity线程数自动模式_unity单线程_unity线程安全

unity单线程_unity线程数自动模式_unity线程安全

.Parse 操作是一个突出的性能杀手。 目前,每次调用平均消耗的CPU时间主要分布在5.8~134.4ms之间。 然而,随着越来越多的团队了解这个项目的耗时特点,这个项目的CPU耗时呈现出明显的下降趋势。

4.动画模块

严重程度:噩梦

unity线程安全_unity线程数自动模式_unity单线程

unity线程安全_unity单线程_unity线程数自动模式

unity线程安全_unity线程数自动模式_unity单线程

1) 成本./. 中低端设备上普遍较高,但2017年上半年整体耗时明显下降。

2)时间消耗普遍较低。

5. 粒子模块

严重程度:中等

unity线程数自动模式_unity单线程_unity线程安全

unity线程数自动模式_unity线程安全_unity单线程

1)粒子系统的CPU开销普遍较低,近一年下降趋势明显。

2)使用的粒子系统数量仍然较多,会导致内存占用较高。 UWA 建议将使用的粒子系统的峰值数量控制在 400 个以下,目前只有 24.8% 的项目实现了这一目标。

6. 物理模块

严重程度:中等

unity单线程_unity线程安全_unity线程数自动模式

unity单线程_unity线程数自动模式_unity线程安全

物理模块的性能总体不错,但呈现出明显的上升趋势,所以在中低端机上仍需要研发团队的关注。

3、手游内存模块开销分析

unity线程数自动模式_unity单线程_unity线程安全

内存泄漏是研发过程中经常面临的严重问题,近一半的项目仍然存在不同程度的内存泄漏问题。 但我们可以看到内存泄漏的比例在逐渐减少。 与去年同期相比,2017年Q2内存泄漏比例下降了6%。

整体记忆

严重程度:地狱

unity线程数自动模式_unity线程安全_unity单线程

1)整体内存峰值主要分布在146.8~576.9MB范围内,平均值在350MB以上;

2)随着高品质游戏的趋势,其内存占用逐渐增加。 2016年Q4虽然有小幅下滑,但整体内存的上升趋势还是比较明显的。

总堆内存

严重程度:地狱

unity线程安全_unity单线程_unity线程数自动模式

unity线程安全_unity线程数自动模式_unity单线程

1)整体堆内存峰值主要分布在18.3~117.2MB之间,只有34.2%的项目能够将整体堆内存峰值控制在40MB以内;

2)堆内存使用量有明显上升趋势,建议研发团队重点关注。 对此,西澳大学建议重点关注以下几点:

(1)严格注意配置文件的使用,避免一次性加载过大的配置文件填满内存;

(2)很多项目的堆内存增加是由热更新引起的。 因此,对于数据量过大的使用,建议将数据分帧,及时进行GC回收;

(3)避免不必要的代码堆内存分配。 虽然是老生常谈,但从趋势上可以看出,大多数研发团队还是需要多加关注。

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

1.纹理资源内存

严重程度:地狱

unity线程数自动模式_unity线程安全_unity单线程

unity单线程_unity线程数自动模式_unity线程安全

1)纹理内存峰值主要分布在27.8~174.6MB之间,且主要分布在50~100MB范围内。

2)2016年Q4内存使用峰值大幅下降,但今年之后开始逐渐上升。 建议研发团队密切关注自己项目的纹理资源使用情况。

2.网格资源内存

严重程度:噩梦

unity线程数自动模式_unity线程安全_unity单线程

unity线程数自动模式_unity线程安全_unity单线程

1)网格资源峰值内存值主要分布在8.5~70.4MB之间,且主要集中在40MB以内;

2)游戏场景一般较大,人物一般较多。 因此,网格资源量明显高于其他类型游戏。 但从使用趋势来看,近一年来其使用趋势较为稳定,均值在30MB左右波动。

1)动画资源的峰值内存值主要分布在:3.5~58MB之间,且主要集中在15MB以内。

2)内存使用趋势比较稳定,平均峰值内存长期控制在20~25MB范围内。

3.资源内存

严重程度:噩梦

unity线程数自动模式_unity线程安全_unity单线程

unity单线程_unity线程数自动模式_unity线程安全

1)资源内存峰值主要分布在0.1~5.6MB之间,且主要集中在1MB以内。

2)从内存趋势来看,2016年内存使用量大幅下降,2017年小幅增长。

4. 资源内存

严重程度:地狱

unity单线程_unity线程数自动模式_unity线程安全

unity线程安全_unity单线程_unity线程数自动模式

1)资源内存峰值主要分布在0.1~100.9MB之间,各个区间比较平均;

2)内存使用量有明显上升趋势。 建议研发团队特别注意其在自己项目中的使用!

5. 粒子系统资源内存

严重程度:噩梦

unity单线程_unity线程数自动模式_unity线程安全

unity线程安全_unity线程数自动模式_unity单线程

1)粒子系统资源内存峰值主要分布在1.3~34.8MB之间,且主要集中在20MB以内。

2)2016年Q3粒子系统内存使用量较高,2016年Q4显着下降,但下降空间仍然很大。 目前粒子系统的内存占用比较“虚高”,即游戏运行时的数量远小于内存中的总数。 在大多数项目中,粒子系统的数量占比不到10%,这是粒子系统内存使用的峰值。 应该是5MB左右。

4、手游资源管理分析

unity单线程_unity线程安全_unity线程数自动模式

1)资源加载方面,.Load和.Load是项目中主要的加载方式;

2)从调用趋势可以看出,研发团队对.Load的使用还在增加。 对此,UWA强烈建议开发团队尽可能使用游戏资源的主加载方式。

unity线程安全_unity单线程_unity线程数自动模式

1)、New WWW是项目中主要的加载方式;

2) 2017年第二季度使用量增长6%。 这是我们在 UWA DAY 2017 上强烈推荐的加载方法(Unity 5.3 版本之后)。 研发团队可以通过UWA Blog上的相关文章查看具体的性能对比。

/和/的调用次数比较多,因此研发团队需要根据自己的项目情况时刻关注以下几点:

1)由于每次调用的CPU开销并不大,不会造成崩溃、闪退等问题,因此研发团队很容易忽略这两个操作带来的性能问题。 结果,游戏运行了 10,000 帧/数万次调用。 所以这里存在巨大的性能浪费;

2)对/的调用次数也很高。 虽然不像/那么频繁,但每5帧调用一次的频率也不容忽视。 建议研发团队坚持加强项目的资源管理,避免不必要的频繁/操作。

5. 西澳大学对手机游戏开发团队的建议

首先,要警惕两个性能杀手,渲染模块和UI模块! 随着优质项目的不断增多,这两项在未来很长一段时间内仍将是研发团队性能优化的重中之重!

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

第三,内存泄漏的比例持续下降,但内存使用量持续增加。 虽然移动设备的内存量逐年增加,但内存控制对于希望覆盖广泛游戏的游戏团队来说仍然很紧迫;

第四,在内存优化方面,大多数研发团队关注的是纹理、网格、动画剪辑等主要资源。 但通过上面的分析发现,2017年Mono堆内存和内存使用量的上升趋势非常明显。 对此,建议研发团队在接下来的研发中密切关注这两项的内存使用情况;

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

对于后者,建议研发团队关注粒子系统的资源分配表,并结合UWA在线性能报告,对不常用的做出合理的规划。

6、在资源加载方面,New WWW和.Load仍然是研发团队非常常用的资源加载方式。 不过,UWA建议尽可能尝试通过(Async)和.Load加载相关资源,以获得更好的性能。 研发团队可以在UWA Day 2017的相关博客中找到相应的性能对比和分析;

7、以上数据是我们对移动游戏性能数据的整体研究和趋势分析。 旨在从宏观的角度向您展示项目中常见的性能瓶颈以及研发团队容易忽视的潜在性能问题。 但也需要注意的是,优化是一个“剥茧”的过程,需要研发团队花费大量的时间和耐心才能完成。 UWA建议:多做测试,让数据说明一切,抱有空杯心态,让体验归零。

以上是UWA发布的2016-2017年移动游戏性能评测的总结与分析。 这次我们在性能参数中添加了资源加载、资源卸载等数据,以扩大报告的完整性。 我们在评估参数中加入了机器型号、历史数据等,方便研发团队及时进行横向和纵向比较。 我们坚信数据会说话,总有一些规律可供我们追溯、求真、借鉴。 同时,我们将不断细化评价标准和划分,使这些数据更具代表性和说服力。

关注微信公众号“游戏葡萄”,每天获取最前沿的游戏资讯

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码