想象力。
译/依光流
去年中旬,任天堂的《塞尔达传说:王国之泪》发售三天销量突破1000万,目前这款游戏的全球总销量已经超过2000万份,延续了前作《荒野之息》的势头。
而让人记忆犹新的是,《塞尔达传说:王国之泪》在开放世界设计上更进了一步,别人还停留在走地鸡和下副本模式中,这款游戏已经能让玩家在无缝的大世界中「上天入地」了。
日前,《塞尔达传说:王国之泪》 (后简称王国之泪)开发组在CEDEC大会上分享了游戏在制作无缝三维开放世界 (即充分利用天空、地面、洞穴场景的开放世界)时的技术经验。
注:文中PPT可用微信一键扫描翻译。
01
「二维」的荒野之息
作为王国之泪的前作,《塞尔达传说:荒野之息》 (后简称荒野之息)奠定了这两作的技术框架。比如,为了实现无缝大世界,制作组采用了更具多边形性能优势的延时渲染技术;为了兼容高自由度的玩法,制作组又使用了在各种环境下都很难出现物理计算纰漏的物理引擎,来呈现高灵活度的动作。
从制作组希望实现的要素倒推,在划定技术范围的过程中,他们面临最大的问题,就是「广阔的世界」和「无缝的运动」。
对于前者,在荒野之息开发初期,制作组的头脑风暴后,最终确定了「制作一个广阔的、平坦的世界」这个方向,换句话说,制作组将荒野之息的世界视作「二维」世界。
这种思维方式也有助于简化玩家无缝移动的设计。从结果来看,荒野之息的地图能够绘制「远处粗糙、近处精细的物件」「重要物件在远处也能显示,太细节的物件只有靠近才会显示」的LOD (Level of Detail)效果,能够配合着玩家在二维平面的移动,而顺畅地读取数据。
自想要实现的目标出发,进而选择的这些技术,有些时候也会造成「无法实现」的其他功能。至于「根据地图上二维数据加载」的机制没办法实现什么?那就是「三维立体构造」了。
换句话说,虽然荒野之息是一款能爬墙、能滑翔的3D动作游戏,但从游戏设计和实机体验来看,这仍然是一款被限制在二维开放世界中制作出来的游戏。
相比之下,王国之泪自开发初期团队的头脑风暴阶段,就开始思考如何向着地面、天空、地底去做纵向拓展。这种思考,也出于制作组希望挑战「荒野之息无法实现的东西」这个目标。
此外,荒野之息必须考虑兼容Wii U的硬件性能,而王国之泪是Switch专用游戏因此硬件限制很少。所以总的来说,王国之泪开放世界的开发技术难点,还是在于「如何将荒野之息当中的二维要素,扩展为三维式的设计」。
02
实现三维的「洞穴系统」
随着王国之泪的开放世界转为三维式设计,在场景开发时,涉及到了除地面之外的天空岛、洞穴、地下区域,因此在技术角度,有必要从三维视角重新考虑数据加载和LOD。
制作组首先关注的包含地面、墙壁、天花板这几个要素的洞穴。为此,制作组专门开发了一个既能针对三维洞穴数据进行读取和LOD,又能无缝绘制洞穴地形的「洞穴系统」。
使用这个洞穴系统,制作组能轻易地构建和呈现出一个巨大的空间,并且进行无缝加载。于是他们创建了一个巨大的地下洞穴,与地面场景搭配后,就能形成一个无缝衔接的地面+地下区域。
在验证这个广阔的空间里能设计什么玩法的过程中,制作组也慢慢诞生了探索黑暗、与强大的地下敌人战斗,以及骑乘者之间的战斗等想法。
经过反复测试,制作组得出的结论是,哪怕地下多出一块巨大的场地,也能给制作组带来更多的玩法设计思路。进一步来说,如果地下场景和地表相关联,制作组还能设计出更多「发现-游玩」的循环要素,于是后来游戏内也诞生了可以在地底和地表相互找到对应提示的游戏玩法。
在制作地底场景时,制作组会以地上的数据为基础来设计,比如地上凸起的地方在地下有凹陷,在地上有神社的地方地下也有检查点。
与地底洞穴相同,空岛的制作也采用了「洞穴系统」。
03
重新设计的加载系统
在将王国之泪的开放世界扩展到三维的同时,加载系统也进行了重新设计,以使得游戏加载起来比荒野之息更加灵活。比如其中一种,是根据游戏的推进在村庄地形变大时,可以针对游戏标识灵活替换物件的机制。
又如,在荒野之息中,进入大型地下城时会出现一个加载屏幕,但在王国之泪里,制作组构建了一个通用的数据预读取独立区域,从而实现无缝加载。
另一方面,由于加载系统的算法来自荒野之息,因此如何读取地下和天空的数据就成了一个问题。例如,地底场景处于远离地表的地下空间,玩家就没有机会同时看到地底和地面。
因此,制作组认为处于地底就加载地底、处于地面就加载地面,这样才能高频地呈现广阔的世界,所以只有当玩家到达一定深度时,才会卸载地面场景,加载地底场景。
然而在第一次实装的时候,卸载和加载无法及时完成,导致玩家在落向地底的过程中出现画面卡顿。理论上地底和地面是相连的,玩家直接从地面走向地底时,加载速度也够用了,但作为游戏商品还是有瑕疵的。所以对制作组来说,在玩家高速坠落时,也有必要让加载和卸载跟得上。
因此,制作组使用了四种方法进行改进。第一种,是通过「使用分析器进行可视化和处理重新排序」,将瓶颈和耗时的处理分为立即需要的部分和其他部分,并将前者排到不执行加载时的空闲时间处理,再将后者延迟处理。
在解决这种排序带来的瓶颈问题时,又筛选出文件加载速度本身就来不及的部分,所以第二种解决方案是「减少需要加载的文件数量」。
在基于二维世界的加载系统中,加载是根据为每个对象设置的显示距离来执行的,但即使是实际上看不到的东西,例如悬崖底部,也会被加载。因此在转向三维时,制作组在玩家可以到达的多个位置设置摄像点,并根据「从这些点看不到哪些物体」的数据来减少需要加载的文件数量。
制作组还用了第三种方法「减少了必须加载的文件大小」。其中一个例子,是确定模型中使用纹理的分辨率是否合适,如果降低分辨率没有问题,则自动降低分辨率,从而减少加载文件大小。
然而,即使充分利用了上述三种方法,仍然存在加载未及时完成的情况,所以制作组的第四种方法是「提前加载的开始时间」。
具体来说,首先根据所有用于进入地下场景的洞口,列出进入地下时需要的文件清单;然后,当玩家接近洞口时,让游戏在内存允许的情况下加载尽可能多的关联文件。通过上述四种方法,王国之泪实现了玩家从地面到地底的无缝移动。
那么,天空世界的加载情况如何呢?
在早期,天空岛还处于游戏策划的试错阶段,所以他们显然采取了「激进的空岛放置策略」。然而,如果在空岛设计最终确定之前实装加载技术,那么无法兼容的空岛创意和设计就无法采用了。
因此,制作组利用荒野之息的加载系统,创造了一个环境,让游戏策划可以不受限制地尝试空岛设计,创作他们真正需要的东西。结果来看,空岛上设计出了许多物品和道具,还有与主线的关联的大体量内容,以及与空中移动和途径地形的小型内容,也包括如何登上空岛的方式方法等细节。
基于上述功能和定位,制作组根据玩家的动作,只加载了一个大的空岛,以及多个小空岛并储存在内存中,而未加载的空岛会根据配置信息呈现预生成的LOD低模。通过这种定义「单位」并提前确定分配的方式,就可以在游戏中高速处理空岛卸载和替换新空岛的过程。
在制作组看来,制作无缝大世界以及建立顺畅的制作流程,某种程度上是浑然一体的事情。制作时不仅需要有实现无缝世界的技术,还要具备灵活运用的方法,再搭配良好的工作流程,最终才能发挥每个环节最大的作用。
制作组最后聊到,在玩王国之泪的时候,有的场景是你在看世界,有的场景是你只专注于眼前的物体,通过在这些场景之间的反复切换,才能在玩家的脑海里将整个世界无缝的连接到一起。
游戏开发中,制作组既需要考虑一整个周期的制作循环,也需要思考1/1000秒内的游戏优化细节,又或者是考虑整个团队的迭代。从程序制作的角度来看,要实现王国之泪的无缝大世界,最需要的还是能在「微观和宏观之间来回切换」的视角。
招聘内容编辑,
推荐阅读
离职网易的英国人 | 科韵路12年| 洛克王国手游
晴空之下 | 黑神话:悟空 | 虚环
大伟哥哭了 | 游戏科学十年 | 对话AFK2制作人
游戏行业书籍推荐:葡萄书房
(星标可第一时间收到推送和完整封面)