ARPG移动游戏性能分析报告:加载、GC、内存需重点关注!

简介:

◆◆

总体性能

0.png

(1)iOS设备的CPU性能普遍高于Android设备;
(2)Android设备上项目性能普遍偏低,CPU达标(超过33ms帧数比例<10%)比例仅为38.6%。

请输入图片描述

相较于MMORPG游戏,ARPG游戏的渲染和UI模块比重明显下降,自身逻辑代码的开销基本一致,加载模块比重明显上升。这是出于以下原因:

(1)相对于MMORPG来说,ARPG游戏的场景一般较小,UI界面相对简单,因此,渲染模块和UI模块的压力要小于MMORPG游戏;
(2)ARPG游戏重点突出打斗的丰富性和爽快感,所以ARPG游戏研发团队会为角色创建非常复杂的动画状态机,并且为了保证游戏副本打斗的流畅性,研发团队更倾向于在场景切换时将大量资源一次性载入,因此,ARPG游戏的自身逻辑代码和加载模块的压力更高。

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


◆◆

主流模块性能

一、渲染模块

严重程度:噩梦

Draw Call的主体使用范围为32~166,峰值平均为209
渲染三角面片的峰值集中在68.8K~268K,峰值平均为90.2K面。
UWA推荐:渲染三角面片峰值< 100K,目前达标比例: 55.2%

请输入图片描述
不透明物体的渲染耗时平均为2.9ms,半透明物体的渲染耗时平均为4.6ms
54.4%的项目使用了相机后处理特效,其具体分布如下:

请输入图片描述

(1)ARPG游戏无论是在Draw Call上还是在渲染的三角形面片数量上,均小于MMO游戏;
(2)但ARPG游戏的场景渲染三角形面片数量依然较高,仅55.2%的游戏能够将场景的渲染三角形面片数控制在10w以下。

二、加载模块
严重程度:地狱

请输入图片描述

(1)GC触发频率很高,是造成卡顿的主要原因之一;
(2)90%以上的游戏团队需要对GC的调用进行进一步规划,对代码的堆内存分配进行大力优化。

请输入图片描述

(1)Instantiate实例化操作平均每次调用的CPU耗时主要分布在: 2.6~44.1 ms,均值为9.4ms,每1万帧总调用次数主要分布在: 139~1941 次;
(2)Instantiate的频繁实例化是大多数研发团队非常容易忽视的问题。

请输入图片描述

Log输出操作平均每次调用的CPU耗时主要分布在: 3.0~33.1 ms,均值为9.8ms。

请输入图片描述

(1)Shader解析操作平均每次调用的CPU耗时主要分布在: 4.3~146.8 ms,均值为25.1ms;
(2)Shader解析时间较高,且大多数情况是相同Shader的重复开销,值得研发团队密切关注。

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

请输入图片描述

请输入图片描述

(1) 使用NGUI作为UI解决方案的项目占据了相当高的比例,NGUI目前仍然是研发团队对于UI系统使用的主要解决方案;
(2) UI模块的性能开销很高,将近70%的研发团队都面临较为严重的性能问题;
(3) 与MMORPG不同的是,ARPG游戏UI模块的性能压力相对较小,优化难度相对较低。

四、粒子系统
严重程度:普通

请输入图片描述

五、动画模块
严重程度:普通

经过统计,目前仅使用Mecanim动画系统的ARPG游戏项目占比为45.3%,仅使用Unity3.x老版本动画系统的ARPG游戏项目占比为17.7%,两种系统混合使用的项目占比为37.0%

请输入图片描述


◆◆◆

内存模块

内存泄露几乎是所有手游都难避开的问题,其在ARPG手游中出现的情况占比为34.9%

总体内存
严重程度:地狱

请输入图片描述

总体堆内存
严重程度:地狱
请输入图片描述

纹理资源
严重程度:地狱
请输入图片描述

网格资源
严重程度:普通
Memory_Mesh.png

音频资源
严重程度:普通

请输入图片描述

Render Texture资源
严重程度:噩梦
请输入图片描述

字体资源
严重程度:普通
请输入图片描述

Shader资源
严重程度:普通

请输入图片描述

动画片段资源
严重程度:普通

请输入图片描述

希望以上数据能给大家的开发提供帮助。之后我们将不断与大家分享其他类型的数据,如ACT,SLG等。我们深信数据是会说话的,总有规律值得我们追溯求实、鉴往知来。同时我们也会不断细化评析的标准、划分,以使得这些数据更有代表性和说服力。

特别地,今天我们在此向大家隆重推荐ARPG研发史上的重磅之作:聚爆Implosion!我们将其性能进行了深度的分析并分享,并惊艳地发现,原来规则是可以来打破的,极限是能够被超越的!当我们尽力到无能为力,我们自然无所畏惧。你们的游戏也可以!





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

目录
相关文章
|
2月前
|
运维 Java Linux
(九)JVM成神路之性能调优、GC调试、各内存区、Linux参数大全及实用小技巧
本章节主要用于补齐之前GC篇章以及JVM运行时数据区的一些JVM参数,更多的作用也可以看作是JVM的参数列表大全。对于开发者而言,能够控制JVM的部分也就只有启动参数了,同时,对于JVM的性能调优而言,JVM的参数也是基础。
|
2月前
|
Java fastjson C++
JVM内存问题之JVM中元空间持续增长并且GC无法释放的原因可能是什么
JVM内存问题之JVM中元空间持续增长并且GC无法释放的原因可能是什么
|
2月前
|
监控 Java
JVM内存问题之使用jstat命令查看GC堆百分比占比情况,应该使用哪个选项
JVM内存问题之使用jstat命令查看GC堆百分比占比情况,应该使用哪个选项
|
1月前
|
存储 Java 图形学
UNITY性能优化☀️一、GC介绍与Unity内存管理方法
UNITY性能优化☀️一、GC介绍与Unity内存管理方法
|
2月前
|
人工智能 Java
JVM内存问题之当老年代缓慢增加且Full GC无法清除时,应如何使用MAT进行分析
JVM内存问题之当老年代缓慢增加且Full GC无法清除时,应如何使用MAT进行分析
|
2月前
|
Java 运维
开发与运维内存问题之触发Full GC,类加载检查如何解决
开发与运维内存问题之触发Full GC,类加载检查如何解决
20 0
|
3月前
|
算法 Java
垃圾回收机制(Garbage Collection,GC)是Java语言的一个重要特性,它自动管理程序运行过程中不再使用的内存空间。
【6月更文挑战第24天】Java的GC自动回收不再使用的内存,关注堆中的对象。通过标记-清除、复制、压缩和分代等算法识别无用对象。GC分为Minor、Major和Full类型,针对年轻代、老年代或整个堆进行回收。性能优化涉及算法选择和参数调整。
47 3
|
3月前
|
算法 Java
Java垃圾回收(Garbage Collection,GC)是Java虚拟机(JVM)的一种自动内存管理机制,用于在运行时自动回收不再使用的对象所占的内存空间
【6月更文挑战第18天】Java的GC自动回收内存,包括标记清除(产生碎片)、复制(效率低)、标记整理(兼顾连续性与效率)和分代收集(区分新生代和老年代,用不同算法优化)等策略。现代JVM通常采用分代收集,以平衡性能和内存利用率。
60 3
|
2月前
|
监控 Java 图形学
【性能优化篇】U3D游戏卡顿大作战:内存与渲染效率的极致提升
【7月更文第12天】在Unity3D游戏开发领域,性能优化是决定玩家体验好坏的关键一环。游戏频繁卡顿,不仅破坏了沉浸式体验,还可能造成玩家流失。本文将深入探讨如何有效解决U3D游戏卡顿问题,特别聚焦于内存管理和渲染效率两大核心领域,助力开发者打造流畅丝滑的游戏世界。
115 0
|
3月前
|
消息中间件 存储
【消息队列开发】 实现内存加载
【消息队列开发】 实现内存加载

热门文章

最新文章