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

Unreal Engine 4 优化教程 第一部分

$
0
0

本教程旨在帮助开发人员提升基于虚幻引擎(Unreal Engine*4 (UE4))开发的游戏性能。在教程中,我们对引擎内部及外部使用的一系列工具,以及面向编辑器的最佳实践加以概述,还提供了有助于提高帧速率和项目稳定性的脚本。

本文的目的是找出游戏性能问题之所在,并提供解决这些问题的若干模式。

撰写本文时使用的是 4.14 版本。

 

单元

测量优化对性能的提升作用时,需要考虑每秒帧数 (fps) 和每帧的持续时间(以毫秒 (ms) 计算)。

该表显示了平均 fps 和 ms之间的关系。

为了计算任意 fps 的 ms,只需将 fps 的倒数乘以 1000。

利用毫秒描述性能改善,有助于更好地量化需要达到一定 fps 目标的优化级别。

例如,某个场景提升了 20 fps:

  • 从 100 fps 到 120 fps 提升了 1.66 毫秒
  • 从 10 fps 到 30 fps 提升了 66.67 毫秒

工具

现在向大家介绍三种工具,便于您了解引擎内部的情况: UE4 CPU 分析器、UE4 GPU 可视化工具和英特尔® 图形性能分析器(英特尔® GPA)。

分析器

UE4 CPU 分析器工具是一款引擎内监控器,支持您实时或从捕获的片段中查看游戏的性能。

分析器位于 Window > Developer Tools > Session Frontend 中。


图 1:  找到 Session Frontend 窗口。

在 Session Frontend 中选择 Profiler 选项卡。


图 2:Unreal Engine 中 Profiler 选项卡

打开 Profiler 窗口后,选择 Play-In-Editor (PIE),然后选择 Data Preview 和 Live Preview,以查看从游戏中收集的数据。 选择 Data Capture 选项开始从游戏中捕获数据,然后取消选择并保存数据,以便稍后查看。


图 3:在 Profiler 中查看进程

Profiler 中每个动作和调用的时间以毫秒表示。 对每个区域进行检查,以查看对项目内帧速率的影响。

如欲深入了解 Profiler,请查看 Epic 文档

GPU 可视化工具

UE4 GPU 可视化工具确定渲染通道的成本,还提供显示场景快照内部情况的高级视图。

在游戏内开发人员控制台中输入 ProfileGPU便可获取 GPU 可视化工具。


图 4ProfileGPU 控制台命令。

输入命令后,弹出 GPU 可视化工具窗口, 该窗口显示快照内每个渲染通道的时间,您还可以大致了解场景内通道产生的位置。


图 5:在 GPU 可视化工具中查看进程。

Profiler 能够显示哪些项目的处理时间最长,可以依据它来确定如何优化。

如欲深入了解 GPU 可视化工具,请查看 Epic 文档

英特尔® 图形性能分析器(英特尔® GPA)

英特尔® 图形性能分析器(英特尔® GPA) 是一套图形分析和优化工具,可帮助开发人员提升图形应用的性能。

本文将重点介绍该套件中的两个工具:实时分析应用和帧分析器。 首先需要从英特尔® 开发人员专区下载 GPA。 安装完成后,利用所选的开发创建配置创建 Unreal 项目。

创建完成后,进入图像监控器的分析应用,在命令行中选择可执行文件的位置并运行这个文件。

游戏将正常启动,但是在屏幕的左上角出现了一个统计指南。 为了扩大显示范围,单次按下 CRTL+F1 获取实时的指标信息,再次按下 CRTL+F1 获取试验的键盘快捷方式列表,运行游戏时可以应用这些试验。


图 6:游戏中英特尔® GPA 的叠加。

为了在帧分析器中获取用于分析的帧,还需要在游戏内执行两个步骤。

第一步,打开 Toggle Draw Events, 在游戏控制台中输入 ToggleDrawEvents,便可打开 Toggle Draw Events。


图 7:  ToggleDrawEvents 控制台命令

打开后,Toggle Draw Events 为引擎创建的绘制调用附上名称,以后在帧分析器中查看捕获的帧时便有了环境。

最后,利用键盘快捷方式 CTRL+SHIFT+C 捕获帧。

保存帧后,从图像监控器中打开帧分析器并选择需要加载的帧。 对捕获的帧进行处理后,可以获得帧内部的所有图形信息。


图 8:英特尔® GPA。

如欲深入了解英特尔® GPA,请查看英特尔 GPA 文档

英特尔® 图形性能分析器(英特尔® GPA)使用示例

在英特尔 GPA 中查看全部数据看起来比较复杂,我们从查看较大的信息块入手。 在窗口的右上角,在 X 轴和 Y 轴上设置 GPU 持续时间图表,我们可以借助这张图标找出帧内消耗时间最多的绘制调用。

本示例捕获了一张沙漠景观场景,可以看到在基础通道中有一个大型绘制调用。 选择大型绘制调用后,“Render Target Preview(渲染目标预览)”区域的“Highlighted(突出显示)”部分被选中,我们可以发现峰值由场景内的景观引起(以粉色突出显示)。 如果我们在流程树列表(在预览区域的上方)中查找选中的绘制调用,将发现景观包含 520200 个基元,GPU 持续时间为 1,318.5(1.3185 毫秒)。


图 9:在场景中找出最长的持续时间

确定引起峰值的原因后,开始进行优化。

作为第一次测量,借助面向景观工具的 Manage Mode对景观进行重新采样,将基元数量降至 129032 个。 GPU 持续时间也随之降至 860.5,为场景带来了 5% 的性能提升。


图 10:持续时间下降。

为了继续降低景观的成本,也可以从材料着手。 景观的层混合材料使用 13 个 4096 x 4096 (4k) 纹理,纹理传输总计达 212.5 MB。


图 11:在英特尔® GPA 中查看渲染纹理

将所有景观纹理压缩至 2048 x 2048 (2k) 后,GPU 持续时间降至 801.0,性能又提升了 6%。

通过将景观纹理传输降至 53.1 MB,并减少场景中三角形的总数,显著提高了项目在英特尔显卡上的运行速度。 项目只是损失了少量的景观视觉逼真度。


图 12:持续时间随纹理减少而下降

总体而言,通过重新采样和调整纹理改变场景中的景观,我们实现了以下优化:

  • 景观流程的 GPU 持续时间下降了 40%(从 1318.5 到 801)
  • fps 提升了 18 帧(从 143 到 161)
  • 每帧减少了 0.70毫秒。

下一节


Viewing all articles
Browse latest Browse all 583

Trending Articles



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