UE4 性能优化方法(工具篇)
本文依据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 几个对分析最有用的变量: r.SetRes 改变屏幕,或窗口的分辨率。 r.VSync 开启/关闭垂直同步(可能依赖于是否原生全屏)。 r.ScreenPercentage 用于减小内部实际渲染分辨率,画面会在重新放大。 r.AllowOcclusionQueries 用于禁用遮挡(可以让场景运行的更慢)。 r.TiledDeferredShading 能够关闭基于 Tile 的延迟光照技术(GPU粒子的光影则没有退回方法)。 r.TiledDeferredShading.MinimumCount 能够调整使用多少灯光应用在基于 Tile 的延迟光照技术(视觉上并没有差异但性能会有不同)。 Pause 暂停游戏或者 Matinee(分析时更加稳定,但禁用了 Update/Tick)。 Slomo 能够对游戏进行加速或者减速播放。 r.VisualizeOccludedPrimitives 显示被裁剪掉的物件的外盒框。 StartF psChart 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 数据)。 作者: 风恋残雪(专注游戏引擎,关注VR,对操作系统、编译原理有深厚兴趣!)
|