***UE4项目性能优化***
查看性能
引擎中或PC端 ~键 呼出 输入命令界面
移动端 四指同时触摸屏幕 呼出 输入命令界面
CPU Bound
stat unit
Frame:一帧所耗费的总时间,值越大,fps越小,Fram X FPS = 1
Game:处理游戏逻辑消耗的时间,这一步完全不考虑渲染问题,表现的是整个游戏世界在一帧之内,只在逻辑层面处理所有的变化需要花多长时间
Draw:准备所有必须渲染所需时间,并把它从CPU发送给GPU所需的时间(CPU消耗)
GPU:接受到渲染信息后,将像素最终表现画在屏幕上的耗时
stat game 显示游戏的cpu相关性能消耗
如果CPU瓶颈 那么还会用到 stat uobjects,看到哪个场景的哪个组件 的消耗
Stat slate UI相关的CPU消耗(在打包后的exe或apk上查看,避免ue编辑器影响)
其他CPU命令
官方文档地址
GPU Bound
修改分辨率
如果使用10的分辨率,游戏性能突然提升,那么是GPU瓶颈,否则是CPU瓶颈
项目设置 帧率平滑
关闭 垂直同步
*优化*
删除自带大气雾
关闭自动曝光
贴图分辨率设置
优化 贴图分辨率(Maximum Texture Size = 1024)打包的apk 包体大小减少明显
遮挡剔除 提升渲染效率
下面三个 min screen参数越大 渲染效率越高(代价是剔除后效果可能会比较突兀)
场景增加Lightmass Importance Volume
增加范围内光照品质,更加构建场景灯光效率
游戏逻辑优化(Game线程方向)
尽量减少使用Tick
如果要用可以调整 更新时间间隔,0代表每帧都执行
UI优化
Visible 可见并接受交互事件
Collapsed 不可见且不占用任何体积
Hidden 不可见但占用体积,不接收交互事件
Hit test invisible 可见,且他和他的子节点都不接受点击事件
Set hit test visible 可见,且他自身不接受点击事件,不影响子节点
UMG或UC 中可见但不可交互的控件(除了各种panel)可见性设置为 set hit test visible(默认是visibility)
不需要碰撞检测的StaticMesh设置(no collision 和 overlap event = false)
即使需要开启检测,也要设置好通道,不需要的通道设置为ignore
输入命令stat RHI
Triangles drawn 三角形面数
DrawPrimitive calls 绘制调用次数(DrawCall , DC)
垃圾回收(GC)
自动垃圾回收
系统自动垃圾回收,destory的Actor不会从内存中销毁而是隐藏继续占用内存,每隔一段时间垃圾回收一次 未被引用的Actor,释放内存。
默认61s回收一次
手动垃圾回收
执行Destory节点后可以强制垃圾回收一次
提高GC速度
骨骼网格体 优化
开启动画插值优化(URO),帧率较低的时候不建议开启,动画播放效果会很差
组件使用骨骼边界,提高性能
***使用 stat startfile 和stat stop startfile命令创建性能分析文件(移动端也可以使用)
文件保存路径 Saved/Profiling/UnrealStats
移动端 UE4Game/项目名/
菜单开发者工具-打开Session Frontend 工具,切换到Profiler界面
Load 加载创建的性能分析文件
查看游戏中 每个Actor和组件的Tick消耗
一般降低每帧更新的Actor和组件的数量可以很好的提升游戏性能
快捷键 Ctrl+Shift+, 打开GPU可视化工具
排序消耗时长,分析gpu消耗
引擎自带工具,更详细的性能分析
***性能优化-子弹命中检测问题(大幅提高性能)
子弹移动的时候,直接进行射线检测,无需先做overlap或者碰撞检测判断到命中敌人后再调用射线检测。
直接射线检测性能大幅提高,整体游戏性能大幅提升,关闭敌人和子弹相关的overlap和碰撞检测,多余的组件(胶囊体等)可以删除。
*不用的3D UI组件尽量删除或者隐藏,在较快的情况下World Tick Time提升较明显
*游戏开始,删除不需要移动CharacterActor的CharacterMovementComponent组件
Timer是否堆积,一般返回主界面数量不变
清除Timer的时候同时减少Timer 堆积数量
*敌人(大量)移动性能优化
不使用CharacterMovementComponent组件,游戏运行后删除,会没有碰撞检测
使用timer移动(计算移动方向向量)
*自动避障自己写一个,使用胶囊体检测性能更好一些
*需要频繁大量创建和销毁Actor时,应该应用对象池,预创建好比如,敌人子弹等,需要的时候从对象池取出,使用后放回对象池。放在池中的比如角色蓝图需要需要禁用一些功能减少消耗。
从池中取出蓝图时别忘记重新初始化,开启相关功能。