Unity*是移动环境(Android* 和 iOS*)中最受欢迎的移动引擎之一,许多开发人员都用它来开发和发布游戏。 基于英特尔平台的 Android 支持 Unity 之前,游戏通常需要在仿真器上运行,以将 ARM* 本地代码转换成英特尔本地代码。 有些非原生 x86 游戏根本无法在英特尔平台上启动,而有些会遇到性能问题。 随着英特尔处理器的移动市场份额不断增长,许多开发人员开始对基于 x86 架构的 Android 支持感兴趣,并希望了解如何对游戏进行优化。
本文将介绍基于 Android 的原生支持所带来的性能提升,并以 Hero Sky: Epic Guild Wars 为例分享一些在英特尔® 架构上 增强性能的技巧。
图 1. Hero Sky: Epic Guild Wars
Hero Sky: Epic Guild Wars 的创作者 Innospark在使用各种商业游戏引擎开发移动游戏方面拥有丰富的经验,他还拥有自己的室内游戏引擎。 Hero Sky: Epic Guild Wars 是全球第一款基于 Unity 的游戏。 随着 Google Play* 应用商店中该游戏下载量的不断增加,公司开始听到用户关于无法启动游戏,以及在部分基于 Android 和英特尔处理器的设备上遭遇延迟的抱怨。 为此,Innospark 决定面向基于英特尔架构的 Android 操作系统对该游戏进行移植和优化。 本文将描述 Innospark 借助英特尔® 图形性能分析器(英特尔® GPA)提供的分析结果所采取的优化步骤,比如改变绘制顺序和消除不必要的阿尔法混合。
简介
Hero Sky: Epic Guild Wars 是一款支持所有 3D 图形的在线类策略塔防游戏。 Innospark 在基于英特尔® 凌动™ 处理器的平台(代号 “Bay Trail”)上开发和优化该游戏。 Bay Trail 参考设计与规格如下所示。
CPU | 英特尔® 凌动™ 处理器 四核,1.46 Ghz |
---|---|
操作系统 | Android* 4.4.4 |
RAM | 2GB |
分辨率 | 1920x1200 |
3DMark ICE Storm Unlimited 得分 | 10,386 |
显卡得分 | 9,274 |
物理技术得分 | 17,899 |
表 1. Bay Trail 8” 参考设计规格与 3DMark* 得分
下图所示为非原生 x86 和本地 x86 代码在 Bay Trail 参考设计上的性能对比。
图 2. x86 原生支持带来的性能提升
在性能检测过程中涉及的软件及其性能只有在英特尔微处理器的架构下才能得到优化。 诸如 SYSmark* 和 MobileMark* 等测试均系基于特定计算机系统、硬件、软件、操作系统及功能。 上述任何要素的变动都有可能导致测试结果的变化。 请参考其它信息及性能测试(包括结合其它产品使用时的运行性能)以对目标产品进行全面评估。 如欲了解更多信息,请访问:http://www.intel.com/performance。
游戏移植到基于英特尔架构的 Android 系统后,CPU 负载降低了 7.1%,FPS 上升了 27.8%,而执行时间缩短了 32.6%。 但由于 FPS 的上升,GPU 利用率提高了 26.7%。
在开发过程中,Innospark 使用英特尔® GPA 查找 CPU 和 GPU 瓶颈,并通过分析解决图形和性能方面的问题。
英特尔 GPA 系统分析器测量的基准性能为 59.01 FPS。 图形帧分析器仅测量 GPU 方面的 FPS,测量结果为 120.9 FPS。 出现 FPS 差异的原因是因为:系统分析器监控进程的实时活动,包括 CPU 和 GPU 工作,而图形帧分析器仅包含与 GPU 相关的工作,CPU 活动与向驱动程序和 GPU 提交的数据直接相关。
使用图形帧分析器进行深入分析
图 3 基准版截图
移植后,游戏的 FPS 为 59.01。 我们使用图形帧分析器对其进行更详细的分析,以降低 GPU 利用率和 CPU 负载。 下图所示为图形帧分析器捕获的信息。
总图元数 | 4,376 |
---|---|
GPU 持续时间(毫秒) | 8.56 ms |
帧显示时间(毫秒) | 9.35 毫秒 |
表 2. 基准帧信息
类型 | Erg | GPU 持续时间(毫秒) | GPU 内存读取 (MB) | GPU 内存写入 (MB) |
---|---|---|---|---|
天空 | 1 | 1.43 毫秒 | 0.2 MB | 7.6 MB |
地形 | 5 | 1.89 毫秒 | 9.4 MB | 8.2 MB |
表 3. 基准版本的高频率绘制调用成本
分析和优化高频率绘制调用
消除不必要的阿尔法混合
如果显示对象使用阿尔法混合,运行时必须将每个堆栈的显示对象的颜色值与背景颜色相结合,以确定最终的颜色。 因此,相比于调用不透明的颜色,阿尔法混合对处理器的占用率更高。 如果设备运行速度较低,额外计算还会对性能造成不利影响。 因此我们要消除不必要的阿尔法混合。
图形帧分析器可以启用或禁用绘制调用,以便开发人员进行测试和测量,而无需进行源修改。 该特性位于 State 选项卡下方的 Blend State 选项卡。
图 4. 如何在不进行源修改的情况下,通过图形帧分析器尝试启用/禁用阿尔法混合。
下图所示为禁用阿尔法混合后关于草地的绘制调用,且草地的 GPU 持续时间缩短了 26.0%。 大家还需注意,其 GPU 内存读取降低了约 97.2%。
| 基准 | 绘制顺序更改(天空) |
---|---|---|
GPU 时钟 | 1,466,843 | 1,085,794.5 |
GPU 持续时间(微秒) | 1,896.6 微秒 | 1,398.4 微秒 |
GPU 内存读取 (MB) | 7.6 MB | 0.2 MB |
GPU 内存写入 (MB) | 8.2 MB | 8.2 MB |
表 4. 禁用阿尔法混合后绘制调用详情
高效使用标压缩 (Z-cull) 技术
用 3D 显卡渲染对象时,三维数据转换成二维数据 (x-y),同时 Z 缓冲器或深度缓冲器用于保存各屏幕像素的深度信息(z 坐标)。 如果场景中的两个对象必须以相同的像素渲染,GPU 将对比两个深度,并在新对象接近观测器的情况下覆写当前像素。 标压缩流程可首先绘制最近的对象,以便较近的对象隐藏较远的对象,从而准确复制常见深度感知。 标压缩有助于提升渲染隐藏表面的性能。
游戏包含两类地形绘制:天空绘制和草地绘制。 Erg 1 是面向天空的绘制调用,而 Erg 5 则是面向草地的绘制调用。 由于大部分天空处于草地的后方,因此许多天空区域不会在游戏中显示。 然而,对天空的渲染早于草地,因而妨碍了有效标压缩。
图 5. 面向天空 (erg 1) 和草地 (erg5) 的绘制调用
以下是更改绘制顺序后天空的 GPU 持续时间。
图 6. 通过图形帧分析器更改面向天空的绘制顺序后的结果。
下表详细描述了更改绘制顺序后有关天空的信息,且草地的 GPU 持续时间也缩短了 88.0%。 大家还需注意,其 GPU 内存写入降低了约 98.9%。
| 基准 | 绘制顺序更改(天空) |
---|---|---|
GPU 时钟 | 1,113,276 | 133,975 |
GPU 持续时间(微秒) | 1,433 微秒 | 174.2 微秒 |
Early Z Failed | 0 | 2,145,344 |
示例编写 | 2,165,760 | 20,416 |
GPU 内存读取 (MB) | 0.2 MB | 0.0 MB |
GPU 内存写入 (MB) | 9.4 MB | 0.1 MB |
表 5. 更改绘制顺序(天空)的绘制调用详情
结果
下表详细介绍了消除不必要阿尔法混合并更改绘制顺序后有关 x86 优化的数据。 GPU 持续时间缩短了 25%,GPU 内存读/写分别降低了 42.6% 和 30.0%。 由于 Android 系统采用 vsync 模式,最高 FPS 为 60 fps,因此系统分析器显示 FPS 仅提高了 1.06,而图形帧分析器将 FPS 提高了 29.7%。
| X86 基准 | X86 优化后 |
---|---|---|
GPU 时钟 | 6,654,210 | 4,965,478 |
GPU 持续时间(微秒) | 8,565.2 微秒 | 6,386 微秒 |
Early Z Failed | 16,592 | 2,248,450 |
示例编写 | 6,053,311 | 2,813,997 |
GPU 内存读取 (MB) | 20.9 MB | 12.0 MB |
GPU 内存写入 (MB) | 28.6 MB | 20.0 MB |
基于系统分析器的 FPS | 59.01 | 60.07 |
基于图形帧分析器的 FPS | 120.9 | 156.8 |
表 6. 禁用阿尔法混合并更改绘制顺序(天空)所实现的性能提升
图 7. 优化 x86 本地支持后的性能提升
结论
如果开始在 Android x86 上优化游戏,开发人员应该首先面向 Android x86 移植游戏,然后确定应用瓶颈。 分析工具可帮助大家测量性能,并较早的查看 GPU 方面的性能问题。 英特尔 GPA 包含功能强大的分析工具,可帮助大家在不进行任何源修改的情况下进行尝试。
关于作者
Jackie Lee 是英特尔公司软件解决方案事业部的一名应用工程师,主要致力于基于英特尔凌动平台的应用性能调优。 加入英特尔公司之前,Jackie Lee 曾任职于 LG 公司的电子 CTO 部门。 他毕业于韩国中央大学,拥有计算机科学与工程专业的学士学位与硕士学位。
参考资料
英特尔® 图形性能分析器
https://software.intel.com/en-us/gpa
Innospark
http://www.innospark.com/#!home-en/c1vtc
Hero Sky: Epic Guild Wars
https://play.google.com/store/apps/details?id=com.innospark.herosky
Unity
http://unity3d.com
Unity 原生 X86 支持使 Square Enix 的 Hitman GO* 闪耀无比
https://software.intel.com/en-us/articles/unity-native-x86-support-shines-for-square-enix-s-hitman-go
阿尔法混合
http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36c11f3d612431904db9-7ffe.html