MOBA移动游戏性能分析报告:渲染、UI和逻辑代码是性能头号杀手!

简介:


◆◆

总体性能

请输入图片描述

MOBA游戏类型是目前所有游戏中性能最难把控(CPU开销最大)的游戏类型,在Android中低端机器上流畅运行,是当前MOBA项目最大的挑战。

请输入图片描述

  1. MOBA游戏中,同屏众多的英雄、小兵和血条HUD等,使得渲染、UI和自身逻辑代码的开销都大大高于引擎的其他系统开销;
  2. 在UWA以往优化的MOBA项目中,UI优化是最为难啃的骨头。不仅数量众多,而且出现和消失时机完全随机,如何做到较为理想的动静分离,是MOBA项目中UI性能优化的关键。

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


◆◆

主流模块性能

一、渲染模块
严重程度:噩梦
Draw Call的主体使用范围为34~142,峰值平均为215;
渲染三角面片的峰值集中在42K~291K,峰值平均为113K面。
UWA推荐:渲染三角面片峰值< 100K,目前达标比例: 35.6%。
请输入图片描述
不透明物体的渲染耗时平均为3.3ms,半透明物体的渲染耗时平均为6.1ms。相机后处理特效的CPU耗时主要集中在0.1~10.5 ms。

小结:

  1. MOBA游戏的场景渲染三角形面片数量普遍较高,仅35.6%的项目能够将场景的渲染三角形面片数峰值控制在10w以下;
  2. 半透明物体的渲染开销较高,这主要与UI界面、技能特效、野外树林和草丛量有关。

建议:

  1. 如果渲染面片数过高,则优化可从两方面入手,一是对场景模型、英雄小兵模型尝试进行网格简化,二是对中低端机器上渲染Shader进行简化,尽可能做到单Pass渲染;
    2.如果是UI HUD开销很高(比如CreateVBO较高等),则需要对UI系统进行优化,具体可见UWA之前的UI优化相关的视频、文章和PPT对UI模块进行完善(可以参考UWA公众号的历史推送:uwatech 或者UWA博客:blog.uwa4d.com)。

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

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

  1. 使用NGUI作为UI解决方案的项目占据了相当高的比例,NGUI目前仍然是研发团队对于UI系统使用的主要解决方案;
  2. UI模块的性能开销很高,将近74%的研发团队都面临较为严重的性能问题;
  3. 建议研发团队根据UWA之前的UI优化相关的视频、文章和PPT对UI模块进行完善(可以参考UWA公众号的历史推送或者UWA博客:blog.uwa4d.com)。

三、逻辑代码
严重程度:地狱
请输入图片描述

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

请输入图片描述

  1. Instantiate实例化操作平均每次调用的CPU耗时主要分布在: 1.6~64.4 ms,均值为6.9ms,每1万帧总调用次数主要分布在: 55~5452 次;
  2. Instantiate的频繁实例化是太多数研发团队非常容易忽视的问题。

请输入图片描述

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

请输入图片描述

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

四、粒子系统
严重程度:地狱
请输入图片描述

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

目前仅使用Mecanim动画系统的MOBA游戏项目占比为58.9%,仅使用Unity 3.x老版本动画系统的占比为4.1%,两种系统混合使用的占比为37.0%。
请输入图片描述

小结:
MOBA类型的动画模块开销是目前所有游戏类型中CPU开销最高的,ARPG可以根据设定好的剧情分布加载和卸载,MMORPG可以根据玩家的位置来动态加载,但MOBA是允许玩家根据小地图快速切屏的,所以以上方式均不适用。经过统计,MOBA游戏中一场5V5战斗基本上需要保证90-110个Skinned Mesh在不停进行动画和蒙皮计算,这是动画系统开销如此高的原因之一。

建议:

  1. 根据场景中角色位置或者视域体范围,对场景中的英雄、小兵和炮塔等需要进行动画计算的GameObject进行分级控制,比如Disable其Animator组件等;
  2. 开启Optimize Game Objects选项,一切策划需求为其让路;
  3. 善用缓存池,尽可能避免如下图中Animator.Initialize的频繁耗时。
    请输入图片描述

◆◆◆

内存模块

目前MOBA项目中的内存占用普遍较高,但泄露问题的占比仅为23.3%,大幅低于其他游戏类型游戏。

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

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

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

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

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

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

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

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

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

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




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

目录
相关文章
|
4月前
|
存储 测试技术 UED
Qt中实现界面回放的艺术:从理论到代码“ (“The Art of Implementing UI Playback in Qt: From Theory to Code
Qt中实现界面回放的艺术:从理论到代码“ (“The Art of Implementing UI Playback in Qt: From Theory to Code
112 1
|
14天前
|
前端开发 图形学 开发者
【独家揭秘】那些让你的游戏瞬间鲜活起来的Unity UI动画技巧:从零开始打造动态按钮,提升玩家交互体验的绝招大公开!
【9月更文挑战第1天】在游戏开发领域,Unity 是最受欢迎的游戏引擎之一,其强大的跨平台发布能力和丰富的功能集让开发者能够迅速打造出高质量的游戏。优秀的 UI 设计对于游戏至关重要,尤其是在手游市场,出色的 UI 能给玩家留下深刻的第一印象。Unity 的 UGUI 系统提供了一整套解决方案,包括 Canvas、Image 和 Button 等组件,支持添加各种动画效果。
37 3
|
17天前
|
JavaScript 前端开发 安全
[译] 在 Vue 组件中分离 UI 和业务逻辑。
[译] 在 Vue 组件中分离 UI 和业务逻辑。
|
15天前
|
开发者 图形学 前端开发
绝招放送:彻底解锁Unity UI系统奥秘,五大步骤教你如何缔造令人惊叹的沉浸式游戏体验,从Canvas到动画,一步一个脚印走向大师级UI设计
【8月更文挑战第31天】随着游戏开发技术的进步,UI成为提升游戏体验的关键。本文探讨如何利用Unity的UI系统创建美观且功能丰富的界面,包括Canvas、UI元素及Event System的使用,并通过具体示例代码展示按钮点击事件及淡入淡出动画的实现过程,助力开发者打造沉浸式的游戏体验。
31 0
|
15天前
|
C# 开发者 设计模式
WPF开发者必读:命令模式应用秘籍,轻松简化UI与业务逻辑交互,让你的代码更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,命令模式是简化UI与业务逻辑交互的关键技术,通过将请求封装为对象,实现UI操作与业务逻辑分离,便于代码维护与扩展。本文介绍命令模式的概念及实现方法,包括使用`ICommand`接口、`RelayCommand`类及自定义命令等方式,并提供示例代码展示如何在项目中应用命令模式。
24 0
|
2月前
|
编解码 前端开发 图形学
【技术深度解析】多平台适配下的UI适配难题:U3D游戏UI错乱的终极解决方案
【7月更文第12天】随着移动设备市场的多元化,Unity游戏开发者面临的一大挑战是如何在不同分辨率和屏幕尺寸的设备上保持UI的一致性和美观性。游戏在高分辨率平板与低分辨率手机上呈现出的UI布局混乱、按钮错位等问题,严重影响玩家体验。本文旨在探讨Unity UI(UGUI)在多平台适配中的最佳实践,通过优化Canvas Scaler设置、灵活运用RectTransform和Anchor Points,以及高效利用设计工具,确保UI的完美适配。
215 1
|
2月前
Element UI 【表格合计】el-table 实战范例 -- 添加单位,自定义计算逻辑
Element UI 【表格合计】el-table 实战范例 -- 添加单位,自定义计算逻辑
124 0
|
3月前
|
存储 算法
数据结构和算法——散列表的性能分析(开放地址法的查找性能、期望探测次数与装填因子的关系、分离链接法的查找性能)
数据结构和算法——散列表的性能分析(开放地址法的查找性能、期望探测次数与装填因子的关系、分离链接法的查找性能)
51 0
|
4月前
|
运维 关系型数据库 MySQL
性能分析到底是不是性能测试工程师的能力?
【4月更文挑战第27天】性能分析到底是不是性能测试工程师的能力?
56 2
|
4月前
|
监控 Linux Windows
装备神器edex-ui别人以为我很屌其实我只会if和else搬运代码
装备神器edex-ui别人以为我很屌其实我只会if和else搬运代码
51 1