U3D游戏中画质调节与游戏运行效率适配

2016年12月05日 16:55 0 点赞 0 评论 更新于 2025-11-21 20:57

需求来源

众所周知,不同设备的硬件配置存在差异,其 CPU 和 GPU 的处理能力有高有低。要让同一款游戏在所有设备上都能流畅运行且画面精美,这几乎是不可能实现的。因此,我们需要针对不同设备的性能进行画质调节,以此确保游戏能够流畅运行。

控制要点

要明确我们需要控制的内容,只需找出影响游戏运行效率的因素即可。由于游戏类型众多,无法一一列举所有影响因素,根据个人经验,以下是一些常见的影响点:

  • 贴图精度
  • 渲染面数
  • 材质复杂度
  • 粒子数目
  • 阴影质量
  • 水面效果
  • 增强性场景交互
  • 引擎后期效果

下面将逐一说明这些因素的影响原因,并给出常见的优化方法。

贴图精度:SKIP MIPMAP

贴图精度会影响 tex2D、texCUBE 等采样指令的执行速度。对于显卡性能较差的设备而言,这可能会成为游戏运行的一大瓶颈。一般的游戏引擎都提供了 SKIP MIPMAP 功能。

SKIP MIPMAP 是指在上传贴图数据时,跳过指定级数的 MIPMAP。这样在 SHADER 中进行访问时,使用的就是较低级别的贴图精度。例如,一张 1024x1024 的贴图,将 SKIP MIPMAP 设置为 1,表示跳过一级 MIPMAP,那么在 SHADER 中采样时,最大分辨率将变为 512x512。

渲染面数:裁剪&LOD&DETAIL

渲染面数和 DRAW CALL 数目会受到 GPU 位宽和 GPU 频率的限制。当超出 GPU 负载时,游戏帧率会急剧下降。因此,我们需要对渲染面数进行有效控制,常见的控制方法有以下三种:

  1. 减小裁剪距离:减小裁剪距离可以将远处的景物裁剪掉,从而减少 DRAW CALL 和提交的面数。需要注意的是,这里的减小裁剪距离要与视锥体裁剪配合使用,仅依靠摄像机的 FAR CLIP PLANE 作用不大。
  2. 模型 LOD:随着物体与摄像机距离的增加,其细节会变得难以看清,此时可以减少模型的细节。LOD 的切换可以采用两种策略:一是根据距离,二是根据机型配置,取距离计算结果和机型配置结果中最大的 LOD 等级。
  3. 隐藏细节:对场景中的景物根据主次关系进行标记,不同主次关系的景物受不同裁剪距离的影响。例如,地表可视距离为 1000,树木可视距离为 800,花草可视距离为 500。主次细节的显示与否也可以采用距离和机型配置两种策略,只有当距离计算结果和机型配置结果都要求显示时,才显示该细节。

材质复杂度:切换 SHADER

材质复杂度在整个画质和效率控制系统中占比较大,因为大部分的开销都源于材质。本质上,控制材质复杂度就是切换不同的 SHADER,以降低 GPU 的运算复杂度。在参与的引擎和游戏开发项目中,常见的有以下两种方法:

  1. 宏控制的 SHADER 编译:在 SHADER 中使用宏定义,在编译 SHADER 时,将设备定义的宏开关附加到 SHADER 代码顶部,编译器根据宏内容进行编译。这种方案的优点是一套代码可以适配多个设备配置,但缺点是如果要进行实时切换,会触发 SHADER 的重新编译。对于手机项目,一般在启动时进行硬件检测,选择最适合当前机型的编译配置进行材质初始化;对于端游等项目,则需要考虑动态切换的问题。需要注意的是,汇编级的 SHADER 不支持这种方案,如 DX ASM、STAGE3D AGAL。Unity3d 支持这种方案,笔者曾工作的公司的自研手游 3D 引擎就采用了该方案,前提是不要让玩家在游戏过程中切换画质。
  2. 切换 Technique:基于一个材质拥有多个 Technique,且 Technique 不是用于区分材质。在这种情况下,Material 作为区分模型材质的单元,其内部包含的 Technique 用于进行设备性能适配。当需要切换高中低配置时,只需切换 Technique 即可。常见的引擎如 OGRE、UNITY3D 都支持这种方案。

粒子数目:禁用发射器

一个粒子特效可能由一个或多个发射器构成。我们可以为每个发射器指定一个 LOD 等级(如果不支持额外添加数据,可以通过发射器名字加前缀,如 LOD0_FIRE0、LOD1_FIRE1 等),然后根据玩家的选择或设备配置禁用发射器,以减少粒子计算和渲染的开销。

阴影质量:SHADOW MAP 精度&选择性开关

阴影是增强画质的有效手段,但当玩家机器配置无法满足阴影质量要求时,就需要选择性关闭。例如,可以为 NPC、怪物、BOSS、其他玩家和玩家自己配置阴影标记,一般有实时阴影、脚底黑圈、关闭三种选项,再根据机型配置或玩家选择动态开关各单位的阴影。此外,阴影的效率开销还受 SHADOW MAP 的分辨率、是否使用软阴影等参数的影响。

水面效果:折射&反射&普通水面

水面效果通常有以下四种:

  1. 实时折射 + 实时反射(目前的主流配置)
  2. 实时反射(早期一些 MMORPG 使用)
  3. 普通水面 + CUBEMAP 反射(如《丝路传说》的水面效果)
  4. 普通半透明水面(如《魔兽世界》早期的水面效果)

如果游戏中实现了以上所有效果,可以根据玩家选择进行切换,和 LOD 一样,取玩家选择和配置的最大值。

增强性场景交互

增强性场景交互可以让游戏世界更加真实,例如地上的小鸟在玩家跑过时会惊飞,玩家进入草丛时草丛会左右晃动。但这些细节会增加 CPU 和 GPU 的额外开销,因此可以提供一个配置选项,让玩家或根据机型进行开关控制。

引擎后期效果

引擎后期效果如 BLOOM、HDR、热力扭曲等会带来较大的开销,提供开关选项让玩家或根据机型配置进行控制即可。

总结

我们无法保证游戏在每个玩家的机器上都能呈现出美轮美奂的画面,但我们希望游戏能够在每个玩家的设备上流畅运行,至少给玩家一次体验游戏的机会。如果玩家愿意为了更好的游戏体验升级自己的设备配置,那也是一件值得骄傲的事情。

作者信息

孟子菇凉

孟子菇凉

共发布了 3994 篇文章