随着任天堂Switch的成功上市,开发者们又有了一个可以发行产品的独特新平台。对许多工作室来说,这意味着可以将先前发行的游戏提供给一批全新的受众。在Bulkhead Interactive,我们决定把自家2016年发行的解谜游戏《图灵测试》移植到任天堂Switch,因为我们认为这是在这个新平台上试水的绝佳方式。
(本视频转载自YouTube:视频原址)
项目的第一步是同步到最新的引擎发行版,这样我们就能依赖虚幻引擎最新最好的版本推出移植版。虽然这对一款三年前的游戏来说是大跃进,但代码的移植基本上是小菜一碟,我们在此过程中只需要做一些小幅调整。
升级带来了一些重要的渲染更改,比如由于引入了新的电影色调映射器,最终呈现的画面发生了显著改变。这样的改变要求我们做一些色彩分级工作,对高光度进行一些调整,并在关卡的反射设置中增加新的通道,从而使游戏的外观更符合美术师原本的设想。
沉浸感对一款靠剧情推动的游戏来说很重要,因此我们希望玩家花在加载屏幕上的时间越少越好。虚幻引擎为此提供了几种流送关卡的解决方案,分别针对从常规关卡流送到比较特殊的场景构造的各种游戏架构。对于《图灵测试》这样基本呈线性结构的游戏,常规的关卡流送是很可靠的解决方案,让我们能分摊载入和载出游戏场景数据块的成本,同时保持很低的内存开销,尽可能消除阻塞性的负载。
但缺点是,垃圾回收程序不得不加班加点工作,导致运行时游戏线程负载激增。在任天堂Switch这样限制较多的便携式系统上,这在关卡流送时给我们造成了一些严重的问题。新的Actor和组件被引入场景时必须经过注册、初始化和整理,同时垃圾回收程序还要处理离开活动运行集的实体。有些需要在游戏中全程使用的复杂Actor带有几十个组件,使这个通常在其他平台上不成问题的问题变得更加棘手。
我们曾尝试过忽略卡顿,允许玩家在场景切换时自由漫游,但是这会导致不稳定的物理交互,具体说来就是一些至关重要的Actor(需要玩家带着过关的物体)在场景tick结束后发生碰撞,而被弹出场景。最终我们只能引入少许延迟作为折中的解决方案,也就是在流送载入下一个关卡时强制玩家原地不动,但允许四处张望。
如果说我们对于类似情况有什么好的建议,那就是要好好研究关卡流送的可用选项(“项目设置(Project Settings)”>“流送(Streaming)”。这些选项可以限制每帧用于Actor和组件初始化及拆解的时间,以及其他类似的重要变量。
先前《图灵测试》的所有发行版都只有英文,但EFIGS本地化是在任天堂Switch上通过认证的基本要求。事实证明这是一个难题,因为《图灵测试》有许多书面信息是烘焙到环境纹理中作为关键剧情元素的。
解决这个问题的办法就是动态创建窗口控件,并把它们渲染到纹理。这一过程仅在加载屏幕中或玩家手动更改游戏语言时完成。这个系统为我们节省了给场景中每个文本实例提供多个纹理的开销,也不需要在迭代翻译时做额外的工作。
为了确保玩家获得流畅的体验,我们必须减少渲染和游戏线程对游戏帧率的影响。大多数情况下,在全面优化游戏性代码之后,我们的瓶颈就在GPU上。为了诊断我们最关心的方面,我们通过命令行利用了各种STAT命令。每当发现一个问题,我们就用内置分析器——包括最近推出的Unreal Insights——或平台提供的图形调试器深入钻研,分析成本来源并提出解决方案。
我们把成本较高的蓝图运算转为C++,尽可能避免不必要的Actor tick。通过将许多骨骼网格体替换成静态网格体,并去除移动物体(例如风扇)的碰撞,确保了将游戏线程成本控制在可管理范围。我们还发现在有些情况下,透明度会成为一个问题。使用着色器复杂性视图模式帮助我们找到了发生过度绘制的地方。随后我们修改了材质、网格体和粒子系统,以确保帧率一致。
我们做了一个有可能造成两极分化的选择,那就是将游戏的帧率限制在45 fps,因为我们发现这是在各种逻辑和图形强度的场景中可以维持的合理目标。这低于理想的60 fps,但还是高于30。我们发现以这两种标准帧率为目标对图形选项进行微调几乎得不到什么收益。
我们或许可以依靠虚幻引擎提供的现代渲染功能,比如动态分辨率,但经过一番深思熟虑后,我们还是决定使用比较传统的办法。
我们发现在任天堂Switch上最消耗机能的实时渲染功能是环境光遮蔽和屏幕空间反射。我们认为它们对于环境的视觉保真度是至关重要的,因此我们小心地把它们的质量调整到了我们认为合理的程度,来实现我们的目标。在开发过程中,我们依靠引擎的出色支持,对图形进行了许多微调。在慢慢收敛到最终数值的过程中,我们一直利用设备分析,最终圆满完成项目。
最后,虚幻引擎提供的工具和功能让我们的游戏在任天堂Switch上快速成型,也给了我们时间来优化资源和代码,为玩家提供更流畅的定制体验。