UDN
Search public documentation:

PerformanceAndMemoryCH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

该页面被性能、分析 & 优化主页替代。请参阅该页面了解有关虚幻引擎 3 中的分析和优化最新信息。

UE3 主页 > 技术 & 编程主页 > 性能和内存

性能和内存

概述

使游戏可以正常运行的同时符合内存约束条件是个大问题,它涉及了很多系统和很多学科。该页面集成了大量可以帮助您正常运行游戏的工具和技术。即使使用世界上最好的工具,您仍然需要灌输确保人们在创建他们想要的东西时使用的是少量的数据 / cpu 循环的思维方式。在这里显示的工具和技术将完全可以帮助您做到这一点。

要做到这一点,我们需要将这个大问题划分成一些小问题,使我们可以尽量使用截然不同的方式集中处理每个区域的问题。这样可以使多人单独进行工作/缩放。

每一项都有一个概述,然后是可以应用到该项上的所有工具/技术,对于每一个工具/技术,我们都给出了您需要采用该工具/技术的简短原因。该页面的目的是为您提供一个快速概述,并指出了一个更全面的工具/技术页面,其中包含有关如何采用特定工具/技术的所有详细信息。

保持游戏运行状态

使您的游戏保持运行状态可以使不断添加新内容和功能与控制在您的预算范围内之间达到平衡。在添加新内容时,常常会为它添加不正确的设置,或者与现有的内容相比消耗的性能更多。通常情况下,这些错误只是由于无意疏忽造成的。但是通过游戏这段时间采用的内容量进行跟踪是一件很困难的事情。

下面的工具/技术将会帮助您保持游戏运行状态:

连续集成

尽快查找出由于不适当的迁入导致的编译中断。

内容审查命令行开关

查找应该评判并极有可能修复的“有问题”的内容。

日常自动化冒烟测试

捕获执行代码的罕见的 崩溃/问题。

日常游戏测试

确定游戏始终可以玩,而人们不只是可以在隔离的测试关卡中查看功能。

日常的 QA 性能/内存 测量

允许您容易地获得 性能/内存 的衰减情况。

修复重定向的命令行开关

确保重定向器不会导致加载不应该加载的内容的。

传送器

将会收集与特定关卡相关的性能和内存统计数据的自动系统。

设置贴图 LOD 组的命令行开关

确保贴图在正确的 LOD 组中,并修复错误的贴图设置。

通用优化

对于需要在这里为您的游戏进行的所有优化,下面的技术普遍适用于优化过程。

性能调试页面中也包含关于跟踪性能问题、瓶颈和故障的信息。

Just Turn It Off(只需关闭它)

有时候最好关闭某些功能来优化性能,而不是花几个小时的时间去优化某些东西。

Looking At A Wall(面向墙壁)

面向墙壁,并查看当没有渲染东西时是什么消耗了大量的 CPU 循环。

产生同种类型的 N 个对象到夸张的程度

在没有使用其它引擎函数导致速度降低的情况下,那么具有同种类型的 N 个对象实际上就是运行较慢的部分。

意外故障

这里有一些 STAT 命令,可以用于快速检查运行时发生的意外故障,通常是行检查和寻路。查看 Max(最大)值找出发生意外故障的帧。

  • STAT UNITMAX - 使用替代 STAT UNIT,以便更好地发现意外故障。
  • STAT COLLISION - 查看“Multi Line Check(多行检查)”和“Single Line Check(单行检查)”。
  • STAT NAVMESH - 查看“Generate Path(生成路径)”
  • STAT SLOW - 显示所有比 10 毫秒慢的统计数据。看上去您必须输入 STAT NONE 将其关闭。

内存

将我们需要持续查看的其中一部分区域控制在游戏可以使用的内存量。查看使用内存的地方,这一点对于这个过程很重要。下面将会帮助您进行该项操作。

请参照内存调试页面来跟踪内存泄露、膨胀和碎片问题。

通常加载的内容

决定了哪些内容是即使我们不使用也总是需要付出代价加载的内容。您应该最小化这种内容的量。

分析引用的内容

查看一组地图,并显示它们引用的内容,同时显示了这些地图的内容的全局使用情况。从而使您关注于优化对性能造成最大影响的地方。

内容比较命令行开关

浏览所有内容并使您了解资源之间的相对消耗。

关卡中的热点报告

下面的文章会说明如何为您的关卡设计师创建“热点报告”。这些报告将会由您的 QA 部门负责生成,而且可以用于识别由于子关卡动态载入和载出而造成的内存双列直插式封装。它们将允许您的 LD 更清楚地看到消耗最多内存的散列表元,并且应该允许他们优化他们的关卡使其满足内存需求。

DVD 的空间占用

判定您的 DVD 空间中是什么以及数据在它上面的分布情况。

可执行文件大小

您可能经常无意中就会使您的可执行文件膨胀得很大。所以在是到您的可执行文件中有什么东西是个很好。

查找副本贴图命令行开关

我们将要在所有内容中查找已经复制过多次的贴图。这将会修复那个引用仅指向一个版本的贴图的问题。

内容的柱状图

通常按照类别 柱状图/列表 并且在它们旁边写上资源的大小的形式来查看资源分配情况是很好的。

基于每个多边形的碰撞

并不是所有的网格物体都需要基于每个多边形的碰撞,关闭它将会节约一些内存。

关卡优化

有关一些关卡设计师可以用来确保他们的关卡不会出现慢的情况的技术的概述。

内存泄露检查

MemLeakCheck 命令可以列出所有的主要内存使用者。它对内存占用情况进行了快速而简单的概述,并且可以比较。

内存分析器

可以具体看到内存分配情况的工具。用于追踪非 UObject 泄露。

不断增加的对象池

在引擎中会不断增加很多对象池。

TArray 闲置

确保您的 TArray 没有浪费空间。

贴图池

Texture Pool(贴图池)的大小是固定的,但是在贴图池中发生的事情是有贴图的设置决定的。

未使用的动画

未使用的动画占据了宝贵的内存。这里将向您说明如何查找这些未使用的动画并删除它们。

游戏线程

每个添加到场景中的对象都会占据一些资源。通常最有趣的对象占据的资源最多。为了使这些对象拥有足够的 GameThread CPU 时间,我们需要确保其他对象正确使用资源,而且它们只需要做完成我们的目标所需的最小工作量。这里有大量可以帮助您有效进行这项操作的专门工具/#defines。

对分析迁出进行设置: 性能调试

AI 日志记录

判定 AI 做的哪些动作是性能消耗比较大的。

动画

如何识别动画中的较慢的部分。

清除通过日志消息高亮显示的问题

日志是您的好帮手。您不应该忽略日志中显示的信息而是应该查找导致问题的根源并修复它。

动态光照环境更新

动态光照环境有一些可以使它们的性能和外观都很好的设置。为资源类型获取正确的设置,这一点非常重要。

垃圾回收

理解要垃圾回收什么并降低要进行垃圾回收的内容的量。

充分利用 #if FINAL_RELEASE /`if(`notdefined(FINAL_RELEASE))

避免在您发行的游戏中从来没有使用的代码中执行和链接的方法。

线性检查

最小化每帧进行的线性检查数量。

加载性能

判定为什么加载关卡要花费很长的时间。

LOOKING_FOR_PERF_ISSUES

使用最强大的选项 #define LOOKING_FOR_PERF_ISSUES 1。

引擎中的对象池

引擎中有很多池来帮助我们提高产生对象的性能。请确保您正在使用这些池。

导航网格物体性能

说明了哪些动作会导致 NavMesh(导航网格物体)变慢。

移动 Actor

在有大量移动 actor 时,确定哪些比较慢很重要。

粒子

查找性能消耗较大的粒子系统。

每帧中性能消耗较大的更新

每帧都会发生很多事情。某些事情的性能消耗要比其它的事情大, 判定出这些性能消耗比较大的事情是非常重要的!

物理

物理是以非同步的方式运行的,但是性能消耗仍然很大。

分析游戏线程

分析游戏线程时使用的技术。

骨架网格物体组件更新

查找您的骨架网格物体哪一部分比较慢的技术。

较慢的虚幻脚本函数调用

对 UnrealScript 进行优化是获得性能提高的最快方法之一。找到运行最慢的函数,然后或者把它们转换为 C++ 代码或者优化它们所执行的操作。

生成任何较慢的操作

持续地产生对象的速度很慢,我们要避免那种现象。

基于事件的对象的 TickableActor 列表

很多 actor 仅需要基于事件来进行“激活”,而不需要每帧都对其进行更新。

有效的可执行命令

引擎中有很多有用的可执行命令, 我们将详细介绍其中一些命令。

渲染线程

要降低保真度的渲染线程区域

当您使用分割屏幕时,渲染线程必须把大多数东西都渲染两次。所以在很多情况下,您的唯一选择是降低保真度或禁用它。

分析渲染线程

优化游戏线程时使用的技术

GPU

禁用 DetailMode(细节模式)

当您的 GPU 性能较低或者有时候必须渲染很多东西时,那么禁用某些功能便是最好的方法。

动态阴影

判定正在投射动态阴影或者非常大的阴影的对象。

着色器复杂度

确保着色器在做您想做的事而不是在没有获得任何视觉效果收获地浪费 GPU 循环。

平台特定 GPU 工具

每个平台都有很多特定的 GPU 工具来帮您进行有效地分析。

FreezeAt 控制台命令

控制台命令可以将视图锁定到给定视图,进行更好的分析。

网络带宽

DevNetTraffic

显示发送到客户端的具体内容。