大家好,我是堂田卓宏,在《荒野之息》的制作中我担任技术总监的职位。我在2003年加入任天堂,并且作为程序员参与了许多不同游戏的制作。在本次的制作的过程中,我们的程序员团队也需要打破许多游戏内技术的常规。从用于制作大型地图的地形技术、游戏的画面和图形技术、关卡设计的方法论、AI、动画制作等等,甚至于我们游戏资源制作、管理和测试的流水线,我们不得不重新思考我们此前挑战技术难题时常用的方法。我们处理这些难题的过程本身就是一个很有趣的故事,但是我们今天时间并不充裕,如果以后有机会我们会非常乐于和大家分享那些经历。因此今天我们将谈一下我们是如何实现此前藤田先生谈到的“复合游戏”的思路。这其实是一个“物理”和“化学”的问题,但不用担心,这不是一个学术讲座。
在我看来,《塞尔达传说》首先是一个“动作”游戏,在我们“打破传统”的道路上,我们决定首先审视“动作”的基本要素。从最基本的组成成分来看,动作游戏是由“碰撞”、“运动”和“物体状态”组成的。其中碰撞和运动组合起来就成为了我们所说的游戏中的物理。
但是理所当然地,在游戏开发当中你并不会想要教科书上的那种物理学,我们所需要的其实是符合游戏设计需求的物理学。这就是我们所说的“游戏物理学”,从NES(美版FC的名字)时代开始,一系列各种各样的游戏就开始帮助我们理解所谓的“游戏物理学”。游戏物理学其实也可以被看作假像的物理学或者谎言物理学,但是为什么我们需要撒谎呢?这是因为我们需要增加游戏的可操控度和加强游戏给玩家的反馈,总而言之,游戏物理学的目的是为了满足游戏设计的需求。同样的,有些物理学假象可以帮助我们优化游戏的运行效率,有些时候甚至可以增强游戏的现实感。但是,从另一个角度来讲,如果我们在制造假象,那我们需要物理学法则的目的是什么呢?我认为一个原因是这样我们可以在玩家和游戏之间制造某种信任感。玩家在游戏中遇到某些他们在现实中也会观察到的现象,这样就会相信游戏世界中的某些特定的规则,而这是我们所谓的“聪明的谎言”的基础。当然了,塞尔达系列也是如此,我们过往的作品中广泛地利用了游戏物理学,这样使玩家动作或者解密更加符合直觉。作为程序员的一大乐趣便是决定如何去实现实现这些“聪明的谎言”,以及如何最好地表现这些发生在想象世界中的事情。考虑到这个游戏的背景是设置在了一个庞大的世界,因此这部游戏也需要一个相应的稳健的“游戏物理学”来让这个游戏更加生动。
另一方面,从游戏开发的最开始高自由度就成为了一个重要的游戏主题。举个例子,玩家在游戏中可以将任何物体搬运到任何游戏中的地点。实际上如果你足够努力,你甚至可以将游戏最开始时玩家遇到的石头一路推到打最终Boss的地方。当然了,在我们对物理学的模拟中,我们必须得在一系列非常复杂以至于几乎无限的情况下实现这些东西。创造这些模拟物理学耗费了非常多我们的开发资源,但我们使本作中的物理有趣起来的决心非常坚定。但是我们很快意识到如果我们按照此前我们的开发方法,我们在实现目标之前就会耗尽我们的动力。因此,经过一些简单的测试之后,我们决定使用havok来帮助我们实现我们的物理学模拟。havok的稳定性和他在游戏业过往的记录使得havok成为了一个非常有吸引力的选项,他能够让我们完成所有我们希望完成的假象。我们在《荒野之息》中引入的新能力和新道具都非常依赖于物理系统,这使得我们可以专注于实现我们最希望实现的游戏内元素。
请看一下这几个例子。首先是“停滞”(Stasis),这是一个可以让某个物体的时间停止的符文。这看起来好像我们只是让某个物体停了下来,但实际上这个物体正在努力地保持稳定的状态(译者注:从ppt中给出的图片来看,这句话的意思其实是Stasis实现的方式并不是简单的停下一个物体,而是实际上给了物体一个相反的动力来让它停下来,这样当物体的时间重新开始流动时只需要简单地撤去那个动力就好了)。
这样看起来似乎物体能够保持自己自身的动能,但实际上这就是一个“聪明的谎言”。这会让你感觉这件事情是正常的,但实际上你仔细想一想就会觉得很不对。游戏内物理最好的状态就是如此,他让你创造一些在现实中无法实现的东西。下一个符文是磁力(Magnesis),他能够让你自由地移动金属物体。这看起来好像是磁力,但实际上并不是,它只是一些看起来像磁力的东西。这里的重点是避免程序上的不稳定同时让玩家仍然能够自由地控制物体。接着是藤林秀麿先生经常谈到的爬墙能力。通过创造一个林克和他所攀爬的表面之间的动态约束(dynamic constraint),我们成功把林克和他所爬的物体联结了起来。负责攀爬的程序员花了很大的精力来确保这一系列过程能够正常运作,而正是因为他的努力当林克在会移动的表面上攀爬时我们可以得到一个比较令人满意的反馈,而havok在这里替我们解决了“动态约束”的问题。
砍到一棵树实际上也是一种破坏的假象。在树木开始倒下的一瞬间,他变成了一个“被伐下的物体”(logged object)(译者注:从ppt的配图来看,这里的意思是当木头被伐倒时它其实并没有被破坏,而是成为了一个新的物体)。被伐下的木头倒入水中时,它会浮起来,这种浮起的能力在游戏设计中有着重要的意义。但是当一个物体在游戏中浮起时,我们实际上创造了一种独特但是虚假的漂浮。
下面我希望回到此前藤林秀麿先生所提到的复合游戏的主题。在我们数次的针对游戏物理系统的测试中我们发现如果游戏内有一套统一的、连续一贯的物理规则,玩家就会冒出各种各样的新奇的想法和他们想尝试的各种各样的事情。举个例子,这个金属板放在这里的目的是为了让玩家通过这条河流。但是当你把它举起来时,你可能会想去试试把它砸在敌人身上。而当你看到河流中漂行的伐木时,你可能会想要跳到它上面去。坐在伐木上顺流而下实际上是非常有趣的,你可能会想到之前提到的那个demo。而当你可以攀爬会移动的物体时,在你和一个巨大的、可以攀爬的敌人对战时你又会有怎样的体验呢?当你爬上一个被你用Stasis充能过的物体时,又会发生些什么?这里的重点其实是这些各种各样新奇的想法充满了我的脑袋,而我兴奋感的来源并不是我作为一个开发者,而是我作为一个玩家。不如我去试试做这个?等等,不如我再去试试那个?这是一个简单的元素组合起来会产生复杂的结果的世界,而你在游玩中所感受到的激动正是来自于那些你想去尝试的事情。我意识到这才是我们所想要去创造的游戏。
现在我想稍微地改变一下我们的话题。图中的两位是我们开发团队的成员,他们正在讨论我们该如何打破我们之前提到的传统,他们看起来挺开心的。正是在这次讨论中某些关键词正式诞生了。如果我们在游戏中有物理引擎,那为什么我们没有化学引擎?
正如你所知道的,塞尔达系列有着悠久的利用和化学有关的事件作为游戏要素的历史(译者注:比如说点火等)。和物理一样,创造可以参考现实世界经验来解决的谜题可以让玩家依靠本能去解开这些他们。因此我们决定去创造一个化学引擎。那么,这个物理引擎到底是什么?物理引擎可以从某种程度上被理解为基于某些规则的运动计算器,相应地,我们认为化学引擎应当被理解为基于规则的状态计算器。我在此前提到过,动作游戏实际上是“碰撞”+“运动”+“状态的改变”,而正是由化学引擎来计算物体状态的改变。
我希望通过一个我们游戏设计中的简单例子来向大家展示化学引擎到底会做那些运算。首先,我们将诸如火焰、水和冰等并不具有一个特定的存在方式的物体称之为“元素”。然后,我们将诸如树、石头、玩家自身和武器等固态的物体称之为“材料”。化学引擎利用这些东西基于三条简单的原则来进行运算。首先是第一条规则:元素可以改变材料的状态。所以树上的叶子遇到火后会消失。其次是第二条规则:元素可以改变另外一个元素的状态。所以当火遇到水时火会灭掉。最后是第三条规则:材料之间不能互相影响彼此的状态。所以当一棵树遇到另外一棵树时什么事情都不会发生。这就是我们所谓的化学引擎。
这个模型极其简单,但是它允许我们去表现各式各样的事件。请大家看一下下面的各式各样的事件,他们都是基于这三条简单的规则。
但是稍等一下,电和风也是化学的一部分吗?在教科书中,这个问题的答案当然是否定的,但是在《荒野之息》的化学引擎中,他们也是化学的一部分。除了严格的物体的运动以外,我们将所有的自然现象都视为化学的一部分。因此在我们看来,风和电都被视为元素,这样的处理方式允许我们以一种简单的方式去打造这个世界。我们并不想打造一个引擎来复制化学,我们所想实现的其实是为这些互相关联的物体打造一个状态计算器。我们还有另外一个它称之为化学引擎的原因。在我们的开发过程中,我们将这些我们希望实现的复合玩法称之为化学反应玩法。这个引擎正是我们实现复合玩法的关键,因此从这个角度来看我们也可以将其称之为化学引擎。在合适的环境下,元素也同样可以产生能量来影响物理环境,因此,组成我们这个世界的所有成分都在我们的物理系统和化学系统的控制之下。
有了这些东西之后,我们可以打造我们所希望制作的游戏,一个利用复合原则来增加玩家可以做的事情的游戏。在早前藤林先生提出了要如何利用复合原则来拓展玩法的问题,而我们对这个问题的回答是将世界上的所有东西都关联起来。从这个角度出发,游戏中的所有东西都是连在一起的。而这些关联并不是偶然出现的,而是有意图地如此设计的,以便于让玩家能够体验到整体的连贯性并且符合玩家的直觉。而当然,这些关联包含了所有我们希望实现的“聪明的谎言”。但是当我们开始设计时,我们并没有任何把握这种方法一定有用,因此我们利用2D画面很快的制作了一个原型来检验我们的概念。这是你们此前所看到的2D的荒野之息的原型。2D的demo非常好用,因为他允许你将整个游戏简化为一系列的符号并且清晰地展示一个想法背后的逻辑。但正如你所见的,这个demo实际上是3D的,而在其背后是早期版本的我们的物理引擎和化学引擎。
在《荒野之息》的世界中,这种复合玩法是在“情况”和“目标”之间的空间里实现的。如果你可以看到在这个世界里不同物体之间所存在的关系,那么你所处在的环境就有了全新的意义,对你也提出了新的问题,这也会鼓励你去试验各种各样新的想法。我们将这个世界的每个角落都填满了这样的“情况”和“目标”,而当然我们也有自己预期中“正确的”解决这些问题的方法。但这并不意味着我们希望玩家去寻找这些“正确的”答案,实际上我们希望他们通过自己的思考得到他们自己的解决方法。
在制作《荒野之息》的过程中我们所打破的一个传统就是我们创造了一个通过游戏元素的复合(Mulplication)来为玩家带来趣味的世界,而过往的游戏中游戏元素仅仅只是简单地叠加(Plus)在了一起。通过复合玩家动作、游戏世界的设计和这个世界中的物体,我们创造了一个几乎任何事情都有可能发生的情况。我们的目标是创造更加主动和开放的游戏体验,而我希望玩家可以得出自己独特的对游戏内谜题和挑战的解法。我们非常希望玩家能够体会到“我的天哪,我真是个天才”的那个瞬间。
下面换一个话题,我希望向大家分享一封我们在开发Wii U版本时收到的邮件。
发件人:青沼英二
收件人:堂田卓宏
抄送:藤林秀麿,泷泽智
主题:Nintendo Switch
我们决定让《荒野之息》跨平台到Switch上。祝你们好运!
我们被额外追加了开发Switch版本的任务。真不愧是我们的制作人啊,他比藤林先生更有“诉说的勇气”。
发件人:青沼英二
收件人:堂田卓宏
抄送:藤林秀麿,泷泽智
主题:Re:Nintendo Switch
哦对了,首发之前把这事儿搞定: )
但话又说回来,让游戏兼容Switch比我们想象中容易不少,这是我作为一个游戏开发者真实的想法,让我简单谈一下我的感想。首先,SDK(开发者套件)帮了很大的忙,NintendoSDK是NS平台的标准开发环境。在硬件方面也同样如此,在屏幕上就可以看到的属性(attribute)让我们有了一个可以轻松工作的多功能架构。我为NGC、NDS、Wii、3DS和Wii U都开发过游戏,但Switch是第一次我们不用因为硬件架构去搞一些很复杂的技巧。当我们第一次在Switch上运行这款游戏、还没有进行任何优化的时候,我们就已经得到了比Wii U还好的帧数。我们也开始思考如何利用《荒野之息》去展现Switch的魅力。Switch有很多独特的要素,而其中最明显的一个就是JoyCon,而我们本身就非常擅长于利用这些独特的要素。但是《荒野之息》并没有利用任何这些特点。对于《荒野之息》而言,我们希望Wii U版和Switch版有相同的体验。但是回首望去,在新平台发售时我们都有一些目的为展示新平台独特魅力的游戏。但是在Switch版的这个游戏里我们希望带给玩家什么东西呢?我们认为可以随身携带本身就是一个很重要的特点了。而同样的,你实际上不需要任何额外的设计就能够得到这样一个增值。我们是第一群被这样的特性惊喜到的人,我们也希望开发者和粉丝们能够感受到这一特性。除了《荒野之息》以外,我不认为我们有任何其他作品能够更好地展现这一点。我们最后增强了《荒野之息》的画面和声效,然后Switch版就完成了。
最后Switch还为《荒野之息》带来了另外一个功能。大屏幕上这位正在盯着屏幕的先生是我们开发团队的成员,游戏实际上正在运行,但是他只用盯着看就好了。根据他的说法,这是玩这部游戏最舒服的方法。《荒野之息》是一款关于自由的游戏,但是在Switch上这种自由被延展到选择自己喜欢的游玩方式的自由。这些游玩方式并不必然是我们心目中“正确的”方式,但是如果你觉得这样玩有趣且舒服,那么这就是属于你的正确的方式。
以上就是我的Presentation的结尾,感谢各位。下面我们会讨论我们如何为这样一个复杂的世界赋予它独有的艺术风格,这将由我们的艺术总监泷泽智完成。
原文地址:https://www.cnblogs.com/colourstar/p/8442574.html