UE3 性能分析及优化

概述

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

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

  通用维护

  使您的游戏保持运行状态可以使不断添加新功能 vs 控制在您的预算范围内之间达到平衡。由多个开发者控制的代码在不断进行修改的过程中必需都收集在一起。游戏必须在目标平台的约束范围内运行。为了跟踪所有这些内容并确保游戏可以继续正常运行,需要连续进行监控。

  游戏维护页面描述了一些可以在制作过程中维护游戏的常用工具和技术。

  基础工具和技术

  在制作过程中快速简捷地找出您的游戏哪一部分引发问题,这一点至关重要。这样可以节约时间和金钱。但是只有尽早分辨出可能会引发问题的区域才可以节省大量查找时间,甚至要在它们在标准游戏测试环境中显示出现问题之前。如果您知道某些地方会出现问题,那么可以在基于它生成的其他元素或系统太多之前解决或处理它,否则会很难想出解决方案。

  基础分析和优化技术页面描述了一些可以用于辨别并解决在您的游戏中当前存在或可能会形成性能问题的区域或元素的简单技术。

  游戏性程序人员的游戏性优化页面主要介绍了在开发 无尽之剑地牢 的过程中所使用的优化游戏性和渲染的样本工作流程。

  内存分析

  内存使用通常与视频游戏密切相关,尤其是那些适用于内存空间有限的控制台或移动设备的视频游戏。它可以从磁盘上内容资源所占用的磁盘空间扩展到运行过程中不同系统的内存使用量再进一步扩展到内存分配和释放量。这些全部都是极其重要的信息,它们可以将内存使用限制在可接受范围内。

  内存使用和分析页面会显示一些可以用于检查并控制您的游戏内存使用情况的工具和技术。

  内容分析和优化

  提供当前游戏中使用的内容量,这一点对于尽可能限制该内容对性能所造成的影响至关重要。优化内容可以使投入得到更大的回报,所以它通常是首先进行分析和优化的区域。

  在这个过程中,虚幻引擎 3 可以提供一些有帮助的工具。在内容分析和优化页面上详细描述了这些工具以及很多有关如何限制内容产生的影响的建议。

   CPU 性能

  可以将引擎在 CPU 上进行的工作划分为线程。同时在某一段时间内也会有执行执行各种职责的协助线程,这两个主要线程是:

  GameThread - GameThread 可以处理更新的游戏性内容。这其中包括更新 Actors、更新组件、进行垃圾收集等等。

  RenderThread - RenderThread 可以处理执行光照计算、阴影计算、半透明设置、更新场景捕获数据、遮挡等等。

  在 CPU 上管理引擎性能意味着要确保没有线程闲置等待任何其他线程完成工作,同时还要尝试使在 CPU 上工作消耗的时间最少。

  当您分析出您的帧瓶颈是CPU性能问题时,下一步应该是决定那些时间是C++代码中的哪部分消耗的。 另外,您或许想查找类似于Load-Hit-Stores或缓存丢失的隐藏的性能消耗。

  大多数平台都有功能强大的CPU采样工具,它们提供了详细的代码标准,甚至提供了使用从活动会话捕获的数据组成的C++代码调用图表。 比如,在Windows平台上,您或许使用 Intel VTune 来捕获一个较短时间段内的数据从而分析出热点区。 游戏控制台平台也提供了类似的工具,通常包含在开发工具链中。

  如果您想熟悉这些应用程序,那么就在开发过程中大量的使用它们把!

  注意,在某些控制台上,虚幻具有一个可以帮助执行单独帧 CPU 取样捕获数据的实用函数。您可以键入 TRACE GAME ,初始化一个 CPU 跟踪。

  大多数CPU分析器支持捕获较短时间间隔内的采样数据 和/或 调用图表数据 的功能。 这对于调试关于具有持续的低帧频率的性能问题是非常有用的。 Sampling captures(采样捕获) 通常会为您提供C++代码中的函数调用热点区。 这有时候是有用的,但大多数时候您会发现 Call Graph capture(调用函数图表捕获) 是更加有用的!

  Call Graph capture(调用函数图标捕获) 通常会有更多的捕获时间消耗,但是它提供了关于热点区的函数的 调用者 的详细信息。 这通常可视直接引导你查出问题的根源!即使在许多 物体/actors正在调用显示为运行速度较慢一个单独函数的情况,如果您很幸运,那么调用函数图表将会引导您到特定的actor类别名称或导致这个原因的其它形式的暗示。

  有时,调用图只会显示占用时间的 UnrealScript (调用到 ProcessEvent 、 CallFunction 等等),在这种情况下,您将需要运行统计数据查看器或游戏分析器会话捕获,进一步探讨这些调用。

  当处理帧 停顿 时,由于相对较低的采样频率,CPU分析器可能有时候是不适用的。 如果停顿在游戏中很容易再现,一个很好的策略是当捕获一个较短的CPU采样会话时,尽量经常地启动那个停顿(理想地每帧很多次)。 如果这个停顿比较难找到,那么您将需要使用供统计数据查看器使用的捕获数据,这个查看器将会提供很多帧上的历史调用图数据。

  游戏线程性能

  每个被添加到场景中的 gameplay 对象都会占用一些资源,通常最吸引人的对象占用的资源最多。为了使这些对象拥有足够的 GameThread CPU 时间,您需要确保其他对象正确使用资源,而且所有对象只需要做完成它们的目标所需的最小工作量。

  在游戏线程分析和优化页面上详细描述了很多用于分析和优化 GameThread 工作的工具、技巧和技术。

  渲染线程性能

  从光照和阴影的角度上看场景的复杂度以及其他一些与处理器相关的视觉效果,这些可以极大地影响 RenderThread 中花费的时间。查明这些区域中减慢 RenderThread 的具体区域,这样做将会帮助您将精力集中在减少不重要元素所产生的影响,同时可以为关键功能和视觉效果提供更多的资源。

  渲染线程分析和优化页面说明了一些分析和优化在 RenderThread 中进行处理的视觉元素的工具和方法。

  GPU 性能

  在 CPU 处理计算和游戏每帧更新时,GPU 主要负责渲染游戏。很明显,这意味着绘制多边形,同时包括处理着色器复杂度和全景渲染造成的浪费,GPU 植皮的骨架网格物体,后期效果,流体表面等等。如果 GPU 在处理上花费了大量时间,那么它可能意味着您的游戏在三角形设置处理后出现了瓶颈或其他渲染元素将会引发性能问题。

  GPU从渲染线程接收命令并执行以下处理:

  变换骨架网格物体的顶点和植皮。

  光栅线(辨别出那些像素落到了哪些三角形上了)。

  着色(在给定三角形上的所有像素上执行像素着色。像素着色是由为那个三角形分配的材质控制的。)

  对于GPU分析来说,有很多复杂的特征。凭经验来说,GPU性能分析的最好方法就是不断试验。由 GPU 执行的主要消耗时间的操作时像素着色。使用的着色器复杂度、着色器占用的屏幕空间量、由半透明着色器造成的全景渲染浪费量等等,这些全部都是分析 GPU 时需要考虑的因素。GPU 负责的另一个区域是植皮的网格物体的转换形式。骨架网格物体中使用的顶点数量是一个主要因素,因为植皮的顶点所消耗的性能要比静态网格物体顶点多得多。显然,描画的多边形数量也可能会影响 GPU 性能,但是现代的显卡可以描画大量多边形。尽管这样,您通常还是需要确保不要描画不需要描画的多边形,同时网格物体只需具有达到预期视觉效果所需的多边形数。

  为了协助捕获与 GPU 相关的信息,可以通过在某些控制台上使用 TRACE RENDER 命令执行 GPU 单帧取样捕获数据。

  这里提供了一些可以帮助在 PC 以及各种控制台上分析 GPU 的工具。GPU 性能和分析页面说明了如何使用虚幻引擎 3 提供的工具以及其他外部工具确定在 GPU 上出现性能问题的具体位置。

  网络分析

  密切注意通过网络为在线游戏传送的数据量,这一点很重要。您不需要传送大量不必要的数据,或者让指定的对象扰乱网络。对于所有玩家而言,简化网络流量将会使在线游戏运行得更顺畅, 尤其是对于那些带宽有限的玩家。

  移动设备分析

  在移动设备上对游戏进行分析与在 PC 上进行分析的过程非常相似。但是,会针对各种不同的平台,使用某些特殊工具,考虑一些注意事项。要了解有关如何对移动设备进行分析的详细信息,请参阅移动分析主页页面。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值