腾讯独立游戏孵化器,致力促进游戏行业多元生态的整体发展。关注公众号【腾讯GWB游戏无界】(ID:gwboffical),解锁更多富有深度的游戏研发干货。
原文链接:这个1998年就发行的经典系列游戏,如何跨平台保留醇正的游戏体验?
当一款游戏从PC移植到主机,玩家的操作方式有着根本性的改变,硬件规格的变化也给游戏运行效率带来极大的挑战。开发者应该如何为玩家适配主机的操作习惯?内存、CPU、GPU的优化有哪些必须注意到地方?
本次“同行-开发者沙龙”邀请到育碧美因茨的开发团队,剖析《纪元 1800》从PC移植到主机时遇到的各种挑战以及应对方式。
以下是我们整理的演讲实录,为提升阅读体验,内容有删减和调整:
大家好,我是育碧美因茨的资深游戏设计师Nicolas Magnier,为大家讲解《纪元 1800》在游戏设计方面的调整,然后团队的3D程序员Raimin Safapour和Frank Hoffmann会讲解技术上的挑战。
在讲解之前,我要先简单介绍一下《纪元》是什么。
今年是《纪元》系列25周年纪念,当然这与中国悠久的历史相比不算什么,但团队仍然对达成这个里程碑感到非常开心。《纪元》系列一共发布了七款游戏,第一款游戏是1998年发行的《纪元 1602》,现在看来已经有点过时了。最新的游戏是《纪元 1800》,它在2019年发行了PC版,今年3月的发行了主机版。
那么《纪元》的玩法是怎样的呢?这是一个帝国建造游戏,开局玩家定居在一个小岛上,然后建立村庄,进而扩展为更大的城市。这就涉及到满足城市人口的需求,例如给人们提供商品、面包,各种饮料和衣服。
随着城市的不断扩张,玩家要驾驶自己的船去新岛屿上寻找新的资源,结识新朋友。玩家可以与他们交易来增强经济实力,也可以与他们建立外交关系成为朋友,或是与他们开战,因为游戏也有军事玩法。总之游戏的系统非常多,很有深度。
每款游戏都设定在一个历史时期,有的游戏是在中世纪时期,也有设定在未来的游戏,《纪元 1800》是在欧洲的工业革命时期,所以说历史元素对这个系列非常重要。
另一个重要方面是文化,以及对不同文化节日的庆祝。《纪元 1800》的重点是南美洲文化,不过游戏中也包含了很多其它文化,例如我们最近的DLC就是为庆祝中国新年的。
这就是《纪元》系列的大体简介,接下来我们开始讲解移植过程中的各种挑战。
移植工作开始时,我们不想为了适配主机而简化游戏玩法,而是要忠于整个系列,忠于《纪元 1800》的玩法和内容。
这给我们留下了两个重大的设计挑战,就是如何适配屏幕距离和如何匹配游戏手柄。
2.1 屏幕距离
PC玩家和显示器的距离大概在60厘米到1米之间,PC版游戏画面里包含很多信息,有很多文字和图标。
但主机玩家和电视的距离通常在2到3米左右,如果主机版使用同样的界面,想看清这些文字和图标就很困难。
在主机上通常建议使用28像素、1080P的字体,但这无法满足我们的需求,所以团队必须重构主机版的UI界面。这是工作量很大的事,但对游戏的提升很明显,能让文字更容易阅读,图标也能分辨,迷你地图最终也可读了。
以展示城市吸引力的界面为例,这里包含所在城市的各种信息。在PC版里,信息显示在大型弹窗里。
在主机上,我们的办法是把所有东西放大,改成全屏菜单,主要的形式和界面复用PC版的设计,因为这些界面在PC上运行良好,只在某些关键地方做出修改。比如在右侧添加一个面板,显示有游客来到你的岛屿,因为它与城市吸引力密切相关。
有些界面的修改更具挑战性,例如PC版玩家可以在统计界面里查看大量信息和数据,这在主机上是不可能的,我们不得不做一些妥协。
在主机版里,我们再次尝试保持相同的结构,但必须删除一些元素,即旁边的岛屿列表。玩家仍然可以访问岛屿列表,只需要操作“向左移动”就能显示额外的面板。
所以重新确定优先级在设计上是很重要的,对玩家在特定时间需要看到的信息进行优先排序。
2.2 匹配手柄
PC版游戏可以用键盘和鼠标来操作,键盘上有大量的快捷键,鼠标操作灵活且精确。但主机板的手柄只有很少的按钮和遥杆,很难还原键鼠的操作。
我们通过“按钮提示”功能来改善操作体验,根据游戏中所处的环境,画面中会展示可以进行的操作,并给分配动作按钮,例如下图右下方的四个提示。所以这也是一个非常好的上手工具,整个游戏都在使用它。
比如贸易路线菜单,由于有“按钮提示“,我们简化了主机上的交互界面,删除了一些元素。主机板的界面设计是个新的方案,有一组新的按钮用于特殊操作,因此很难在游戏中重新安排对应按钮。有些时候可以进行的操作太多,我们不得不使用一些对玩家来说有点难度的操作方式,比如按下摇杆。
另一个频繁使用的是放射式菜单,玩家推动摇杆就能选择对应方向的功能,使用起来非常直观和快速。
游戏的建筑菜单也采用了放射式,通过按下肩键切换建筑类别。
放射式菜单的轮盘也存在限制,因为单一时间可以展示的条目数量是有上限的。对我们来说,比较好的平衡是一个轮盘中显示14个条目,如果比这再多,想精确选中某个条目就变得困难了。还好我们有个设置,可以让一个轮盘只显示八个条目,然后通过分页系统让玩家循环切换轮盘。
2.3 光标精度
最后一个游戏设计上的变化是光标精度,主机版的光标改为屏幕中心的圆形光标。这有两个好处,第一个是因为它很大,玩家可以很容易从远距离看到它。其次使得选择误差范围更大一些,玩家不需要精确选中,只要挨到目标就可以选了。
但游戏中有时候是需要精确的,例如在放置街道时。在游戏测试中,我们看到由于遥杆的精度不足,玩家在建造街道的时候是有点困难的。
当时我们使用的是非常线性的速度曲线,也就是如果移动摇杆的50%,光标移动速度就是正常速度的50%左右。
但我们很快意识到,保持只移动遥杆的50%要花费更多力气,能一直全速移动操纵杆要舒服得多。如果玩家只移动了摇杆的50%,这意味着玩家想要精确操作,所以实际上的移动速度是10%。如果在很长一段时间内保持移动操纵杆,实际移动速度会提高,玩家可以快速在世界中移动。
所以我们找到了一种既可以非常精准,又可以非常快速地在地图中移动的方法。
接下来讲解的是技术方面的挑战,为了理解这些挑战,我们先看看这款游戏和其他游戏的不同之处。
游戏里有超过100个以上的建筑物,成千上万的人在街道上行走,这意味着《纪元 1800》的独立对象对其他常见的游戏更多。不仅如此,玩家还可以自由选择在哪里放置建筑,所以要想预设定一些东西是非常困难的。
游戏里还有非常多变的摄像机视角,虽然通常使用自上而下的视角,但玩家可以通过放大和倾斜摄像机来看城市全景,甚至可以看到附近的城市。此外还可以通过点击迷你地图,让相机视角从地图的一端跳到另一端,这意味着很难实时传输内容。
挑战不仅仅是技术上的,我们的团队也面临着挑战。
《纪元 1800》使用的是自研的帝国引擎,在移植之前,帝国引擎只支持DirectX 11和Direc X 12,这意味着它只是一个Windows游戏引擎。总之,我们不得不在没有任何相关知识的情况下移植整个游戏引擎。
幸运的是,我们有育碧内部的图形API抽象层的支持,所有繁重的工作都是由它完成的,同时我们也必须了解低级库才能修复问题。我们大概花了一个半月的时间,才勉强在主机上运行起来。
我们第一次看到的就是下边的画面,花了几次迭代才看到一个像游戏的东西。
几周以后才勉强看到一个国家。
这是我们尝试让用户界面运行的时候。
情况时好时坏,在主机移植的第一步,我们已经见识到了以后可能出现的挑战。
比如仅仅是启动游戏就非常难,因为我们不可能在主机上计算着色器。这意味着我们需要在网络上运行的工具来编译着色器,并将结果发送回主机,这几乎是业界普遍的解决方案。
另一个挑战是平台SDK的局限性和它众多的bug,例如一些平台SDK要求为CPU和GPU内存编写自己的内存分配器。
还有C++标准模板库(STL)并不总是100%符合标准,但即使符合,标准也是非常宽松的,它可能仍然达不到预期,所以必须得经常检查以确保万无一失。
到此,我们有信心制定视觉和性能目标了。
我们决定在性能更好的PS5和Xbox Series X上以4K的原始分辨率、每秒30帧来渲染游戏,对于性能较弱的Xbox Series S,可以降低到1080P和每秒30帧。
我们发现,对于《纪元 1800》这样一个慢节奏的战略游戏来说,每秒30帧足够了,提高到每秒60帧的收益不明显。用4K渲染的好处很明显,然而最大的挑战是内存消耗。
可惜的是,我们没有关于PC上内存消耗的可靠的统计数据。许多用户报告说,在启用所有DLC的完整版游戏的中后期,内存使用量大约有20G。我们建议基础版游戏要使用4GB虚拟内存,所以假设需要有大约25GB的内存才行。
在主机上,PS5和Xbox Series X的内存为16G,Xbox Series S只有大约10G的容量。但主机实际可以使用的内存要少得多,因为还有一个占用内存的操作系统在运行。
我们必须减少内存消耗,这是主机板放弃DLC的最重要的原因之一。但这还不够,游戏还需要进一步优化。
3.1 内存优化
我们用控制台工具更深入地了解内存消耗,发现游戏资产消耗了太多的内存。我们已经为网格和地形等提供了非常好的流式传输系统,但从未将他们从内存中剔除。我们在主机版里引入了几个具有固定大小的缓存,以便在需要加载新数据时将其剔除。
游戏里有两个不同的区域,玩家可以在南美洲和欧洲之间切换。遗憾的是,这增加了几秒钟的加载切换时间,但这是降低内存消耗所必需的。
我们还在主机上使用原生纹理文件格式,不再需要额外的中间缓冲区的拷贝,节省了更多的内存,也让加载时间更快了。
我们还查看了渲染目标,在许多目标中可以使用较低较小的规格,而不会降低游戏的视觉效果。
我们也使用了内存别名,许多资源特别是相当大的渲染目标,并不需要用于整个帧,而只需要用于整个帧的一部分。
3.2 CPU 优化
CPU的并行代码也得到了改进。游戏的任务系统有许多可以改进的地方,例如在主渲染线程上有几个对象的初始化拖慢了进度,我们把这些对象转移到了单独的任务中。还有每一帧的目标代码,我们将其转移到异步运行的任务中,提高帧率。
我们特别关注的一点是渲染引擎和游戏引擎之间的桥接。《纪元 1800》的渲染引擎在很大程度上是与游戏引擎分开运行的,时序完全不同,游戏引擎会在同步点时更新数据,这些同步点通常非常短。但我们注意到,在性能分析过程中有一些地方拖慢了帧率,有一些本不应该存在的UI代码。在游戏程序员和引擎程序员的帮助下,我们把这些代码移除了。
我们还需要做更多的CPU性能优化。例如在PC版中,建筑是由很多小网格组装而成,当需要渲染时,所有小网格都需要在每一帧中进行处理。我们和技术美术人员一起开发了工具管线,把这些小网格合并成单个对象,改善CPU的计算。
我们还发现了一些在CPU上运行的内容可以移到GPU上。例如我们的整个动画蒙皮代码原来都在CPU运行,现在在计算着色器上运行。
我们还进行了几次纹理压缩,并且还将渲染系统的几个部分切换为无绑定渲染,特别是用于所有资源纹理的材质纹理系统,还有UI渲染和粒子渲染,进一步减少了CPU性能消耗,因为每一帧需要处理的绑定代码要少得多,也减少了描述符数量。
3.3 GPU 优化
在GPU优化方面,我们从PC版中了解到,着色器使用了非常多的寄存器,需要使用半精度浮点做优化。半精度浮点在PC上很难使用,因为PC的GPU型号很多,并非所有GPU都支持半精度浮点。主机的硬件型号是固定的,开发者知道它能达到什么效果,所以主机版能使用半精度浮点减少寄存器的压力。
我们还改进异步计算代码和指令缓冲区,GPU可以更好地分配工作负载。
我们还使用了AMD的FSR2升频解决方案,在不能百分百确定能够达到我们的质量目标和性能目标时做到了这一点。这部分是我们的一个安全补充策略,我们当时并不需要它,但是是锦上添花的事。
有些地方用到一些小技巧,比如南美洲区域在特定相机的视角下有大量密集的植物,有极高的过度绘制消耗。
我们不能更改原始资产,因为这些资产与目前仍在交付DLC的PC版共享。我们所做的是加入特殊技巧,在某些情况下不使用最完整的细节。例如在加载期间把森林改得稀疏一些,大约有15%树林会被随机去掉。
我们添加了一些着色器技巧,在某些三角形没有面对相机时把它砍掉。
以上就是我们在移植过程中发现的问题和应对方式,希望这些内容能启发更多的开发者。感谢你的观看。
学习了~