命令:stat unit
游戏的实际单帧时间由这三者之一限制:Game(CPU 游戏线程),Draw(CPU 渲染线程)或者 GPU(GPU)。 图中我们可以看到 GPU是限制主因(三者最大的一个)。为了取得更少的 单帧 时间,在这个情形下必须先优化 GPU 的负载。
视图模式
视图模式就是一系列的 Show Flag 的预设组合。编辑器界面中,和 Show Flag 单独分开,也可以直接使用 ViewMode 的命令行来切换。 对于性能比较有用的是:Wireframe,LightComplexity,ShaderComplexity 和 Lit。(分别是线框模式,光照复杂度模式,Shader 复杂度模式 和 正常的光照模式)
几个不同的视图模式(按阅读顺序):光照模式,光照复杂度(越暗越好),线框模式,Shader 复杂度(绿色代表性能优良)
命令 StartFPSChart 和 StopFPSChart
然后用微软的 Excel 打开结果文件 .csv (保存在 [ProjectFolder]\Saved\Cooked\Android_ES31\SubwayPatrol\Saved\Profiling\FPSChartStats 处)。 在这里例子中,我们删掉了头四行,选择全部,并插入了一个线状图的散列表。
![]() |
---|
命令行:StartFPSChart, StopFPSChart |
命令:stat Game
CPU 受限,需要找到引起此问题的游戏代码(如蓝图、光线投射、物理、AI、内存分配)
命令 | ![]() | 描述 |
---|---|---|
stat Anim | 显示蒙皮网格体每个标记所需的计算时间。 | |
stat D3D11RHI / stat OpenGL | Direct3D 11 或 OpenGL RHI。 | |
stat DumpEvents [-ms=0.1] [-all] | 发生事件调用时(如从蓝图调用,或调用 PhysX 任务函数),它们将被写入日志。 | |
stat DumpFrame | 接收指令后立即执行渲染的帧信息将被写入日志。 | |
stat DumpHitches | 基于 t.HitchThreshold 检测到“故障”时,将其写入日志。 | |
stat Engine | 显示总体渲染 stats,如帧长、以及被渲染的三角形数量。 | |
stat Game | 反馈诸多游戏标记所消耗的时间。 | |
stat Grouped | 禁用 stat Slow。 | |
stat Hitches | 设置 t.HitchThreshold,定义故障的时间(以秒为单位)。还将把所有故障转存至 log/visual studio debug,如 [0327.87] LogEngine:Warning:HITCH @ 00m:01s:643ms,1643,72,2. | |
stat InitViews | 显示可视性剔除所花费的时间和效率。关于渲染线程性能,可视部分数量是最重要的个体 stat,它由 STAT INITVIEWS 下的可视静态网格体元素支配,但可视动态原语也对其存在影响。 | |
stat LightRendering | 反馈灯光和阴影所需的渲染时间。 | |
stat Memory | 显示虚幻引擎中诸多子系统的内存使用情况。 | |
stat Particles | 显示粒子计算时间和 sprite 渲染时间。 | |
stat SceneRendering | 显示总体渲染统计。可从此处着手寻找渲染过程中性能较慢的大体区域。 | |
stat SceneUpdate | 显示更新世界场景的信息,包括添加、更新和移除灯光,以及在场景中添加和移除原语所花费的时间。 | |
stat ShadowRendering | 显示阴影计算时间,与实际阴影渲染时间分开(已包含在 stat LightRendering 中)。 | |
stat Slow [-ms=0.3] [-maxdepth=5] | 此命令将显示游戏线程和渲染线程的统计。所有 stats 将作为一个 stats 大群组进行渲染。无法访问分析工具或日志文件、或需要测试游戏的基础性能时,此命令十分实用。 以下是运行游戏中的实例: 此命令可进行如下配置: stat slow [-ms=1.0] [-maxdepth=4] 默认只显示大于 1.0 毫秒的 stat 项目,以及超过 4 个关卡未被套入的 stat 项目。 注意:降低毫秒或增加深度均可能对整体性能产生影响。 Stat slow 对低于 0.1 毫秒的内容进行过滤,以增强性能并避免混乱。以下是减少 -ms 和增加 -maxdepth 所获得的结果: stat slow -ms=0.3 -maxdepth=5 Stat slow 会占用大量屏幕空间,再次使用 stat slow(或 stat Grouped)将移除所有可视 stats 群组。此外,如启用其他 stats 群组,stat slow 也将被禁用。 | |
stat Streaming | 显示流资源的诸多统计,如流纹理使用的内存量、或场景中流纹理的数量。 | |
stat StreamingDetails | 流的细节统计,将总体纹理流分解为更细致的群组(光照图、静态纹理、动态纹理)。 | |
stat Unit | 整体帧长、游戏线程时长、渲染线程时长、GPU 时长。 | |
stat UnitGraph | 查看带统计单元数据的图表,使用 stat Raw 查看未过滤的数据。 |
命令:ProfileGPU
附加说明:
几个对分析最有用的变量:
控制台变量 | 描述 |
---|---|
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 数据)。 |
编译选项
请不要在 Debug 版本下进行性能的分析和测量。为了方便起见,我们建议针对 Development 版本做性能分析。在 Shipping 下的性能实际上会因为开发特性进一步的移除而更快。 测试当然最好是在 Shipping 中完成,但需要一些代码功能被打开才行。(比如控制台,比如 stat unit 功能)。