http://www.cnblogs.com/ghl_carmack/p/5481763.html

本文依据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,对操作系统、编译原理有深厚兴趣!

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接,否则保留追究法律责任的权利。

UE4 性能优化方法(工具篇)相关推荐

  1. Android性能优化之工具篇 — — 开发者选项

    Google为了方便开发者调试Android程序专门开发了开发者选项功能,能够让开发者方便快捷调试Android应用程序.对于一般用户无需关注,所以往往开发者选项在新版本中都会隐藏,需要特殊操作才会展 ...

  2. vSphere 性能优化方法 故障排错方法及工具总结(一)

    转自@twt社区 本资料主要包括:性能优化方法:vSphere 性能优化逻辑.针对 VM 的性能优化.针对 CPU 的性能优化.针对 RAM 的性能优化.针对 DISK 的性能优化.针对 Networ ...

  3. 大主子表关联的性能优化方法

    [摘要] 主子表是数据库最常见的关联关系之一,最典型的包括合同和合同条款.订单和订单明细.保险保单和保单明细.银行账户和账户流水.电商用户和订单.电信账户和计费清单或流量详单.当主子表的数据量较大时, ...

  4. Android App 性能优化系列结语篇

    Android App 性能优化系列结语篇 原文出处:http://gold.xitu.io/post/581f4ad667f3560058a33057 关于Android App的优化, 从第一篇的 ...

  5. 性能优化常用工具及经验总结

    文 |齐光 性能问题和 Bug 不同,后者的分析和解决思路更清晰,很多时候从应用日志(文中的应用指分布式服务下的单个节点)即可直接找到问题根源,而性能问题,其排查思路更为复杂一些. 对应用进行性能优化 ...

  6. Android性能优化系列总篇

    目前性能优化专题已完成以下部分: 性能优化总纲--性能问题及性能调优方式 性能优化第四篇--移动网络优化 性能优化第三篇--Java(Android)代码优化 性能优化第二篇--布局优化 性能优化第一 ...

  7. 列举6个常见且实用的Web前端性能优化方法

    在如今这个信息爆炸的时代,人们的节奏总是快速的,对于一个网站的耐心毕竟是有限的可怜的,如果网站不进行优化必定会流失相当一部分的客户,带来不必要的损失.那么从Web前端的性能优化上来说有哪些常见.实用的 ...

  8. Spark性能优化指南——基础篇

    在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一.Spark的功能涵盖了大数据领域的离线批处理.SQL类处理.流式/实时计算.机器学习.图计算等各种不同类型的计算操作,应用 ...

  9. 性能计数器驱动_Linux CPU性能优化方法

    在Linux系统中,由于成本的限制,往往会存在资源上的不足,例如 CPU.内存.网络.IO 性能.本文,就对 Linux 进程和 CPU 的原理进行分析,总结出 CPU 性能优化的方法. 1. 分析手 ...

最新文章

  1. 怎样往csdn上传自己的demo
  2. AutoGL:浅谈未来非常有前景的自动图机器学习相关概念
  3. Image、Byte[]、Bitmap相互转换
  4. mysql change命令_Mysql 操作基本命令大全
  5. Lisp-Stat翻译 —— 第九章 统计绘图窗体
  6. 18春学期《计算机应用基础》,18春学期(1709、1803)《计算机应用基础》在线作业及答案.pdf...
  7. 机器学习实战(一)k-近邻kNN(k-Nearest Neighbor)
  8. Binutils工具集中的一些比较常用的工具
  9. xaf 设置内置(built-in actions)按钮的可用状态
  10. 群联PS3111坏硬盘修复记录
  11. PCB绘图的基本要求和布线原则
  12. 教学服务系统设计之PHP后台设计
  13. MCE公司:Pfizer入局IDO1小分子抑制剂
  14. 路由器linux+开机启动,路由器里设置FRP开机启动教程
  15. 终端操作GitHub代码以及代码的版本控制(develop/master)多图
  16. android studio编写阿里云物联网APP的基本步骤(附CSDN视频教程链接)
  17. iOS10兼容,最新特性。
  18. 2022.07.19 MySQL唯一索引
  19. Mac book笔记本输入法错乱
  20. 如何从外网SSH访问家中的树莓派?

热门文章

  1. python assertion failed_PyCharm报错与解决方法一览
  2. android修改尾巴软件,安卓手机QQ自定义尾巴编辑教程
  3. linux创建磁盘pv报错,Linux 磁盘管理
  4. 同一列两行数据怎么合并成一行_经常加班怎么办?两分钟学会这4招,让同事刮目相看!...
  5. 对应到对象 数据库驼峰_从源码角度理解Mybatis字段映射(一) - 驼峰式命名
  6. ckeditor 图片上传_开发问题:Django使用ckeditor上传到七牛云
  7. matlab在linux效率高吗,取代matlab, Linux下科学计算环境的搭建
  8. 当兵的目标和计划_“士兵计划”与我的那些事儿——【初试篇】
  9. (编程解决)List和Hashtable都是可以存储数据的,可为什么有时选择List,有时需要Hashtable,这两个
  10. 【NOI2016】网格,离散化+求割点