我参与《神秘海域4》的开发


在《 神秘海域4 》发布之后我已经可以谈论我在该项目中所做的工作了。 基本上,我为单人游戏模式的玩家队友和多人游戏的助手开发了AI,并且在游戏逻辑上也做了一些工作。 我将省略那些尚未完成的方面以及一些小细节。

因此,我们继续:

邮政系统


在开始之前,我想谈谈NPC使用的帖子系统。 我没有研究该系统的核心逻辑,但帮助编写了使用该系统的客户端代码。

帖子是NPC导航空间中的离散位置,主要由开发工具创建并由设计人员手动放置。 根据我们的需求,我们可以创建不同的职位选择器来评估不同类型的职位(例如,隐形职位选择器,战斗职位选择器)并选择评分最高的职位以将NPC发送到那里。


队友跟随球员


跟随队员队友的系统来自“我们的末日”

主要思想是队友在球员周围选择要遵循的位置。 这些潜在的位置与玩家不同,并且必须满足以下对直线路径自由度的检查:从玩家到位置,从位置到向前投影的位置,从向前投影的位置到玩家。


与《最后的我们》不同,《神秘海域4》具有攀登的特点。 为了将攀爬整合到玩家的跟进系统中,我们添加了一个攀爬柱选择器,用于选择队友在攀岩时应该移动的点。


这项任务比我们预期的要困难。 仅仅命令合作伙伴在玩家未爬上时遵循通常的跟随逻辑,并在玩家沿墙爬行时更改职位即可,这还不够。 如果玩家在正常状态和攀爬之间快速切换,伙伴将开始在这两种状态之间振荡。 因此,我们增加了滞后作用:合作伙伴现在只能在玩家更改状态并在此状态下移动足够远时更改状态。 通常,磁滞是避免“行为跳跃”的好方法。

领先队友


我们希望队友在游戏中的某些时候向玩家展示道路。 该系统取自《最后的我们》,并进行了改进:设计师使用样条线勾勒出队友带领玩家前进的共同路径。


如果关卡中有多个路径,则设计人员会安排多个样条线,并使用脚本将其打开/关闭。


播放器的位置投影到样条线上,并且播放器的跟踪参考点位于设计师可以自定义的距离的前面。 当该跟踪参考点通过样条曲线参考点(标记为等待点)时,伙伴开始移动到另一个等待点。 如果玩家决定退回,则只有在最后一次向前移动过程中通过的追踪点离最远的等待点太远时,伙伴才开始返回。 因此,磁滞再次形成,避免了状态的急剧变化。

我们还内置了跟踪系统的动态速度。 根据伙伴和玩家之间的距离,“速度平面”沿着花键定位。 NPC可以使用三种类型的运动:步行,奔跑和短跑。 伙伴根据玩家所在的速度平面,选择适当的运动类型,以保持与玩家的必要距离。 根据他们的愿景,设计人员可以启用和禁用速度平面。 此外,视与玩家的距离而定,伙伴的动作动画速度会略微增加或减少,以避免在两种动作类型之间切换时动作速度的急剧变化。


庇护所共享


在“我们的最后”中,玩家可以相对于他的伴侣移动,同时仍然保持掩体。 这称为一般庇护所。


在《我们的遗嘱》中,乔尔比艾莉或苔丝离住房墙更远,这是合乎逻辑的,因为它们比乔尔小。 但是对于Nate,Sam,Sally和Elena来说,这看起来并不自然,因为它们的高度几乎相同。 此外,《神秘海域4》是一款速度更快的游戏,如果Nate伸出手臂在障碍物后面移动,它将破坏动作的流畅性。 因此,我们决定伙伴将仅靠在庇护所的墙壁上,而Nate在移动时会稍稍弯曲。


在这里,我们使用了非常简单的逻辑。 如果考虑到他的速度,玩家的投射位置落在伙伴掩体柱周围的矩形边框中,那么伙伴将完成障碍物后面的当前行为并将其压在掩体壁上。


医疗助手


多用户模式下的医疗助手需要一种全新的行为,而单用户模式下则不存在:他们必须复活被打败的朋友并复制躲在掩体后面的玩家行为。


医生试图模仿躲在掩体后面的玩家的行为,并使其尽可能靠近玩家,这样,如果玩家受伤,他们就会在附近并复活。 如果最近的盟友受伤,只要玩家还活着,他们还将复活盟友。 如果玩家装备了用于医生的RevivePak mod,那么在他们奔赴盟友进行复活之前,他们将尝试将RevivePak扔进盟友(同时进行多次复活会加快复活过程); 投掷RevivePak时,使用手榴弹投掷逻辑,特别是检查弹道的自由度和播放动画时,只有手榴弹被RevivePak取代。


隐形草


《神秘海域4》的新机制在草丛中也是秘密运动。 要实现它,我们需要以某种方式标记环境,以便玩家的游戏逻辑可以发现玩家是否在草地上。 最初,我们希望背景美术师在Maya中标记草皮碰撞的表面,但发现美术师与设计师之间的交流会大大减慢迭代速度。 因此,我们想出了另一种方法来用草标记区域以进行隐身。 专为设计师而设,为编辑器添加了一个新的隐身草标签,以便他们可以准确地标记玩家应该考虑隐身的导航范围。 由于有了这些附加信息,我们还能够根据隐形帖子是否在草丛中来对其进行评估。 事实证明,这对于队员处于隐身模式时移动的队友很有用。


感觉器官


由于与《最后的我们》不同,在《神秘海域4》中没有聆听模式,因此我们不得不以某种方式通知玩家即将来临的威胁,以便敌人的未知位置不会打扰他。 使用关于敌人感知的数据,我们添加了颜色威胁指示器,该指示器告知玩家敌人很快会注意到他是干扰因素(白色指示器),将他视为干扰因素(黄色指示器)并完全意识到他的存在(橙色指示器)。 此外,我们将威胁指示器放大了背景噪音,以增加张力,并在敌人完全了解玩家的存在时发出声音,例如在《最后的我们》中。


研究成果


这是游戏的最后一个主要部分,在我进入“黄金”游戏之前,我参与了该游戏的开发。 我通常不参加在Naughty Dog举行的正式会议,但是在“金牌”比赛的几个月前,我们每周至少有一次在Bruce StreleyNeil Drackmann的指导下开会 。 会议专门针对AI游戏。 在几乎所有这些会议之后,研究系统中都有一些可以更改或处理的内容。 在发布完成的游戏之前,我们经历了许多迭代阶段。

有两个方面可以分散敌人的注意力并鼓励他们探索:玩家和尸体的存在。 当敌人发现干扰时,他会试图吸引最亲密的盟友一起探索其原因。 较近的敌人成为探索者,第二个成为观察者。 发现分心的敌人可以成为研究人员或观察员,我们为这些情况准备了两组不同的对话框(“那里有东西。我去检查一下。”和“那里有东西。去检查一下。”)。

为了使研究的开始和结束更加自然,我们调整了敌人运动的时机和焦虑指标的减少,以使一些研究人员不会在机械上同时执行相同的动作。


如果尸体使人分心,则研究人员可以了解玩家的身影,并命令每个人开始寻找他,而无法挽回地保持冷静。 还标记了发现的尸体,以便玩家有机会了解给出的尸体。


在某些难度下,一项又一项的研究迫使敌人更加积极地进行调查,这增加了找到躲在草丛中的玩家的机会。 在压碎难度下,敌人不断进行积极的研究。

对话观点


这也是我在项目中处理的最后一个方面。

对话框中的视图是使角色对对话做出反应的逻辑,例如,看着其他人并做出手势。 在《最后的我们》中,设计人员花了几个月的时间来手动注释所有游戏中的对话框,标记出外观和手势的时刻。 我们不想重复这个。 我们有几个已经手动标记的脚本化对话框,但是我们需要一个能够处理没有注释的对话框的系统。 为动画师提供了用于调整头部旋转速度,头部最大旋转角度,凝视持续时间,暂停时间等参数。


节省吉普车的速度


从开发的早期阶段开始,我们就在马达加斯加的城市的吉普车竞赛阶段遇到了问题:如果玩家的吉普车漂移了,并且在撞到敌人的墙壁或汽车后失去了速度,那么玩家就被从车队中甩了出去,而他未能完成关卡。

我想出了这个解决方案:与墙壁和敌方车辆碰撞时,暂时限制了角速度和线速度的变化。 事实证明,这种简单的解决方案非常有效-玩家因漂移而无法通过通道变得更加困难。



车辆销毁


《神秘海域》首先引入了玩家控制的4种机器。 在该系列的先前游戏中,只有NPC可以驾驶汽车,并且这些汽车沿着花键轨道移动。 我帮助实施了运输的破坏。

销毁敌方车辆的方法有多种:杀死驾驶员,射击汽车,用吉普车撞向敌方摩托车,击中敌方的吉普车以打滑。 根据破坏原因,选择了被破坏的运输工具及其乘客的动画。 动画与物理控制的布娃娃混合,因此kill动画无缝过渡到物理模拟的崩溃。


为了销毁带有撞锤的摩托车,使用XZ平面中的边界矩形和接触点来选择撞锤销毁的四个定向动画之一。


在吉普车漂移的情况下,检查吉普车的旋转与所需运动方向的偏差是否超过漂移的阈值。


播放an灭动画时,被破坏的运输机可能会穿过墙。 它使用球体铸件(像射线一样投射的球体),从机器的理想位置沿“轨道”(如果尚未销毁)到其实际位置。 如果在球型铸件的生成过程中固定接触,则机器会沿接触法线方向移动渗透值的一小部分,因此,消除穿过壁的通道的过程会在多个框架上逐步进行,从而避免了位置的急剧变化。


我们创建了一种特殊的车辆销毁类型,称为车辆死亡提示。 这些是与环境交互的,上下文相关的终止动画。 动画师和设计师将这些动画的位置沿着样条线的“轨道”放置,并在样条线上指示其上的输入窗口。 如果车辆在此窗口内被破坏,则相应的破坏动画将开始播放。 最初,此功能是作为用于实现演示的史诗吉普车爆炸的工具而创建的,该工具在2015年的E3上展出。


拜耳滤色镜


当相机太靠近环境物体(主要是树叶)时,我们希望消除裁剪几何形状。 因此,我们决定根据像素与相机之间的距离来对像素着色器中的像素进行着色。 我们不能利用透明性,因为透明性太昂贵且叶子太多。 取而代之的是,我们应用了抖动处理 ,将像素到相机的距离与图案以拜耳滤镜的形式结合在一起-一些像素被完全丢弃,从而产生了透明感。


我们最初的Bayer过滤器是此Wikipedia页面上显示的8×8矩阵。 我认为它太小,导致产生条纹形式的文物。 我想使用16×16的拜耳过滤器,但是在Internet上我找不到它。 因此,我尝试对Bayer 8×8滤镜模式进行逆向工程,并注意到了递归模式。 我可以研究它并手工编写一个16×16的矩阵,但是出于兴趣的考虑,我编写了一个可以生成任何2的幂的贝叶斯矩阵的工具。


切换到16×16的贝叶斯滤波器后,带有条纹的伪像明显减少。


爆炸声延迟


这实际上是一个非常小的细节,但是我想提一下。 在2015年E3上演示该演示的几周前,我注意到同时看到并听到了塔的爆炸声,这是不合逻辑的。 Nate和Sally离塔楼很远,因此他们必须首先看到爆炸,然后再听到。 在完成的演示中,艺术家团队在爆炸声中添加了一些延迟。


繁体中文本地化


在以“金色”发布游戏的两周前,我打开了繁体中文的文字和字幕,但发现翻译错误。 大多数错误是从英文到繁体中文的字面翻译,没有上下文。 我决定自己没有时间去研究整个游戏,同时寻找翻译错误。 因此,我请测试部门的几个人用繁体中文玩游戏的不同部分,并观看了这段视频的录制视频。 事实证明,这是一个相当有效的步骤。 我设法修复了所有检测到的翻译错误,本地化团队能够在截止日期之前修复它们。

就这样


值得一提的是,这几乎是我为《神秘海域4》所做的一切。 我希望这篇文章对您很有趣。

Source: https://habr.com/ru/post/zh-CN416593/


All Articles