面向英特尔® 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* 开发速度的硬件辅助虚拟化引擎(管理程序). 前提条件 英特 ...
随机推荐
- [转]基于C#的开源GIS项目介绍之SharpMap篇
我是一个刚毕业的GIS本科毕业生,目前在杭州从事GIS软件应用开发.在项目开发中总感觉自己的编程水平还不够,于是想找些开源GIS小项目来研究研究,借以提高自己的编程能力和项目开发能力.在网上搜了一下“ ...
- 指纹协查统计sql
select dic.name, NVL(zc.zc_djzs,0),NVL(zc.zc_shzs,0),NVL(zc.zc_bzzs,0), NVL(zt.zt_djzs,0),NVL(zt.zt ...
- Linux Shell常用技巧(八)
十八. 和系统运行状况相关的Shell命令: 1. Linux的实时监测命令(watch): watch 是一个非常实用的命令,可以帮你实时监测一个命令的运行结果,省得一遍又一遍的手动 ...
- Mac 模拟慢速网络
作为开发者,为了提升用户体验,有时需要模拟不同环境的网络.Mac环境下模拟慢速网络可以使用苹果官方提供的工具:Network Link Conditioner. 1.点击苹果开发者网站提供的下载页面, ...
- iOS 封装一个带复制功能的UILabel
我们发现UILabel不在为我们提供长按弹出复制等操作了, 我们来继承UILabel自己写一个带复制功能的UILabel. 代码: #import "CopyLabel.h" @i ...
- javascript设计模式系列二-封装
JavaScript封装: var Book = function (id, name, price) { this.id = id, this.name = name, this.price = p ...
- Git很简单--图解攻略
Git Git 是目前世界上最先进的分布式版本控制系统(没有之一) 作用 源代码管理 为什么要进行源代码管理? 方便多人协同开发 方便版本控制 Git管理源代码特点 1.Git是分布式管理.服务器和客 ...
- transform动画的一个3D的正方体盒子
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- html-html简介
一.什么是HTML? HypeText Markup Language:超文本标记语言,网页语言 超文本:超出文本的范畴,使用HTML可以轻松实现这样的操作 标记:HTML所有的操作都是通过标记实现的 ...
- PHP 好用第三方库
PHP 好用第三方库 whoops 更好的php错误报告库 [github]:https://github.com/filp/whoops Whoops是一个易于处理和调试错误的PHP库 .它提供基于 ...