UE4开发VR项目,帧率优化实践

早就听闻VR游戏对流畅度和帧率要求比较苛刻,UE4的优化坑很深,加之我们项目偏重度体验,资源和功能量较多。所以优化就成了我工作中既头疼又占比很大的一块。
做过地编的小伙伴比较熟悉帧率优化,也知道这个过程多么乏味。一头是模型师辛苦做出来的精美模型,以及特效师那狂拽酷炫吊炸天的粒子,另一头是延迟上天。程序大爷甩脸子说看下你的GPU消耗,严重阻碍了功能流畅的装逼,制作人一脸便秘说优化下吧,不能愉快的玩了。这时你得压缩贴图降低模型面数,删减材质效果,减少灯光,减少粒子发射数量,关闭各种后期效果等等。。。得罪了一圈人好不容易不卡顿了,又有人来说,感觉效果不好,这时你可能会疯。
由于我们项目规划初期对VR体验设计,引擎功能,目标硬件环境都缺乏足够认知,贸然选择了一个探索题材的项目,这就意味着环境代入感要强,交互内容要足够丰富,玩家行为更不可控。先直观感受下氛围:

为了匹配硬件,我们的场景设计成了双人面对面的模式。左右下角的两列功能也说明了游戏中有丰富的互动和对应的资源表现,所以优化之前GTX980显卡VR模式下游戏帧率只有20多帧,卡顿非常严重。经过跟程序商讨,查阅了一些优化相关资料后,进行了以下一些操作来提高帧率。

一:准备好测试环境
1: 地图Build;
2:确保引擎中帧速最大值没有被限制,在工程设置—通用设置—帧率下;

3:配置好各项参数质量

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

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

三:查找具体是哪些因素导致的GPU消耗高

转到视野范围内按Ctral+shift+,调出GPU查看器

通过这里你可以查看具体是哪几块在占用渲染时间(红框内是渲染总时长),条越长的说明耗时越久。这个图上可以看出最消耗的是basepass,灯光和后期三大块(当然这里面不止这三块,每种颜色代表一块)。

1:basepass消耗高的话,就需要了解下哪些模型,贴图,材质开销太大。 面数过高的模型就减面;半透明用的多的物件就斟酌下是否必要;材质是GPU消耗过高的一大元凶,比较耗的材质可以检查下节点,关闭一些非必要的效果。材质复杂程度在这里可以查看,越红的越消耗,原则上减少使用点动画和曲面细分等一些效果。

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

传统游戏的LOD做法在VR游戏里并不是必须的,因为很多VR游戏的活动范围很有限(设计上避免眩晕不要让玩家大范围位移),不需要由远及近的切换模型状态,并且设置不合理的话,在VR游戏里看到一个模型来回切换状态是非常明显的,比较影响体验。由于UE4对面数计算优化不错,所以建议活动区域较小的话模型做精,场景大的话中远景直接用低模。

游戏运行时在控制台里使用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。

以上列举的三块只是常见的消耗较大的领域,当然还有其他一些需要优化的因素,例如雾效,反射球等,这里就不一一列举了。 优化完这几大块,帧率基本上会提高不少,看游戏实际情况优化工作可以告一段落。 当然,随着游戏内容的增加,优化工作需要持续进行。至此,相信你已经深深的感受到了VR游戏优化的苛刻,和UE4深似海的套路。

转自:
[ue4]用UE4开发VR项目,帧率优化实践(上)
[ue4]用UE4开发VR项目,帧率优化实践(下)