Calmer的文章

  • 首页
  • 文章归档
  • 关于页面

  • 搜索
体验游戏 笔记 推荐 工具链 工具使用 小游戏 插件 UI 软件 教程

UE4性能优化工具和经验

发表于 2022-06-15 | 分类于 游戏开发 | 0 | 阅读次数 2434

前言

在开发游戏中,往往面临一些性能优化问题,会让开发者去定位排查,而此时能使用优秀的工具就能事半功倍。

以下主要讲述CPU相关优化内容


性能优化的流程

image.png
性能优化无非上述几个过程

在项目开发中,性能优化需要有严格的标准,不能用感觉,好似,差不多等模糊用词,而应该根据项目情形定下精准指标,例如在5档机默认画质默认帧率下游戏界面打开耗时不超过500ms,实际打斗场景下帧率维持在20帧率以上等。

  • 首先当然是定位耗时点,在大部分情形下都是20%的代码占据了80%的耗时,所以在定位耗时点一定要抓住"大头"
  • 然后针对"大头"的耗时点进行思考为什么会这样耗时?或是代码写法有待改进?或是CPU计算量太大?或是I/O导致的耗时?...
  • 其次针对思考耗时点的结果,例如如果是CPU计算量太大了,是否能离线计算好结果直接使用,亦或者分帧计算,亦或者异步线程中进行计算,再亦或者使用GPU来计算?
  • 再次根据提出的修改方案,选择一种进行完成实现。
  • 最后需要在目标硬件上进行真机验证
    • 验证耗时得到改善并达到标准那皆大欢喜(不做过度优化,因为不少的优化是有代价的,带来的可能是代码不清晰,维护困难等)
    • 发现本次解决方案效果不是那么明显,那需要思考解决方案的有效性。
    • 发现下降了部分耗时但是还未达到性能标准,就需要重新定位耗时点,抓住大头再进行解决。

定位方法,工具

日志Log(最简单也是最常用的方法)

以插入代码对的方式来统计某代码段的具体时间

  • Lua:os.click()
    image.png
  • UE:FPlatformTime::Seconds()
    image.png

因为本身打印log的方法也有一定消耗,所以埋点的log要具有针对性,并且尽量不要拼接复杂的字符串。

扩展:针对插入代码对的痛点有设计以下工具
快速插入代码对工具
自动埋点(根据经验得出的配置文件),快速埋点,删点工具

UE CommandLine以及部分常用命令

  • stat unit
  • stat fps
  • stat unlua
  • MemReport -Full

可以自定义一些CommandLine来统计性能信息,类似于stat startfile与stat endfile

https://docs.unrealengine.com/5.0/zh-CN/stat-commands-in-unreal-engine/

UE常用性能分析工具

UnrealFrontEnd

image.png
若引擎源码版本没有,可以自己在引擎目录下进行编辑生成
image.png

基本使用方法
参考stat StartFile和stat EndFile
https://docs.unrealengine.com/5.0/zh-CN/stat-commands-in-unreal-engine/

UnrealInsights

image.png
若引擎源码版本没有,可以自己在引擎目录下进行编辑生成
image.png

基本使用方法
https://docs.unrealengine.com/5.0/zh-CN/unreal-insights-in-unreal-engine/

命令bat
StartAndroidInsightsService.bat

adb push UE4CommandLine_Insight.txt /sdcard/Android/data/com.Calmer.MyAppP/files/UE4Game/UAGame/UE4CommandLine.txt
adb reverse tcp:1980 tcp:1980
adb shell "am force-stop com.Calmer.MyAppP"
adb shell "am start -n com.Calmer.MyAppP/com.epicgames.ue4.GameActivity"
pause

UE4CommandLine_Insight.txt

../../../MyAppP/MyAppP.uproject -tracehost=127.0.0.1 -trace=log,counters,cpu,frame,bookmark,file,loadtime, gpu,rhicommands,rendercommands,object -statnamedevents

将手机链接电脑后,运行StartAndroidInsightsService.bat将相应的UECommandLine写入,就可以在电脑上拿到实时的trace。

快速验证

取日志,取Profile

GetLogsFileFromAndroidDevice.bat

adb pull /sdcard/UE4Game/UAGame/com.Calmer.MyAppP/Saved/Logs
pause

GetProfilingFromAndroidDevice.bat

adb pull /sdcard/Android/data/com.Calmer.MyAppP/files/UE4Game/UAGame/UAGame/Saved/Profiling/
pause

扩展:可以封装CommandLine命令通过Https上传到服务器,再通过服务器下载。
在开发过程中,可能由测试人员发现性能问题,但此时取log或profile文件就需要插上手机数据线再取的,其实有点费力,因此直接通过commandline上传后,需要的开发人员自取会节省时间成本。

远程日志工具

热更

UE中资源热更新和Lua热更新方案(UnLua)
热更可以让我们修改得到快速的验证的重要方法,因此掌握热更的方法,以及游戏框架支持热更是必要的。

UMG+Lua方面经验实战

https://mytechplayer.com/archives/%E5%85%B3%E4%BA%8Eue4%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96umg%E6%96%B9%E9%9D%A2

总结

在性能优化的过程中,定位和验证两个环节可以通过使用优秀的工具来提升效率,但思考并提出修改方案和完成方案更加考量开发人员的内力和经验。

  • 本文作者: Calmer
  • 本文链接: https://mytechplayer.com/archives/ue4性能优化工具和经验
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
# 笔记
UE5问题记录(一)
UE5内存管理原理
  • 文章目录
  • 站点概览
Calmer

Calmer

88 日志
7 分类
10 标签
RSS
Creative Commons
0%
© 2020 — 2025 Calmer
由 Halo 强力驱动
蜀ICP备20010026号-1川公网安备51019002006543
Copyright © 2020-2025 Calmer的文章