UE4 性能优化方法(工具篇)

发表于2016-06-25
评论0 6.6k浏览
  本文依据UE4官方文档以及官方博客等总结而来,可能不全面,后面会陆续添加。内置工具的详细说明请参考官方文档。
  游戏帧率很低,或者有卡顿的现象,可能会有很多原因,这时候不要乱猜,比如是不是人物太多了或者渲染的东西太多了,这样猜意义是不大的,可能会浪费很多时间,但是总找不到点上,当然如果运气好也可以找到瓶颈,这个时候我们可以借助相应的工具来查找性能瓶颈。此处我们仅以UE4来展开讲解。
  首先要确定瓶颈是在CPU还是GPU,为了找到是谁,以非debug版本启动你的程序,并且在控制台上输入stat unit 命令,如果是在android平台上可以同时按下四个手指,打开控制台,输入stat unit,它会显示如下图所示:


  Frame时间是产生一帧花的总时间,由于逻辑线程(Game)和渲染线程(Draw)在一帧结束的时候需要同步,一帧花的时间经常跟其中的一个线程花的时间 相近。GPU时间测量了显卡渲染当前场景花的时间。由于 GPU时间是跟当前帧同步的,所以它跟一帧花的时间也基本差不多。
  如果一帧花的时间跟逻辑线程的时间比较接近,那么瓶颈在逻辑线程,相反如果跟渲染线程的时间比较接近,那么瓶颈在渲染线程。如果两个时间 都不接近,但跟GPU时间比较接近,那么瓶颈在显卡上。
  当然也可以使用一些第三方工具,比如intel vtume,、aqtime等,移动平台上可以使用Apple Instruments、NVIDIA Tegra System Profiler、ARM DS-5等 。

一、瓶颈在逻辑线程
  可以通过性能分析来确定,通过~打开控制台里面输入"stat startfile",让它运行一会至少10s来获取一个多帧的平均值。如果时长过长,那么生成的文件就会很大。通过stat stopfile来结束性能分析。一个后缀为ue4stats的文件会在工程的路径下产生,如果是android的话会在你安装的目录下面生成 一个profile目录。如果想要查看分析结果,必须把这个文件拷贝到pc上,可以使用adb pull {ue4stats 完整路径} {pc 保存路径}来拷贝文件到pc上。
  这个时候你就可以使用UnrealFrontEnd(跟UE4Editor在同级目录)来打开分析的结果,或者在UE4Edtior里面通过window-->Developper ToolsàSession Frontend,打开后切换到Profiler面板,通过load来打开ue4stats文件。


  当打开后你就可以自己来查看耗费时间的地方了


  如果要查看卡顿,可以在时间线上查看高峰的地方,通过选择Maximum而不是Average,这样它就会显示一些峰值,如下图所示。


二、GPU分析
  如果是在PC平台上可以使用ProfileGPU命令或者使用快捷键Ctrl+Shift+,


  也可以使用一些第三方工具来测试,pc平台上如 Intel GPA、Nvidia NSight visual Studio edition,移动平台比如高通的adreno profiler、NVIDIA Tegra Graphics Debugger、ImgTec PVRTune and PVRTrace、ARM Mali Graphics Debugger等,苹果的XCode等均可以用来分析。

三、一些常用的命令
  stat unit


  stat scenerendering


  stat engine


  stat initviews


  stat game


  Stat Slow


  ViewMode ShaderComplexity
  Stat UnitGraph
  完整的stat命令参考https://docs.unrealengine.com/latest/CHN/Engine/Performance/StatCommands/index.html。
  几个对分析最有用的变量:
 · r.SetRes    改变屏幕,或窗口的分辨率。
 · r.VSync    开启/关闭垂直同步(可能依赖于是否原生全屏)。
 · r.ScreenPercentage    用于减小内部实际渲染分辨率,画面会在重新放大。
 · r.AllowOcclusionQueries    用于禁用遮挡(可以让场景运行的更慢)。
 · r.TiledDeferredShading    能够关闭基于 Tile 的延迟光照技术(GPU粒子的光影则没有退回方法)。
 · r.TiledDeferredShading.MinimumCount    能够调整使用多少灯光应用在基于 Tile 的延迟光照技术(视觉上并没有差异但性能会有不同)。
 · Pause    暂停游戏或者 Matinee(分析时更加稳定,但禁用了 Update/Tick)。
 · Slomo    能够对游戏进行加速或者减速播放。
 · r.VisualizeOccludedPrimitives    显示被裁剪掉的物件的外盒框。
 · StartFPSChart StopFPSChart    请看下文。
 · r.SeparateTranslucency    这是一个用于修复半透明情况下景深的问题的功能,如果不需要的时候可以把它关闭,并有其他影响(查阅 SceneColor)。
 · r.Tonemapper.GrainQuantization    用于关闭在 Tonemapper 中添加的噪点来避免 Color Banding,由于 8bit 量化和较小的质量改进在输出为 10:10:10 并不必须。
 · r.SceneColorFormat    能够选用不同的 SceneColor 格式(默认是 64bit 的最佳质量,并支持屏幕空间子表面散射)。
 · FX.AllowGPUSorting    禁用粒子排序(在大量粒子的使用可以妥协使用)。
 · FX.FreezeParticleSimulation    禁止粒子的更新。
 · r.SSR.MaxRoughness    调整屏幕空间反射(SSR)粗造度的最大值,并覆盖后处理中的该设置。请查阅 Show Flag VisualizeSSR。

四、命令行选项
  有些功能可以在命令行中进行关闭,比如 UE4.exe –NoSound
  几个对分析比较有用的开关是:
 · NoSound    禁用声音和音乐系统。
 · NoTextureStreaming
关闭贴图 steaming(对于隔离问题时很有帮助)。
 · NoVerifyGC    否则需要预期在 Release 版本中每 30 秒会遇到的性能波动。
 · NoVSync    能够更快的渲染但会导致画面撕裂,尤其是在高帧数下。
 · Streaming    在使用 StartFPSChart/StopFPSChart 很有用,能够从一个非 windows 设备上来获取数据并用于进一步检测(假设我们是实时的 cook 数据)。
  作者: 风恋残雪
  出处: http://www.cnblogs.com/ghl_carmack
  关于作者:专注游戏引擎,关注VR,对操作系统、编译原理有深厚兴趣!
  腾讯GAD游戏程序交流群:484290331Gad游戏开发核心用户群

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引