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

Unity for Intel x86 平台优化指南:第 1 部分

2016 年 4 月 19 日

CPOL

9分钟阅读

viewsIcon

8086

在本指南中,我们将介绍 Unity 软件中可用的各种工具和功能,以帮助您提高 Unity 项目的性能。

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

目录

为了充分利用 x86 平台,您可以对项目应用一系列性能优化,以最大限度地提高性能。在本指南中,我们将介绍 Unity* 软件中可用的各种工具和功能,以帮助您提高 Unity 项目的性能。我们将讨论如何处理纹理质量、批处理、剔除、光照烘焙和 HDR 效果等项目。

在本指南结束时,您将能够识别性能问题及其根本原因、关键优化方法以及 Unity 中良好游戏开发的实践方法。首先,我们将介绍一些可用于轻松识别应用程序中潜在瓶颈的工具。

工具

在本指南中,我们将探讨三个主要工具:Unity Profiler、GPA System Analyzer 和 GPA Frame Analyzer。每个工具本身在稳固的游戏开发方面都非常强大。如果您能够同时使用这三个工具,您将在简化和优化游戏方面取得显著进展。

图 1. Unity Profiler 主屏幕

Unity Profiler

Unity Profiler(图 1)是 Unity 中一个极其强大的工具,可以帮助您识别项目中各种子系统的问题。Profiler 图形部分包含不同的子分析器,显示特定硬件的指标。当前可用的子分析器包括 CPU 使用率、GPU 使用率、渲染、内存、音频、物理和 2D 物理。这些子分析器中的每一个都进一步细分为相关组件的各个部分,可以隔离这些部分以深入了解具体细节。例如,CPU 使用率包含渲染、脚本、物理、垃圾回收器、垂直同步和其他部分。

图形部分下方是“概览”窗口,您可以在其中看到包括计时信息和各种 Unity 子系统内存分配在内的指标列表。从渲染到垃圾回收的所有内容都在此处显示,检查应用程序中耗时最长的部分以寻找优化机会是一个好主意。单击图形的任何部分将暂停分析器中的更新,并允许您检查突出显示的帧。

Unity Profiler 可以附加到编辑器中正在运行的应用或独立版本。建议在尝试获得最准确的计时时始终附加到独立版本,以避免编辑器带来的开销。这可以通过转到窗口顶部的“Active Profiler”按钮并从通过 ADB(Android 调试桥)检测到的可用“Android Player”实例以及网络上的任何内容中进行选择来完成。

另一种选择是“深度分析”(Deep Profile)应用程序。此选项不建议常规使用,因为它会实际检测所有 Mono 代码,这在分析时可能会带来大量开销。幸运的是,Unity 提供了一种方法来显式检测您感兴趣的任何代码段。图 2 显示了如何检测代码,使其在分析器中显示您提供的任何标签。

图 2. 设置代码段以在 Profiler 中使用

GPA System Analyzer

图 3. GPA System Analyzer 实时视图

Intel® Graphics Performance Analyzers (Intel® GPA) 是一套图形分析和优化工具,可帮助游戏开发人员提高游戏和其他图形密集型应用程序的运行速度。Intel GPA 提供了广泛的功能,使开发人员能够深入分析图形 API 调用,以确定主要性能问题所在。本指南中显示的许多实验和指标均来自 Intel GPA。Intel GPA 允许您研究 Windows* 上的 DirectX* 应用和在运行 Android 的特定 Intel® 处理器系统上运行的 OpenGL ES* 应用的图形工作负载。虽然它无法直接监视 OpenGL* API 调用,但您仍然可以使用 GPA System Analyzer 在 OpenGL 游戏运行时研究 GPU 和 CPU 指标。无论图形 API 如何,您还可以使用 GPA Platform Analyzer 查看详细的 CPU 负载,包括任何 OpenCL™ 活动。如果您想更深入地了解,Intel GPA 提供了一个 API,用于添加您自己的检测。GPA 工具集适用于 Android 和桌面,您可以在此处了解更多信息并下载 Intel GPA:www.intel.com/software/GPA/

第一步是使用 Intel GPA 收集实时性能信息。Intel GPA 具有两种不同的实时数据显示模式(均在上方显示):在应用程序顶部运行的头部显示 (HUD) 和通过网络连接到测试系统的 System Analyzer。任一工具都可以显示 DirectX 管道(某些 Intel 处理器上的 OpenGL ES 管道)、CPU 利用率和系统电源的指标。在支持的 Intel 处理器图形系统上,您还可以获得广泛的 GPU 硬件指标。HUD 和 System Analyzer 提供简单的实验,帮助您快速检测性能问题。有关 HUD 和 System Analyzer 的功能和特性的更多详细信息,请参阅 Intel GPA 文档

图 4. GPA System Analyzer 替代 HUD

要将指标的值包含在分析中,只需将其从左侧边栏拖到主图形区域即可。这些工具适用于 ARM* 设备,但不会有所有可在 Intel 处理器硬件上使用的指标。有关更多信息,请查看 Intel GPA 的 Windows 和 OS X 教程:WindowsOS X 在 Intel 硬件上可用的指标组如下

  • CPU
  • 设备 IO
  • 执行单元
  • 片段着色器
  • GPU
  • 输入装配器
  • 内存
  • OpenGL/DX
    • 状态指标
  • 输出混合器
  • 光栅器
  • 顶点着色器

对于 CPU 瓶颈,您可能会发现 Platform Analyzer 对于 DirectX 和 OpenGL 工作负载很有用。它显示了 CPU 活动的捕获跟踪。如果您向代码添加检测,您可以关联在 CPU 上运行的各个任务,并观察它们在 DirectX、驱动程序中以及进入 GPU 过程中的进度。为了帮助您确定瓶颈,GPA 包含一个“状态覆盖”(State Overrides)部分(图 5),允许您通过检查帧率波动与变化条件的对比来进行实验。一些示例

图 5. 可用的覆盖
  • 2x2 纹理
    • 从高分辨率纹理获取数据可能很昂贵。这将用 2x2 纹理替换场景中使用的所有纹理。检查此选项可能导致的显著性能变化表明一些纹理的大小可以减小以提高帧率。
  • 空硬件
    • 这将模拟一个无限快的 GPU。如果这提高了帧率,则您的代码很可能受驱动程序或 CPU 限制。
  • 禁用绘制调用
    • 这将模拟一个非常快的驱动程序,如果帧率波动,则表明您的代码可能受驱动程序限制。
  • 简单片段着色器
    • 这将用一个非常简单的片段着色器替换所有着色器。波动可能表明着色器应进行优化以提高性能。

实验部分下方是平台设置滑块。此功能允许您以各种频率运行 CPU。这将有助于确定瓶颈,即使您的游戏/应用在您用于测试的任何设备上都以最大帧率运行。这也可以用来验证您的游戏/应用是否可以在最广泛的设备上运行。CPU 频率滑块的另一个很棒的用途是强制设置特定频率,以防止像 Intel® Turbo Boost 这样的技术扭曲测试结果。

最后,您可以单击窗口顶部的相机图标来捕获帧。然后,系统分析器将记录生成游戏/应用单帧所需的所有内容(状态更改、计时、纹理等)。这些信息将保存在一个可以由 Frame Analyzer 工具打开的文件中,以便进行更深入的分析。

GPA Frame Analyzer

图 6. GPA Frame Analyzer 显示更改记录和相关帧信息

Frame Analyzer 工具(图 5)允许您打开单个帧捕获。捕获的帧将包含所有状态更改、资源、计时信息等的记录。窗口顶部有一个图表,显示了帧中记录的每个单独的绘制调用。这些绘制调用根据渲染目标进行分隔,以便于可视化。可以通过左上角的下拉菜单更改图表的 X 和 Y 值。左侧是各个渲染目标的列表。左下部分显示当前突出显示的绘制调用的预览以及它们在帧上的显示方式。各种选项允许您自定义视图,包括突出显示绘制的像素或保持正常。您还可以选择调整未选中的所有内容如何影响预览(隐藏或不隐藏)。右下角有一组选项卡,可提供对当前选定绘制调用的更多洞察,包括

  • 帧概览
    • 按 GPU 管道阶段划分的整个帧的计时/状态值

图 7. 帧概览部分报告的值
  • 详细说明
    • 按 GPU 管道阶段划分的当前在图形/树中选定的绘制调用的计时/状态值。
  • 纹理(图 8 下文
    • 当前绑定的纹列表
    • 纹理选项卡下的左侧边栏可用于验证压缩、格式、 mip 级别等。

图 8. 几个绘制调用中使用的纹理视图
  • 状态
    • 选定绘制调用(s) 的状态设置
    • 可以编辑以查看对渲染目标预览和时序的影响
  • 着色器
    • 此部分允许您查看选定绘制调用中使用的着色器。
    • 您可以编辑着色器代码,并查看更改如何从视觉上影响场景预览。着色器代码的更改也将反映在计时更改中,因此您可以看到特定优化对帧时间的影响程度。

    • 图 9. 编辑着色器以输出硬编码的绿色值,使绘制调用速度提高 57.7%
  • 实验
    • 类似于 System Analyzer 中的实验部分,但可用于按绘制调用进行。
      图 10. 一个实验显示替换 2x2 纹理将使此绘制调用快 5.9%。更改也可以在“详细信息”选项卡中的图形管道的各个点上看到。
  • Geometry
    • 此选项卡在窗口中显示选定绘制调用的几何数据 3D 表示。
      图 11. 在“几何”选项卡中查看模型几何
  • API 日志
    • 显示选定绘制调用使用的所有 API 调用。这对于跟踪可能影响性能的不必要的状态更改非常有帮助。
© . All rights reserved.