现在分享一些UE4引擎优化相关的知识。 
氛围设定​

泰课在线

泰课在线

为了匹配公司的硬件,我们的场景设计成了双人面对面的模式。左右下角的两列功能也说明了游戏中有丰富的互动和对应的资源表现,所以优化之前GTX980显卡VR模式下游戏帧率只有20多帧,卡顿非常严重。经过跟程序商讨,查阅了一些优化相关资料后,进行了以下一些操作来提高帧率。
一:准备好测试环境
1: 地图Build;
2:确保引擎中帧速最大值没有被限制,在工程设置—通用设置—帧率下;

泰课在线

3:配置好各项参数质量

泰课在线

4:打开VR模式后在编辑器中按~键调出控制台,输入r.ScreenPercentage,这个相当于画面分辨率,默认是100,你可以输入更高或更低的值,确定一个你觉得清晰度合适的数值,比如说120.

二:快速查找帧率瓶颈
  准备好测试环境后,调出控制台,输入stat unit查看当前画面中的各项运算耗时数据;

泰课在线

 这里Game相当于Cpu运算游戏程序逻辑的时间,Draw为绘制材质的时间,GPU为渲染画面的时间, 游戏整体延迟取决于运算时间最长的那一块,所以这里可以确定瓶颈在渲染上。
三:查找具体是哪些因素导致的GPU消耗高
转到视野范围内按Ctral+shift+,调出GPU查看器

通过这里你可以查看具体是哪几块在占用渲染时间(红框内是渲染总时长),条越长的说明耗时越久。这个图上可以看出最消耗的是basepass,灯光和后期三大块(当然这里面不止这三块,每种颜色代表一块)。
1:basepass消耗高的话,就需要了解下哪些模型,贴图,材质开销太大。 面数过高的模型就减面;半透明用的多的物件就斟酌下是否必要;材质是GPU消耗过高的一大元凶,比较耗的材质可以检查下节点,关闭一些非必要的效果。材质复杂程度在这里可以查看,越红的越消耗,原则上减少使用点动画和曲面细分等一些效果。

泰课在线

另外,场景里摆放的模型如果不需要参与碰撞计算的话,最好关闭碰撞,减少运算消耗。

泰课在线

 UE4 4.14及以上版本集成了simplygon,可以自动创建LOD和低质量材质贴图,可根据项目需求,设置需要的LOD级数。
游戏运行时在控制台里使用showflag(隐藏)命令可以帮我们快速定位具体是模型?特效?光照?等等哪个消耗高,消耗高的就优化,列举几个常用的showflag命令:
showflag.Translucency
showflag.ambientocclusion
showflag.particles
showflag.staticmeshes
showflag.dynamicshadows
showflag.decal
2:灯光消耗高的话,需要检查动态光照数量(固定光也可以投射动态光照),是否有过多重叠的照射区域,照射范围参数是否开的太大。由于静态光照Build后已将灯光信息存储进了Lightmap,游戏中不再计算,所以灯光的主要消耗来自动态光源。先在世界大纲里查看所有灯光类型,确定有几盏动态光和固定光,前面有红点的是动态,黄点的是固定。

泰课在线

再进一步查看固定光的照射范围的重叠部分是否太多,重叠的越多,交集处越亮越红。用灯的原则是能不用动态光就不用,点光消耗〉聚光灯〉区域光(消耗主要来自被投照射的Mesh),灯光照射范围尽量不重叠,且同一个地图里固定光不能超过4盏。

泰课在线

关闭灯光的投射动态阴影也可以降低一些消耗,甚至一些灯光可以直接关闭投射阴影功能。

3:后期处理是另一个GPU消耗过高的元凶,需要慎用,原则是尽可能的把一些不必要的参数关掉,尤其是SSR,后期AO,Bloom等。一些参数默认会自带一些数值,没必要的全部清零,抗锯齿模式切换成FXAA。

泰课在线

泰课在线

以上列举的三块只是常见的消耗较大的领域,当然还有其他一些需要优化的因素,例如雾效,反射球等,这里就不一一列举了。优化完这几大块,帧率基本上会提高不少,看游戏实际情况优化工作可以告一段落。 随着游戏内容的增加,优化工作需要持续进行。
 游戏截图预览:​

泰课在线