65.9K
CodeProject 正在变化。 阅读更多。
Home

优化 Intel® Atom™ 平台上 Android 游戏 mTricks Looting Crown

2015 年 7 月 6 日

CPOL

13分钟阅读

viewsIcon

16099

本文以 mTricks Looting Crown 为例,介绍如何分析和提高移动游戏的性能,以及如何为移动平台优化图形资源。

Intel® Developer Zone 提供跨平台应用开发工具和指南、平台和技术信息、代码示例以及同行专业知识,帮助开发者创新和取得成功。加入我们的社区,参与 Android物联网Intel® RealSense™ 技术Windows 的开发,下载工具、获取开发套件、与志同道合的开发者交流想法,并参与黑客马拉松、竞赛、路演和本地活动。

摘要

智能手机和平板电脑游戏是应用商店中最受欢迎的类别。早期的移动设备在 CPU 和 GPU 方面存在显著限制,影响了性能。因此,大多数游戏必须设计得比较简单。如今,随着 CPU 和 GPU 性能的提高,越来越多的高端游戏被制作出来。然而,移动处理器的性能仍然不如 PC 处理器。

随着移动市场的增长,许多 PC 游戏开发者现在开始为移动平台开发游戏。然而,传统的游戏设计决策和 PC 游戏的图形资源并不适合移动处理器,可能无法良好运行。本文以 mTricks Looting Crown 为例,介绍如何分析和提高移动游戏的性能,以及如何为移动平台优化图形资源。Looting Crown 的 IA 版本现已发布,链接如下。

https://play.google.com/store/apps/details?id=com.barunsonena.looting

图 1. mTricks Looting Crown

1. 引言

mTricks 在使用各种商业游戏引擎进行 PC 游戏开发方面拥有丰富的经验。在规划下一个项目时,mTricks 预测到,鉴于移动 CPU 和 GPU 性能的增长,移动市场已准备好迎接一款复杂的 MMORPG。因此,它将其新项目的目标平台从 PC 更改为移动设备。

mTricks 首先将 PC 代码库移植到 Android*。然而,在包括基于 Intel® Atom™ 处理器(代号为 Bay Trail)的平台在内的目标移动设备上的性能均不如预期。

mTricks 遇到了 PC 开发者转型到移动开发时经常面临的两个问题:

  1. 移动处理器的低处理能力意味着传统的 PC 图形资源和设计不适用。
  2. 由于移动 CPU 和 GPU 之间在功能和性能上的差异,游戏在不同目标平台上的显示效果和性能也各不相同。

2. 执行摘要

Looting Crown 是一款 SNRPG(社交网络 + RPG)风格的游戏,支持全 3D 图形和各种多人模式(PvP、PvE 和部落对部落)。mTricks 在 Bay Trail 参考设计上进行了开发和优化,其规格如表 1 所示。

表 1. Bay Trail 参考设计规格和 3DMark 分数

  Bay Trail 参考设计 10"
CPU Intel® Atom™ 处理器 四核 1.46 Ghz
RAM 2GB
分辨率 2560 x 1440
3DMark ICE Storm Unlimited 分数 15,094
图形分数 13,928
物理分数 21,348

mTricks 使用 Intel® Graphics Performance Analyzers (Intel® GPA) 在开发过程中查找 CPU 和 GPU 的瓶颈,并利用分析结果解决图形资源和性能问题。

基线性能为 23 fps,图 2 显示了运行 2 分钟期间的 GPU 忙碌度和目标应用 CPU 负载统计。GPU 忙碌度的平均值约为 91%,目标应用 CPU 负载约为 27%。

图 2. 使用 Intel® GPA System Analyzer 比较基线版本的 CPU 和 GPU 负载

3. CPU 和 GPU 之间的瓶颈在哪里?

要知道 CPU 和 GPU 之间的瓶颈在哪里,有两种方法。一种是使用覆盖模式,另一种是更改 CPU 频率。

Intel GPA System Analyzer 提供“禁用绘制调用 (Disable Draw Calls)”覆盖模式,以帮助开发者确定 CPU 和 GPU 之间的瓶颈。运行此覆盖模式后,将覆盖模式开启和关闭的结果进行比较,并按照以下指南进行检查。

表 2. 使用禁用绘制调用覆盖模式分析游戏的方法

“禁用绘制调用”覆盖模式的性能变化 瓶颈
如果 FPS 变化不大 游戏受 CPU 限制;使用 Intel® GPA Platform Analyzer 或 Intel® VTune™ Amplifier 来确定哪些函数花费的时间最多。
如果 FPS 提高 游戏受 GPU 限制;使用 Intel® GPA Frame Analyzer 来确定哪些绘制调用花费的时间最多。

Intel GPA System Analyzer 可以模拟各种 CPU 设置下的应用性能,这对于瓶颈分析非常有用。要确定您的应用程序性能是否受 CPU 限制,请执行以下操作:

  1. 验证您的应用程序没有受到垂直同步 (Vsync) 的限制。
    检查 Vsync 状态。如果在 Intel GPA System Analyzer 通知窗格中看到灰色高亮显示的 ,则表示 Vsync 已启用。
    • 如果 Vsync 已禁用,请继续执行步骤 2。
    • 如果 Vsync 已启用,请查看 Intel GPA System Analyzer 窗口右上角的帧速率。如果帧速率约为 60 FPS,则您的应用程序受 Vsync 限制,没有提高 FPS 的空间。否则,请继续执行步骤 2。
  2. 使用 Intel GPA System Analyzer 窗口中的平台设置窗格(图 3)中的滑块强制设置不同的 CPU 频率。如果修改 CPU 频率时 FPS 值发生变化,则应用程序很可能受 CPU 限制。

图 3. 在平台设置窗格中修改 CPU 频率

表 3 显示了 Looting Crown 的模拟结果。在“禁用绘制调用”覆盖模式下,FPS 保持不变。这通常表明游戏受 CPU 限制。然而,“最高 CPU 频率”覆盖模式也没有改变 FPS,这暗示 Looting Crown 受 GPU 限制。为了解决这个问题,我们回顾了图 2 中的数据,该数据显示在 Bay Trail 设备上,GPU 负载约为 91%,CPU 负载约为 27%。由于 GPU 瓶颈,CPU 未能得到充分利用。我们继续执行首先优化 GPU 使用率,然后重新测试的计划。

表 3. 禁用绘制调用和最高 CPU 频率的基线版本的 FPS 结果。

Bay Trail 设备 帧率 (FPS)
Original 23
禁用绘制调用 23
最高 CPU 频率。 23

4. 识别 GPU 瓶颈

我们发现性能瓶颈在于 GPU。下一步,我们使用 Intel GPA Frame Analyzer 分析了 GPU 瓶颈的原因。图 4 显示了基线版本的捕获帧信息。

图 4. 基线版本的 Intel® GPA Frame Analyzer 视图

4.1 通过合并数百个静态网格为一个静态网格并使用更大的纹理来减少绘制调用次数。

图 4 和 5 显示了 Intel GPA Frame Analyzer 捕获的信息。

表 4. 基线版本的捕获帧信息

总 Ergs 1,726
总图元数量 122,204
GPU 持续时间,毫秒 23 毫秒
显示帧的时间,毫秒 48 毫秒

表 5. 基线版本的绘制调用成本

类型 Erg 时间(毫秒) %
Clear 0 0.2 毫秒 0.5 %
海洋 1 6 毫秒 13.7 %
地形 2~977 20 毫秒 41.9 %
19~977 18 毫秒 39.0 %
角色、建筑和特效 978~1676 19 毫秒 40.6 %
UI 1677~1725 1 毫秒 3.4 %

“地形”的总时间为 20 毫秒,而“地形”中的“草”的时间为 18 毫秒。这占“地形”处理时间的约 90%。因此,我们进一步分析了为什么“草”处理花费大量时间。

图 5 和图 6 显示了“地形”和“草”的 ergs 输出。

图 5. 地形

图 6. “草”的纹理

Looting Crown 通过反复绘制一个小草四边形来绘制地形。因此,“地形”中的绘制调用次数为 960。单个小草的绘制时间非常短;然而,绘制调用本身存在开销,这使其成为一项昂贵的操作。因此,我们建议通过将数百个静态网格合并为一个静态网格并使用更大的纹理来减少绘制调用次数。表 6 显示了更改后的结果。

表 6. 小纹理和大纹理之间的绘制成本比较

小纹理,毫秒 18 毫秒
Ergs 数量 960
大纹理,毫秒 6 毫秒
Ergs 数量 1

图 7. 更改后的地形

尽管我们进行了简化,但基于瓦片的地形需要大量的绘制调用。因此,我们减少了绘制调用次数,并在绘制“草”时节省了 12 毫秒。

4.2 优化图形资源

表 7 和表 8 显示了应用了草的大纹理后的 Intel GPA Frame Analyzer 捕获的新信息。

表 7. 第 1 次优化版本的捕获帧信息

总 Ergs 179
总图元数量 27,537
GPU 持续时间,毫秒 24 毫秒
显示帧的时间,毫秒 27 毫秒

表 8. 第 1 次优化版本的绘制调用成本

类型 Erg 时间(毫秒) %
Clear 0 2 毫秒 10.4 %
海洋 18 6 毫秒 23.6 %
地形 1~17, 19, 23~96 14 毫秒 54.3 %
19 6 毫秒 23.2 %
角色、建筑和特效 20~22, 97~131 1 毫秒 5.9 %
UI 132~178 1 毫秒 5.7 %

我们检查了游戏是否仍然受 GPU 限制。我们使用“禁用绘制调用”和“最高 CPU 频率”模拟进行了相同的测量。

表 9. 使用“禁用绘制调用”和“最高 CPU 频率”的第 1 次优化版本的 FPS 结果

Bay Trail 设备 帧率 (FPS)
Original 40
禁用绘制调用 60
最高 CPU 频率。 40

在表 9 中,“禁用绘制调用”模拟提高了 FPS 数字,而“最高 CPU 频率”模拟没有改变 FPS 数字。因此,我们知道 Looting Crown 仍然受 GPU 限制。我们还再次检查了 CPU 负载和 GPU 忙碌度。

图 8. 使用 Intel® GPA System Analyzer 的第 1 次优化版本的 CPU 和 GPU 负载

图 8 显示,在 Bay Trail 上,GPU 负载约为 99%,CPU 负载约为 13%。由于 Bay Trail 上的 GPU 瓶颈,CPU 仍然无法提供加速。

Looting Crown 最初是为 PC 开发的,因此现有的图形资源不适合 GPU 和 CPU 处理能力较低的移动设备。我们对图形资源进行了一些优化,如下所示:

  1. 最小化绘制调用
    1. 减少材质数量:对象材质数量从 10 个减少到 2 个。
    2. 减少粒子层数。
  2. 最小化多边形数量
    1. 使用“Simplygon”工具为角色应用了 LOD(细节级别)。
      图 9. 逐渐减少 LOD 的角色
    2. 最小化地形使用的多边形数量:首先,我们最小化了不需要太多细节的远山的多边形数量。其次,我们最小化了可以用两个三角形表示的平坦地形的多边形数量。
  3. 使用优化的光照贴图
    1. 移除了“一天中的时间”的动态光照。
    2. 最小化每个网格的光照贴图大小:减少了背景使用的光照贴图数量。
  4. 最小化渲染状态更改
    1. 减少了材质数量,这也减少了渲染状态更改和纹理更改。
  5. 将动画部分与静态网格解耦
    1. Havok 引擎不支持对对象的动画部分进行部分更新。带有仅移动少量网格的对象,即使是对象的静态网格部分也被更新。因此,我们将动画部分(图 10 中的烟雾、红圈)与对象的其余部分分离,将其分成两个单独的对象模型。

图 10. 将烟雾动画与静态网格解耦

4.3 高效应用 Z 剔除

当 3D 图形卡渲染对象时,三维数据被转换为二维数据 (x-y),并且 Z 缓冲区或深度缓冲区用于存储每个屏幕像素的深度信息(z 坐标)。如果场景中的两个对象必须在同一像素上渲染,GPU 会比较两个深度。如果新对象更靠近观察者,GPU 会覆盖当前像素。因此,Z 缓冲区将正确地重现通常的深度感知。Z 剔除过程是先绘制最近的对象,以便较近的对象隐藏较远的对象。Z 剔除在隐藏表面渲染方面提供了性能改进。

在 Looting Crown 中,有两种地形绘制方式:海洋绘制和草地绘制。由于大部分海洋区域被草地遮挡,因此许多海洋区域被隐藏了。然而,海洋比草地更早被渲染,这阻碍了有效的 Z 剔除。图 11 和图 12 分别显示了绘制海洋和草地的 GPU 持续时间;erg 18 用于海洋,erg 19 用于草地。如果先渲染草地再渲染海洋,那么深度测试将表明不需要绘制海洋像素。这将导致海洋绘制的 GPU 持续时间减少。图 13 显示了第二次优化中海洋的绘制成本。GPU 持续时间从 6 毫秒减少到 0.3 毫秒。

图 11. 第 1 次优化中海洋的绘制成本

图 12. 第 1 次优化中草地的绘制成本

图 13. 第 2 次优化中海洋的绘制成本

结果

通过采取这些步骤,mTricks 将所有图形资源优化为适合移动设备,而没有牺牲图形质量。Erg 数量从 1,726 减少到 124;图元数量从 122,204 减少到 9,525。

图 14. 图形资源的变化

图 15 和表 10 显示了所有这些优化的结果。优化后,Bay Trail 设备上的 FPS 从 23 FPS 提高到 60 FPS。

图 15. FPS 提升

表 10. FPS、GPU 忙碌度和应用 CPU 负载的变化

  基线 第一次优化 第二次优化
帧率 (FPS) 23 FPS 45 FPS 60 FPS
GPU 忙碌度 (%) 91% 99% 71%
应用 CPU 负载 (%) 27% 13% 22%

第一次优化后,Bay Trail 仍然受 GPU 限制。我们进行了第二次优化,通过优化图形资源和 z 缓冲区使用来减少 GPU 工作负载。最终,Bay Trail 设备达到了最大值 (60) FPS。由于 Android 使用 Vsync,60 FPS 是 Android 平台上的最高性能。

结论

当您开始优化游戏时,首先要确定应用程序的瓶颈在哪里。Intel GPA 可以通过一些强大的分析工具帮助您做到这一点。如果您的游戏受 CPU 限制,那么 Intel VTune Amplifier 是一个有用的工具。如果您的游戏受 GPU 限制,那么您可以使用 Intel GPA 找到更多详细信息。要修复 GPU 瓶颈,您可以尝试找到一种有效的方法来减少绘制调用、多边形数量和渲染状态更改。您还可以检查地形纹理、动画对象、光照贴图的大小,以及 Z 缓冲区剔除的正确顺序。

关于作者

Tai Ha 是一名应用工程师,专注于在中国和亚太地区(APAC)推动网络游戏的开发。他自 2005 年以来一直在英特尔工作,涵盖医疗、服务器、客户端和移动平台上的 Intel® 架构优化。在加入英特尔之前,Tai 自 1999 年起在美国圣克拉拉的生物识别公司担任安全中间件架构师。他拥有韩国 Hanyang 大学计算机科学学士学位。

Jackie Lee 是英特尔软件解决方案事业部的一名应用工程师,专注于在 Intel® Atom™ 平台上优化应用程序性能。在加入英特尔之前,Jackie Lee 曾在 LG 电子 CTO 部门工作。他拥有韩国中央大学计算机科学与工程专业的硕士和学士学位。

参考文献

Looting Crown 的 IA 版本现已在 Google Play 上发布

https://play.google.com/store/apps/details?id=com.barunsonena.looting

Intel® Graphics Performance Analyzers
https://software.intel.com/en-us/vcsource/tools/intel-gpa

Havok
http://www.havok.com

mTricks
https://#/mtricksgame

Intel、Intel 徽标和 Atom 是 Intel Corporation 在美国和/或其他国家的商标。
版权所有 © 2014 英特尔公司。保留所有权利。
*其他名称和品牌可能被声明为他人的财产。

© . All rights reserved.