VR项目《盗墓大师》帧率优化实践

2017年03月30日 16:03 0 点赞 0 评论 更新于 2025-11-21 21:18
VR项目《盗墓大师》帧率优化实践

在本文中,我将分享一些关于UE4引擎优化的相关知识,以我们的VR项目《盗墓大师》为例,详细阐述帧率优化的实践过程。

氛围设定

为了适配公司的硬件,我们将游戏场景设计为双人面对面的模式。从游戏界面左下角的两列功能可以看出,游戏具备丰富的互动元素和对应的资源表现。然而,在优化之前,使用GTX980显卡开启VR模式时,游戏帧率仅为20多帧,卡顿现象非常严重。在与程序团队商讨并查阅了一些优化相关资料后,我们采取了以下操作来提高帧率。

一、准备测试环境

1. 地图构建

对地图进行Build操作,确保地图数据的完整性和准确性。

2. 解除引擎帧率限制

在工程设置的通用设置中,找到帧率选项,确保引擎中帧速最大值没有被限制。

3. 配置各项参数质量

根据硬件性能和游戏需求,合理配置各项参数的质量,以平衡画面质量和性能。

4. 调整画面分辨率

打开VR模式后,在编辑器中按“~”键调出控制台,输入“r.ScreenPercentage”命令。该命令相当于调整画面分辨率,默认值为100。你可以根据实际情况输入更高或更低的值,以确定一个清晰度合适的数值,例如120。

二、快速查找帧率瓶颈

准备好测试环境后,调出控制台,输入“stat unit”命令,查看当前画面中的各项运算耗时数据。其中,“Game”表示CPU运算游戏程序逻辑的时间,“Draw”表示绘制材质的时间,“GPU”表示渲染画面的时间。游戏整体延迟取决于运算时间最长的那一项,通过分析这些数据,我们可以确定瓶颈所在。在本次项目中,我们发现瓶颈主要在于渲染环节。

三、查找导致GPU消耗高的具体因素

转到视野范围内,按“Ctrl + Shift +,”组合键调出GPU查看器。通过该查看器,我们可以查看具体是哪些部分占用了渲染时间(红框内显示的是渲染总时长),条越长表示耗时越久。从查看器的结果可以看出,消耗渲染时间最多的主要是BasePass、灯光和后期处理这三大块(实际上不止这三块,每种颜色代表一个部分)。

1. BasePass消耗优化

如果BasePass消耗过高,我们需要深入了解哪些模型、贴图和材质的开销过大。具体优化方法如下:

  • 模型优化:对于面数过高的模型,进行减面处理,以降低模型的复杂度。
  • 半透明物件评估:对于使用半透明效果较多的物件,仔细斟酌是否有必要使用,尽量减少不必要的半透明效果。
  • 材质优化:材质是导致GPU消耗过高的主要原因之一。对于消耗较高的材质,检查其节点设置,关闭一些非必要的效果。可以通过查看材质复杂程度来判断,颜色越红表示越消耗资源。原则上,应减少使用点动画和曲面细分等效果。
  • 碰撞计算优化:如果场景中摆放的模型不需要参与碰撞计算,最好关闭碰撞功能,以减少运算消耗。
  • LOD和低质量材质贴图创建:UE4 4.14及以上版本集成了Simplygon工具,可以自动创建LOD(Level of Detail)和低质量材质贴图。可根据项目需求,设置需要的LOD级数。
  • 使用showflag命令定位问题:在游戏运行时,在控制台里使用“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(快速近似抗锯齿)。

需要注意的是,以上列举的三大块只是常见的消耗较大的领域,实际上还有其他一些需要优化的因素,例如雾效、反射球等。在完成这几大块的优化后,帧率通常会有显著提高。但随着游戏内容的不断增加,优化工作需要持续进行。

游戏截图预览

[此处可插入游戏截图]

作者信息

孟子菇凉

孟子菇凉

共发布了 3994 篇文章