可通过输入命令,在界面上呈现当前软件的性能数据。在游戏运行阶段,可按键盘~
,显示命令输入框。
stat fps
,简单输出帧率- 命令stat unit
,输出游戏逻辑线程和渲染线程耗费的时间- 命令stat engine
,输出当前用于计算渲染的三角面数量- 界面Statistics
,可以看到项目所有资源的三角面数- 查看打包耗时,可通过Rider的Log输出或者Log文件(项目路径\Saved\Logs
)Frame // 完成一帧花费的总时间 Game // 逻辑线程,CPU处理逻辑的耗时 Draw // 渲染线程,CPU处理图像的耗时 GPU // GPU处理当前图像的耗时,可简单通过stat查看gpu耗时情况 DynRes // 不详
性能优化,主要还是关注三角面的数量,在我的电脑(显卡1080),面数在小几千万面级别的时候,帧率能达到30。
而优化三角面数量有这几种方式:
LOD Coloration
显示模式来可以快速定位到未做LOD的模型。- 创建剔除体积(我们项目考虑到需要看到所有模型,未采用这种方式。下面有简单的介绍)。Lightmap Density
显示模式来判断哪些模型的贴图分辨率过大或者过少。蓝色表示分辨率太低,红色表示太高,目标是调整为绿色到橙色之间。渲染剔除
遮挡剔除开关:project setting - culling - Occlusion Culling 剔除距离体积:CullDistanceVolume
UE4在启动项目的时候需要构建所有网格体,模型越大花费时间越多,会导致项目启动慢的问题。由于每次设计师导入新的模型或者修改了模型,其他同事都需要花费这个时间来重新构建模型。
**优化方案:**没有很好的解决方案。但我们能做到的是,一个模型尽量一次性优化完一次性提交,避免同一个模型多次修改提交,因为每次提交都会带来重新构建的耗时。
UE4默认会打包所有Map,包括新手包的map,而打包这些无用的map会带来很多无用的资源。因而,要提高打包速度和缩小包容量的最好的方法是把需要打包的map添加到打包列表里。 **具体操作:**ProjectSetting - Packaging - 把需要打包的map添加到list of maps to include in a packaged bulid
打包过程分析
打包耗时可以通过Rider
的log输出或者查看Log文件(路径项目路径\Saved\Logs
里面的),里面每条log都有发生时间,简单计算即可算出打包耗时。
打包过程会经历这几个过程:
搭建步骤以后再补充一篇文章。
采用Jenkins之后,不但把打包工作交给服务端,还能提高工作流的效率。
打包命令配置介绍:http://wangjie.rocks/2018/08/09/ue4-uat-buildcookrun-cmd/
使用migrate方法,导出项目使用的map到一个新的content目录,此操作会把map引用的所有资源文件一同导出。接着通过主工程的content目录跟这个新的content目录进行文件对比,这就能找出项目中没有使用的资源,继而进行删除。
git config --global core.quotepath false
(git的修改不确定是否相关)**解决方式:**删除W_Error中所有用到的SceneGameMode,然后重新创建SceneGameMode即可。
Vsync 用于解决屏幕撕裂,在显示器刷新率跟不上三维应用的FPS时,通过限制游戏FPS来解决该问题。一般我们应用达不到屏幕的刷新率,因而可以关闭该功能。 关闭方式:蓝图里有vsync的开关(经测试,默认是关闭的)。还有关闭smooth Frame Rate
。
瓶颈在逻辑线程的分析方式
待整理
stat game?
分析GPU 快捷键"Ctrl+Shift+,"
性能优化官方文档:https://docs.unrealengine.com/zh-CN/Engine/Performance/index.html
Profiler用法:https://blog.csdn.net/xingyali/article/details/82217143
Profiler官方文档:https://docs.unrealengine.com/zh-CN/Engine/Performance/Profiler/index.html
参考: https://blog.csdn.net/killfunst/article/details/112556719