• UE4为什么总是调不出
  • 点光源构建问题
  • 自制UE4通用材质、玻
    • 引擎世界丨EngineWorld.CN
    • 引擎世界丨EngineWorld.CN
    • 引擎世界丨EngineWorld.CN
    • 引擎世界丨EngineWorld.CN
    • 引擎世界丨EngineWorld.CN
    • 引擎世界丨EngineWorld.CN

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

2
回复
263
查看
[复制链接]

该用户从未签到

6

主题

7

帖子

19

积分

初始化成员

积分
19

已领礼包: 1个

财富等级: 恭喜发财

发表于 2020-3-19 15:56:32 | 显示全部楼层 |阅读模式
UE4 性能优化方法(工具篇)2016-05-11 14:27  风恋残雪  阅读(32827)  评论(5)  编辑  [url=]收藏[/url]
本文依据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,对操作系统、编译原理有深厚兴趣!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接,否则保留追究法律责任的权利。




参与人数 1引擎币 +10 收起 理由
一默 + 10 很给力!

查看全部评分总评分 : 引擎币 +10

签到天数: 115 天

连续签到: 3 天

[LV.6]常住居民II

0

主题

374

帖子

2022

积分

中阶编码师

积分
2022
发表于 2020-3-25 10:36:41 | 显示全部楼层
资源哪里好,肯定引擎世界找!
回复

使用道具 举报

签到天数: 22 天

连续签到: 4 天

[LV.4]偶尔看看III

1

主题

73

帖子

317

积分

初阶编码师

积分
317

已领礼包: 25个

财富等级: 恭喜发财

发表于 2020-3-26 08:47:33 | 显示全部楼层

每天上引擎世界,回帖赚币两不误!
回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

凝聚梦想 共创未来
意见反馈邮箱:engineworld@qq.com

扫一扫捐助我们

Powered by 引擎世界中文社区™®© Engine World Inc.( 陕ICP备16015879号-4 )