面向英特尔® x86 平台的 Unity* 优化指南: 第 1 部分
目录
如要充分发挥 x86 平台的作用,您可以在项目中进行多种性能优化,以最大限度地提升性能。 在本指南中,我们将展示 Unity* 软件中的多种工具和特性,以帮助您增强 Unity 项目的性能。 我们将介绍如何处理纹理质量、批处理、标压缩、光烘烤和 HDR 效果。
在本指南结束之际,您将能够了解 Unity 中的性能问题及其成因、关键优化和有助于开发优秀游戏的方法。 首先我们来看看有助于轻松识别应用中潜在热点的工具。
工具
在本指南中,我们将探讨三种主要工具: Unity 分析器、GPA 系统分析器和 GPA 帧分析器。 每种工具本身都拥有强大的游戏开发功能。 如果您能够组合使用所有三种工具,您将会在游戏简化和优化方面取得显著成效。
图 1. Unity 分析器主屏幕
Unity 分析器
Unity 分析器(图 1)是 Unity 中一个极其强大的工具,它可帮助您识别项目中各种子系统的问题。 分析器图形部分拥有不同的子分析器,后者可显示面向特定硬件的指标。 当前可用的子分析器包含 CPU 使用、GPU 使用、渲染、内存、音频、物理和 2D 物理等指标。 每个子分析器都可进一步划分为相关组件部分,可将这些部分相分离以深入了解细节。 例如,CPU 使用包含渲染、脚本、物理、垃圾收集器、垂直同步和其他部分。
图形部分下方是概览窗口,在此窗口中您可以看到一个指标列表,包括面向各种 Unity 子系统的计时信息和内存分配。 从渲染到垃圾收集,一切都在此显示,最好能检查下应用中优化耗时最长的部分。 单击图形的任何部分都会暂停分析器更新,让您研究突出显示的帧。
Unity 分析器可连接到编辑器或独立构件中的运行应用。 如要获得最准确的计时以避免编辑器开销,建议您不时地连接到独立构件。 具体操作是:点击窗口顶部的 ‘Active Profiler’ 按钮,从 ‘Android Player’ 的可用实例以及网络上的任何内容进行选择,可通过 ADB (Android Debug Bridge) 检测可用实例。
另一个选项是“深入分析”应用。 不建议将该选项用于一般用途,因为它会实际使用所有单代码,这样会造成大量的分析开销。 幸运的是,Unity 能够直接使用您感兴趣的任何代码段。图 2 展示了如何利用代码,以便无论您提供何种标签,它都会显示在分析器上:
图 2. 在 Profiler 中设置可供使用的代码段
GPA 系统分析器
图 3. GPA 系统分析器实时视图
英特尔® 图形性能分析器(英特尔® GPA) 是一套图形分析和优化工具,可帮助游戏开发人员加快游戏和其他图形密集型应用的运行速度。 英特尔® GPA 提供了广泛的功能,支持开发人员深入分析图形 API 调用以确定主要性能问题的原因。 本指南介绍的许多实验和指标都来自英特尔® GPA。 英特尔® GPA 支持您研究 DirectX* 应用在 Windows* 上的图形工作负载以及 OpenGL ES* 应用在部分运行 Android 的英特尔® 处理器系统上的图形工作负载。 尽管它无法直接监控 OpenGL* API 调用,但是在 OpenGL 游戏运行期间,您仍能够使用 GPA 系统分析器来研究 GPU 和 CPU 指标。 无论图形 API 如何,您都可以使用 GPA 平台分析器来查看详细的 CPU 负载,包括任何 OpenCL™ 活动。 如要查看更多详情,英特尔® GPA 可为您提供 API 来添加自己的工具。 GPA 工具集适用于 Android 和桌面,如欲了解更多信息并下载英特尔® GPA,请登录:www.intel.com/software/GPA/
第一步,使用英特尔® GPA 收集实时性能信息。 英特尔® GPA 拥有两种不同的实时数据显示模式(如上所示): 在应用顶层运行的平视显示器 (HUD),以及通过网络连接到测试系统的系统分析器。 两种工具都可以显示来自 DirectX 管线(一些英特尔® 处理器上的 OpenGL ES 管线)的指标、CPU 利用率和系统电源。 在受支持的英特尔® 处理器图形系统上,您也可以获得大量的 GPU 硬件指标。 HUD 和系统分析器提供了简单的实验,可帮助您快速检测性能问题。 请参见英特尔 GPA 文档,了解有关 HUD 与系统分析器特性和功能的更多详情。
图 4. GPA 系统分析器备用 HUD
如要把指标值添加到分析中,只需将其从左侧栏拖到主图形区域。 这些工具能够在 ARM* 设备上运行,但是在基于英特尔® 处理器的硬件上并非拥有所有指标。 更多信息,请参见面向 Windows 和 OS X GPA 教程。以下各组指标在英特尔® 硬件上提供:
- CPU
- 设备 IO
- 执行单元
- 片段着色器
- GPU
- 输入-装配器
- 内存
- OpenGL/DX
- 状态指标
- 输出-合成器
- 功耗
- 光栅器
- 顶点着色器
就 CPU 瓶颈而言,您可能会发现平台分析器可用于 DirectX 和 OpenGL。 它显示了所捕获的 CPU 活动痕迹。 如果想为代码添加工具,您可以将在 CPU 上运行的单个任务相关联,并通过 DirectX 观察它们的进程,驱动程序以及 GPU。 为了帮助您确定瓶颈,GPU 中包含了一个“状态覆盖”部分(图 5),支持您开展实验,检查在不断变化的条件下的帧率浮动。 几个示例:
图 5. 可用覆盖
- 纹理 2x2
- 从高分辨率纹理中提取数据的成本十分高昂。 这将使用 2x2 纹理取代场景中所用的全部纹理。 通过勾选这一选项所导致的显著性能变化显示,可以缩小一些纹理的尺寸来提高帧率。
- 空硬件
- 这将模拟一个无限快的 GPU。如果这能够增加帧率,您的代码就可能会与驱动程序或 CPU 相绑定。
- 禁用绘制调用
- 这将会模拟一个非常快的驱动程序,如果帧率浮动,则表示您的代码可能与驱动程序相绑定。
- 简单的片段着色器
- 这将使用一个非常简单的片段着色器取代所有着色器。浮动可能表示着色器应针对性能提升进行优化。
实验部分下方是平台设置滑块。 该特性支持您以不同的频率运行 CPU。 这可帮助确定瓶颈,即使您的游戏/应用正在任何测试设备上以最大帧率运行。 这也可被用于验证您的游戏/应用是否能在广泛的设备上运行。CPU 频率滑块的另一大用途是强制施加特定频率,以防止英特尔® 睿频加速等技术导致测试结果出现偏差。
最后,您可以点击窗口顶部的相机图标来捕获帧。 随后,系统分析器会记录用于制作游戏/应用单帧的每个细节(状态更改、时间、纹理等)。 可使用帧分析器工具打开存储这一信息的文件,以进行深入研究。
GPA 帧分析器
图 6. GPA 帧分析器显示变更记录和相关帧信息
帧分析器工具(图 5)支持您打开单帧捕获。 捕获的帧将包含对所有状态变更、资源、定时信息等的记录。 窗口顶部的图形显示了在帧中所记录的每个绘制调用。 为方便可视化,这些绘制调用按照渲染目标进行分离。 图形中的 X 和 Y 值可通过左上方的下拉菜单进行更改。 左侧是单独渲染目标列表。 左下方显示了当前突出显示的绘制调用的预览以及它们在帧上的出现方式。 您可以通过各种选项对视图进行自定义,包括突出显示绘制的像素或保持它们正常。 您也可以选择调整未选定对象对预览的影响方式(隐藏或不隐藏)。 右下角是选项卡集,这些选项卡可提供有关当前所选绘制调用的更多洞察,包括:
- 帧概述
- 在面向整个帧的 GPU 管线中按阶段细分的计时/状态值
图 7. 帧概述部分的报告值
- 详细信息
- 在面向图形/树中当前所选绘制调用的 GPU 管线中按阶段细分的计时/状态值
- 纹理(下图 8)
- 当前绑定的纹理列表
- 纹理选项卡下方的左侧栏可用于验证压缩、格式、mip 层等。
图 8. 少数绘制调用所用纹理的视图
- 状态
- 面向选定绘制调用的状态设置
- 可以进行编辑,以查看对渲染目标预览和计时的影响
- 着色器
- 这一部分将向您介绍选定绘制调用所用的着色器。
- 您可以编辑着色器代码,并查看这些变更如何在视觉上影响场景预览。着色器代码变更也会体现在定时变更上,因此您可以看到多少特定优化正在影响帧时间。
图 9. 编辑着色器以输出硬编码绿色值,将绘制调用速度加快 57.7%
- 实验
- 与系统分析器的实验部分相似,但可以按绘制调用使用。
图 10. 实验展示了替代 2x2 纹理如何将绘制调用速度加快 5.9%。 在 Details 选项卡可以看到图形管线上各点的变更。
- 与系统分析器的实验部分相似,但可以按绘制调用使用。
- 几何
- 该选项卡显示了窗口中面向选定绘制调用的几何数据 3D 表示。
图 11. 查看 Geometry 选项卡中的几何模型
- 该选项卡显示了窗口中面向选定绘制调用的几何数据 3D 表示。
- API 日志
- 显示面向选定绘制调用的所有 API 调用。 这对于跟踪可能会影响性能的不必要状态变更大有帮助。
请继续阅读本文第 2 部分:
面向英特尔® x86 平台的 Unity* 优化指南: 第 2 部分
面向英特尔® x86 平台的 Unity* 优化指南: 第 1 部分的更多相关文章
- 现代英特尔® 架构上的 TensorFlow* 优化——正如去年参加Intel AI会议一样,Intel自己提供了对接自己AI CPU优化版本的Tensorflow,下载链接见后,同时可以基于谷歌官方的tf版本直接编译生成安装包
现代英特尔® 架构上的 TensorFlow* 优化 转自:https://software.intel.com/zh-cn/articles/tensorflow-optimizations-on- ...
- 英特尔® 至强® 平台集成 AI 加速构建数据中心智慧网络
英特尔 至强 平台集成 AI 加速构建数据中心智慧网络 SNA 通过 AI 方法来实时感知网络状态,基于网络数据分析来实现自动化部署和风险预测,从而让企业网络能更智能.更高效地为最终用户业务提供支撑. ...
- 英特尔® 实感™ SDK R4 (v.6.0) 的全新特性
原文地址 第四版 (R4) 黄金版 SDK (版本 6.0)现已面向英特尔® 实感TM F200 摄像头推出,并面向英特尔® 实感TM 后置 R200 摄像头发布黄金版本. 请注意,F200 OR R ...
- Intel 英特尔
英特尔 英特尔 基本资料 公司名称:英特尔(集成电路公司) 外文名称:Intel Corporation(Integrated Electronics Corporation) 总部地 ...
- 英特尔发布全新英特尔® INDE 2015工具套件
2014年10月15日,英特尔发布了全新的英特尔® Integrated Native Developer Experience 2015工具套件(简称英特尔® INDE).该产品提供了一系列最佳工具 ...
- 借助全新 MATLAB® 适配器代码示例读取英特尔® 实感™ 摄像头数据流
下载源代码请访问原文地址:借助全新 MATLAB® 适配器代码示例读取英特尔® 实感™ 摄像头数据流 简介 该可下载代码示例简要介绍了如何使用英特尔® 实感™ SDK 和 MATLAB 的图像采集工具 ...
- 将 Android* Bullet 物理引擎移植至英特尔® 架构
简单介绍 因为眼下的移动设备上可以使用更高的计算性能.移动游戏如今也可以提供震撼的画面和真实物理(realistic physics). 枪战游戏中的手雷爆炸效果和赛车模拟器中的汽车漂移效果等便是由物 ...
- 在配有英特尔® Iris™ 显卡的系统上通过优化对 Just Cause 3 进行增强
高端 PC 继续通过高性能显卡驱动桌面游戏. 一流的"梦想机器"基于第六代智能 英特尔® 酷睿™ 处理器i7-6700K等 CPU,通常与高端独立显卡配合使用以运行要求最严苛的游戏 ...
- 英特尔® 硬件加速执行管理器安装指南 — Microsoft Windows*
介绍 本文将指导您安装英特尔® 硬件加速执行管理器(英特尔® HAXM),这是一款可以使用英特尔® 虚拟化技术(VT)加快 Android* 开发速度的硬件辅助虚拟化引擎(管理程序). 前提条件 英特 ...
随机推荐
- vue02—— 动画、组件、组件之间的数据通信
一.vue中使用动画 文档:https://cn.vuejs.org/v2/guide/transitions.html 1. Vue 中的过渡动画 <!DOCTYPE html> < ...
- 设置eclipse默认编码格式
Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8 Window->Prefere ...
- DBA手记(学习)-RAC环境下GES TX报警情况处理
GES ... TX-... GES的全称是Global Enqueue Service,用于RAC环境的全局共享队列.从提示信息可以看出,目前的锁定是DML引发的行级锁(TX). 检查v$lock_ ...
- GPUImage源码解读之GLProgram
简述 GLProgram是GPUImage中代表openGL ES 中的program,具有glprogram功能.其实是作者对OpenGL ES program的面向对象封装 初始化 - (id)i ...
- 表格中的td内的div的文字内容禁止换行一行显示的css
td { white-space: nowrap } td div { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; ...
- webpack+vuecli使用问题总结
1,按照官网安装步骤install $ npm install -g vue-cli $ vue init webpack my-project $ cd my-project $ npm insta ...
- MySQL 日常运维业务账号权限的控制
在MySQL数据库日常运维中,对业务子账号的权限的统一控制十分必要. 业务上基本分为读账号和写账号两种账号,所以可以整理为固定的存储过程,让数据库自动生成对应的库的账号,随机密码.以及统一的读权限,写 ...
- mysql如何把一个表直接拷贝到一个新的表
一:在新表已经建立好的情况下 1,拷贝所有的字段 insert into new_table select * from old_table 2,拷贝部分字段表 insert into new_tab ...
- 虚拟机与ARM之间的交叉编译总结
通过三大服务的配置,我们可以在ARM中下载内核和文件系统.我们通过在虚拟机中编程,得到的程序不能在ARM中运行,需要经过一个交叉编译.得到的可执行程序可以在ARM中运行,此时不能在虚拟机Linux中运 ...
- hive 优化 (转)
Hive优化 Hive优化目标 在有限的资源下,执行效率更高 常见问题 数据倾斜 map数设置 reduce数设置 其他 Hive执行 HQL --> Job --> Map/Reduce ...