Quantcast
Channel: 英特尔开发人员专区文章
Viewing all articles
Browse latest Browse all 583

基于英特尔® 凌动™ 平台优化 Android* 游戏 mTricks Looting Crown

$
0
0

摘要

面向智能手机和平板电脑的游戏是应用商店内最常见的游戏类型。 过去,移动设备的 CPU 与 GPU 非常有限,极大地影响了设备性能。 因此,大多数游戏必须设置得非常简单。 现在, CPU 与 GPU 的性能得到了显著提升,人们也开始开发更多的高端游戏。 尽管如此,移动处理 器的性能仍然低于电脑处理器。

随着移动市场的壮大,许多电脑游戏开发商开始转向为移动平台制作游戏。 然而,传统的电 脑游戏设计决策与图形资源并不适合移动处理器,也无法有效实施。 本文将以 mTricks Looting Crown 为例,介绍如何分析和提升移动游戏的性能,以及如何面向移动平台优化图形 资源。 looting crown IA 版本现已发布,具体请访问下列链接。

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

mTricks Looting Crown
图 1. mTricks Looting Crown

1. 简介

mTricks 在使用不同商业游戏引擎开发电脑游戏方面具有丰富的经验。 在规划未来项目的 同时,mTricks 预测,由于移动 CPU 与 GPU 在性能方面的显著提升,移动市场已做好准备迎 接复杂的大型多人在线角色扮演游戏 (MMORPG)。 因此,他们将针对新项目的游戏目标平台从 电脑变成移动设备。

mTricks 首先将电脑代码库移植到 Android*。 然而,目标移动平台(包括基于英特尔® 凌动™ 处理器的平台(代号“Bay Trail”))的性能比预期低得多。

与迁移至移动设备的电脑开发人员一样,mTricks 也遇到了两个问题:

  1. 移动处理器的处理能力较低,这意味着传统电脑图形资源和设计不适用。
  2. 由于移动 CPU 与 GPU 在功能和性能上的变化,游戏显示和性能也会随着不同 的目标平台而发生变化。

2. 要点概述

Looting Crown 是 SNRPG(社交网络 + RPG)类型的游戏,支持所有 3D 图形和各种多玩 家模式(PvP、PvE 和 Clan vs Clan)。mTricks 以 Bay Trail 参考设计为基础对该游戏进 行了设计和优化,具体规格请参阅表 1。

表 1. Bay Trail 参考设计规格与 3DMark 得分

 Bay Trail 参考设计 10”
CPU英特尔® 凌动™ 处理器 四核 (1.46 Ghz)
RAM2GB
分辨率2560 x 1440
3DMark ICE Storm Unlimited 得分15,094
显卡得分13,928
物理技术得分21,348

在开发过程中,mTricks 使用英特尔® 图形性能分析器(英特尔® GPA)查找 CPU 和 GPU 瓶颈,并通过分析解决图形资源和性能的问题。

基准性能为 23 fps,图 2 所示为 2 分钟运行时间内关于 GPU 利用率和目标应用 CPU 负载的统计数据。 平均 CPU 利用率约为 91%,而目标应用 CPU 负载约为 27%。

英特尔® 图形性能分析器
图 2. 采用英特尔® 图形性能分析 器对比基准 CPU 与 GPU 负载

3. 瓶颈存在于 CPU 还是 GPU 之中?

有两种方法可以找到 CPU 和 GPU 中的瓶颈。 一种是使用覆盖模式,另一种是改变 CPU 频率。

英特尔 GPA 系统分析器提供“禁用绘制调用” 覆写模式,以帮助开发人员 查找 CPU 或 GPU 中的瓶颈。 运行该覆写模式后,将采用覆写模式和不采用覆写模式的结果 进行比较,然后查看下列指南:

表 2. 如何采用“禁用绘制调用”覆写模式分析游戏

打开“禁用绘制调用”覆写模式后的性能改 变瓶颈
如果 FPS 变化不大该游戏对 CPU 的依赖度较高;使用英特尔® GPA 性能分析 器或英特尔® VTune™ Amplifier 确定哪些功能耗费的时间最长
如果 FPS 提升该游戏对 GPU 的依赖度较高;使用英特尔 GPA 帧分析器 确定哪些绘制调用耗费的时间最长

英特尔 GPA 系统分析器可模拟不同 CPU 设置下的应用性能,非常有利于瓶颈分析。 如要 确定应用性能是否依赖于 CPU,请进行以下操作:

  1. 验证您的应用不依赖于垂直同步 (Vsync)。
    查看 Vsync 状态。 如果 “英特尔 GPA 系统分析器通知”面板中出现灰色高亮mTricks 

vsync,则表示已启用 Vsync。
    • 如果 Vsync 已禁用,继续进行第 2 步。
    • 如果 Vsync 已启用,请查看“英特尔 GPA 系统分 析器”窗口右上角的帧速率。 如果帧速率在 60 FPS 左右,说明您的应用依赖 Vsync, 也无法再提高 FPS。 否则,继续进行第 2 步。
  2. 在“英特尔 GPA 系统分析器”窗口的“平台设置” 面板(图 3)中使用滑动器施加一个不同的 CPU 频率。 如果更改 CPU 频率后 FPS 值有所变 化,说明应用有可能依赖 CPU。

“平台设置”面板
图 3. 在“平台设置”面板中改变 CPU 频率

表 3 所示为针对 Looting Crown 的模拟结果。 打开“禁用绘制调用” 覆 写模式后,FPS 保持不变。 一般情况下,这说明该游戏依赖于 CPU。 但是,“最高 CPU 频率”覆写也没有使 FPS 发生变化,这表示 Looting Crown 依赖于 GPU。 为应对这 种情况,我们返回了图 2 中的数据,图 2 显示,Bay Trail 设备上的 GPU 负载和 CPU 负 载分别为大约 91% 和 27%。 由于 GPU 瓶颈,CPU 无法得到有效利用。 我们继续进行这项计 划,首先优化 GPU 使用,然后重新测试。

表 3. 采用禁用绘制调用和最高 CPU 频率后的基准 FPS 结果

Bay Trail 设备FPS
最初23
禁用绘制调用23
最高 CPU 频率23

4. 识别 GPU 瓶颈

我们发现性能瓶颈存在于 GPU 之中。 作为后续步骤,我们采用英特尔 GPA 帧分析器分析 GPU 瓶颈的成因。 图 4 显示了捕捉的关于基准帧信息。

英特尔® GPA 帧分析器
图 4. 关于基准版本的英 特尔® GPA 帧分析器视图

4.1 将数百个静态网格合并成一个静态网格,并使用较大的纹理,以减少绘制调用数量。

表 4 和表 5 所示为英特尔 GPA 帧分析器捕捉的信息。

表 4. 所捕捉的基准帧信息

Erg 总数1,726
总图元数122,204
GPU 持续时间(毫秒)23 毫秒
框架显示时间(毫秒)48 毫秒

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

类型Erg时间(毫秒)%
清晰00.2 毫秒0.5 %
海洋16 毫秒13.7 %
地形2~97720 毫秒41.9 %
草地19~97718 毫秒39.0 %
人物、建筑和效果978~167619 毫秒40.6 %
UI1677~17251 毫秒3.4 %

“地形”的总用时为 20 毫秒,而“地形”类别中“草地 ”的总用时为 18 毫秒。 这相当于“地形”处理用时的 90%。 所以我们 对此做进一步分析,以了解“草地”处理耗时的原因。

图 5 和图 6 所示为处理“地形”和“草地”时的 erg 输 出。

地形
图 5. 地形

“草地”纹理
图 6. “草地”纹理

Looting Crown 通过重复四次绘制小块草地来绘制地形。 因此处理“地形 ”过程中绘制调用的数量为 960。 小块草地的绘制时间很短;不过,绘制调用本身会产 生开销,所以该运行过程比较昂贵。 因此,我们推荐将数百个静态网格合并成一个静态网格,并 使用较大的纹理,以减少绘制调用数量。 更改后的结果请见表 6。

表 6. 小纹理和大纹理的绘制成本对比

小纹理(毫秒)18 毫秒
erg 数量960
大纹理(毫秒)6 毫秒
erg 数量1

更改后的地形
图 7. 更改后的地形

尽管我们进行了简化,但基于拼贴的地形需要大量的绘制调用,因此减少绘制调用后,绘制 “草地”的时间节省了 12 毫秒。

4.2 优化图形资源

表 7 和表 8 所示为将大纹理应用于草地后,英特尔 GPA 帧分析器所捕捉的新信息。

表 7. 首次优化时捕捉的帧信息

Erg 总数179
总图元数27,537
GPU 持续时间(毫秒)24 毫秒
框架显示时间(毫秒)27 毫秒

表 8. 首次优化时的绘制调用成本

类型Erg时间(毫秒)%
清晰02 毫秒10.4 %
海洋186 毫秒23.6 %
地形1~17, 19, 23~9614 毫秒54.3 %
草地196 毫秒23.2 %
人物、建筑和效果20~22, 97~1311 毫秒5.9 %
UI132~1781 毫秒5.7 %

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

表 9. 采用“禁用绘制调用”和“最高 CPU 频率”进行首次 优化后的 FPS 结果

Bay Trail 设备FPS
最初40
禁用绘制调用60
最高 CPU 频率40

表 9 显示,“禁用绘制调用”模拟提高了 FPS,但“最高 CPU 频率 ”模拟没有改变 FPS。 因此,我们了解到,Looting Crown 仍然依赖于 GPU。 接着, 我们又重新检查了 CPU 负载和 GPU 利用率。

英特尔® 图形性能分析器
图 8. 采用英特尔® 图形性能分析 器进行首次优化后的 CPU 与 GPU 负载

图 8 显示,在 Bay Trail 设备上,GPU 负载约为 99%,而 CPU 负载约为 13%。 由于 Bay Trail 存在 CPU 瓶颈,CPU 无法支持性能加速。

Looting Crown 最初是针对电脑开发的,因此现有的图形资源不适用于 GPU 和 CPU 处 理能力较低的移动设备。 因此,我们对图形资源进行了几次优化,如下所示。

  1. 最大限度地减少绘制调用
    1. 减少材料: 对象材料的数量从 10 减至 2。
    2. 减少颗粒层:
  2. 最大限度地减少多边形
    1. 借助 “Simplygon” 工具应用于人物的 LOD(细节级别)。
      大量减少 LOD

      图 9. LOD 显著减少后的人物

    2. 最大限度地减少用于地形的多边形: 首先,我们最大限度地 减少了针对远山(对细节要求不高)的多边形。 然后,我们最大限度地减少了针对平原(可通过两 个三角形表示)的多边形。
  3. 使用优化后的光照图
    1. 删除针对“当日时间”的动态光。
    2. 最大限度地缩小每个网格的光照图尺寸: 减少用于背景的 光照图数量。
  4. 最大限度地减少渲染状态的变化
    1. 减少材料后,渲染状态和纹理的变化也减少了。
  5. 分离静态网格的动画部分
    1. Havok 引擎不支持对对象的动画部分进行部分更新。 即使 是针对对象中的静态网格部分,仅包含一个小型移动网格的对象也需要进行更新。 因此,我们 将动态部分(图 10 红色圈中的烟雾)从对象中分离出来,将其分成两个独立的对象模型。

分离后的动画
图 10. 从静态网格中分离出来的烟雾 动画

4.3 高效使用标压缩 (Z-cull) 技术

用 3D 显卡渲染对象时,三维数据转换成二维数据 (x-y),同时 Z 缓冲器或深度缓冲器用 于保存各屏幕像素的深度信息(z 坐标)。 如果屏幕中有两个对象必须采用相同的像素进行渲染 ,GPU 将对比两个深度。 如果新对象离观测器更近,GPU 将覆写当前像素。 因此,Z 缓冲器将 准确复制常见深度感知。 标压缩过程是首先绘制最近的对象,以便较近的对象隐藏较远的对象 。 标压缩有助于提升渲染隐藏表面的性能。

在 Looting Crown 中包含两种类型的地形绘制: 海洋绘制和草地绘制。 由于大部分海洋 在草地的后面,所以许多海洋地区被隐藏起来。 然而,对海洋的渲染早于草地,因而妨碍了有效 标压缩。 图 11 和图 12 所示分别为绘制海洋和草地时的 GPU 持续时间;两者的 erg 数分 别为 18 和 19。 如果草地渲染早于海洋,之后的深度测试将表明不需要绘制海洋像素。 这样 将会缩短绘制海洋的 GPU 持续时间。 图 13 所示为第二次优化时的海洋绘制成本。 GPU 持 续时间从 6 毫秒缩短至了 0.3 毫秒。

首次优化时的海洋绘制成本
图 11. 首次优化时的海洋绘制成本

首次优化时的草地绘制成本
图 12. 首次优化时的草地绘制成本

第二次优化时的海洋绘制成本
图 13. 第二次优化时的海洋绘 制成本

结果

通过这些步骤,mTricks 面向移动设备优化了所有图形资源,同时未对图形质量造成任何 影响。 Erg 数量从 1,726 减少至了 124;图元数从 122,204 减少至了 9,525。

mTricks Looting Crown
图 14. 图形资源的变化

图 15 和表 10 所示为优化后的成效。 优化后,Bay Trail 设备的 FPS 从 23 FPS 升 至 60 FPS。

FPS 提升
图 15. FPS 提升

表 10. 变化后的 FPS、GPU 利用率和应用 CPU 负载

 基准首次优 化第二次 优化
FPS23 FPS45 FPS60 FPS
GPU 利用率 (%)91%99%71%
应用 CPU 负载 (%)27%13%22%

首次优化后,Bay Trail 依然对 GPU 依赖较高。 之后我们进行了第二次优化,以通过优 化图形资源和 z 缓冲器的使用来减少 GPU 工作负载。 最终,Bay Trail 设备的 FPS 达到 了最高 (60)。 由于 Android 使用 Vsync,60 FPS 是 Android 平台所能实现的最高性能 。

结论

开始优化游戏时,您首先需要确定应用瓶颈在哪里。 英特尔 GPA 有助于通过功能强大的分 析工具实现这一目的。如果您的游戏对 CPU 依赖较高,英特尔 VTune Amplifier 将会为您 提供重大帮助。 如果您的游戏对 GPU 依赖较高,您可以使用英特尔 GPA 了解详细信息。如要 确定 GPU 瓶颈,您可以尝试寻找高效的方法减少绘制调用、多边形数量和渲染状态的变化。 您 还可以查看准确的地形纹理尺寸、动画对象、光照图,以及 z 缓冲器准确的标压缩顺序。

关于作者

Tai Ha 是一名应用工程师,主要致力于支持 APAC 领域的在线游戏。 他自 2005 年加入 英特尔公司,主要负责医疗保健、服务器、客户端和移动平台等领域的英特尔® 架构优化。 加入 英特尔公司之前,Tai 自 1999 年起供职于美国圣克拉拉市的生物计量公司,担任安全中间件 架构师。 He 毕业于韩国汉阳大学,拥有计算机科学专业学士学位。

Jackie Lee 是英特尔公司软件解决方案事业部的一名应用工程师,主要致力于基于英特 尔® 凌动™ 平台的应用性能调优。 加入英特尔公司之前,Jackie Lee 曾任职于 LG 公司的 电子 CTO 部门。 他毕业于韩国中央大学,拥有计算机科学与工程专业的学士学位与硕士学 位。

参考资料

looting crown IA 版现已在 Google Play 应用商店发布:

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

英特尔® 图形性能分析器
https://software.intel.com/zh-cn/vcsource/tools/intel-gpa

Havok
http://www.havok.com

mTricks
https://www.facebook.com/mtricksgame

英特尔、Intel 标识、Atom 和凌动是英特尔公司在美国和/或其他国家(地区)的商标。
英特尔公司 © 2014 年版权所有。 所有权保留。
*其他的名称和品牌可能是其他 所有者的资产。


Viewing all articles
Browse latest Browse all 583

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>