Unreal 入门-性能分析

命令:stat unit

stat_unit.png

游戏的实际单帧时间由这三者之一限制:Game(CPU 游戏线程),Draw(CPU 渲染线程)或者 GPU(GPU)。 图中我们可以看到 GPU是限制主因(三者最大的一个)。为了取得更少的 单帧 时间,在这个情形下必须先优化 GPU 的负载。


视图模式

视图模式就是一系列的 Show Flag 的预设组合。编辑器界面中,和 Show Flag 单独分开,也可以直接使用 ViewMode 的命令行来切换。 对于性能比较有用的是:WireframeLightComplexityShaderComplexity 和 Lit。(分别是线框模式,光照复杂度模式,Shader 复杂度模式 和 正常的光照模式)

ViewModes.png

几个不同的视图模式(按阅读顺序):光照模式,光照复杂度(越暗越好),线框模式,Shader 复杂度(绿色代表性能优良)

命令 StartFPSChart 和 StopFPSChart


然后用微软的 Excel 打开结果文件 .csv (保存在 [ProjectFolder]\Saved\Cooked\Android_ES31\SubwayPatrol\Saved\Profiling\FPSChartStats 处)。 在这里例子中,我们删掉了头四行,选择全部,并插入了一个线状图的散列表。


fpschart.png
命令行:StartFPSChart, StopFPSChart


命令:stat Game

CPU 受限,需要找到引起此问题的游戏代码(如蓝图、光线投射、物理、AI、内存分配)

blob.png


命令 spacer.png 描述
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 大群组进行渲染。无法访问分析工具或日志文件、或需要测试游戏的基础性能时,此命令十分实用。

以下是运行游戏中的实例:

statSlow1.png

此命令可进行如下配置:

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

statSlow2.png

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 功能)。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值