上个月我们对正在开发的内容讳莫如深。简单来说,我们当时正在钻研某个课题,在有把握之前不想透露太多。现在我们可以谈谈了,但前提是这并非即将推出的功能公告。这是我们为 1.0 正式版发布后所做的规划,这一点并未改变;但由于种种原因(有些仍需保密),我们认为有必要评估其可行性。
我们的团队大多是儿时的伙伴,我们对这款游戏的热爱与投入,源于曾经那些在房间里闭门不出、靠外卖度日,聚在一起玩多人游戏的时光。那不是如今这种便捷且易于访问的“实时服务型游戏”,而是更传统、更深度的 RPG,支持通过局域网(LAN)进行合作游玩。那种体验在当今的游戏大环境下已不多见,但正是它驱动着我们,我们坚信至少能找到一个折衷点。打造一个深度、持久且可交互的世界是我们的首要任务,而与朋友一同探索这个世界一直是我们的夙愿。
我们对游戏未来的规划取决于多人游戏功能,但我们确实创造了一款非常复杂的游戏,以至于直到今天,我们都不知道多人游戏是否真的可行。有人说不可能,而且理由充分。合作游戏的门槛相当低,人们对它们多少有些“古怪”和“掉帧”的预期,如果他们能确保看到的东西是一样的,就已经很满足了。但当涉及物理效果时,情况就完全不同了,而复杂的物理效果更是让问题变得极其棘手。《Exanima》是一款玩家必须与物理效果实时交互并做出即时反应的游戏,每一个动作都完全由物理引擎驱动。此外,哪怕最微小的故障也可能导致灾难性的后果。在这些要求下打造高质量的多人游戏体验,至少可以说是一个巨大的挑战。
巨大的难题
要讨论这个问题,我们需要理解其根本矛盾:时间。网络上的两台计算机试图模拟同一事物,但各自都在发生不同的事情(玩家的操作),而通信需要时间。因此,在同一时间模拟同一事物实际上是不可能的。《Exanima》完全运行在精确的物理计算和碰撞检测之上,哪怕微小的差异也可能意味着截然不同的结果。如果快速移动的物体发生碰撞,或者没有碰撞,亦或是以不同方式碰撞,它们移动的方式就会大相径庭。这会产生一种“蝴蝶效应”,微小的差异很快就会导致模拟结果彻底分歧。
但肯定不是完全没可能吧?很多游戏都有多人模式,其中一些还有物理效果,对吧?嗯,怎么说呢。许多游戏并没有真正实现同步,你和你的朋友看到的可能完全不同,但大多数时候你察觉不到。物理效果更多是为了观赏,而非游戏玩法的核心,它们不会产生动态且具有戏剧性的连锁反应。涉及物理效果的多人游戏通常围绕约束和局限性进行设计,例如不具备能影响其他玩家的真正动态环境交互,或者限制每次只能由一名玩家进行交互,通常还会简化物理计算,使其易于处理且即使出错也不会产生严重后果。然而,接受局限并走捷径并不是我们的风格,所以我们现在就面临着这个巨大的难题。
你通常会看到这样一种概念:模拟在服务器上发生,或者一次只在一台玩家的电脑上发生,(其他)玩家延迟观察结果。许多所谓的点对点(P2P)游戏实际上有一名玩家(“主机”)充当服务器。更高级的解决方案是动态地将玩家正在交互的物体控制权交给该玩家,使他们成为这些物体的临时服务器。因此,要么你必须延迟输入,以便服务器接收、处理并传回结果;要么由别人控制,而你只能延迟观察结果。或者,你根本看不到相同的东西,这对每位玩家获得功能性游戏体验来说并不重要。
但《Exanima》依赖于具体且精确的输入与交互,这使得延迟变得不可接受。即便在单人模式下,我们也竭尽全力将输入延迟降至最低。这意味着主机/服务器方案自动出局。这些方案还有其他弊端,所以我们很乐意将其弃置。延迟输入虽然能为其他方案提供出路,但对玩家而言,本质问题依然存在。
“动态授权”方案(即你控制正在交互的物体)起初看起来不错。没有单一服务器,你完全控制自己的角色,响应迅速,你角色正在交互的物体也响应迅速。但当更多玩家间接或直接地与同一个物体交互,或者彼此交互时会发生什么?如果你撞上了一个当前不在你控制下的物体,它将完全不可移动。从物理角度来看,这意味着它拥有无限质量。如果另一个玩家的“无限质量”长柄斧高速袭来,这对游戏的物理系统来说是个坏消息。这种情况在双方以及任何受不同控制的物体交互时都会发生。这可能并不总是听起来那么糟,但坏事确实会发生,而且一定会发生。
格斗游戏采用的另一种解决方案要好得多。它们建立时间同步,并将时间回溯到另一名玩家输入指令的时刻,重新运行自那时起游戏中发生的一切,从而为你提供更准确的最新结果。除了导致“橡皮筋效应”(回弹)外,这还有一个巨大的问题:对于像《Exanima》这样复杂的模拟,回溯时间并重新模拟所有内容的成本高得离谱。它会让原本就要求苛刻的模拟再增加 6 倍甚至更高的负载,具体取决于你的延迟(ping)。
当然,所有这些问题都与延迟成正比。在局域网或连接到附近玩家的超快网络上,输入延迟不会很大,无限质量物体会更快停止,因为一切都更少出现延迟和不同步,重新运行模拟的成本也会更低,因为需要追赶的时间更短。但即使在理想条件下,这些问题也不会消失,即便在局域网下,它们也超出了处理流水线,延迟比低 ping 所暗示的要高得多。随着延迟增加,问题很快就会失控。
难以逾越的高山?
所以,我们已经确定了基本问题,以及为什么那些“解决方案”统统无效。我们不想要输入延迟,我们想要的是你在游戏中密切交互的那种流畅的物理效果;我们希望所有物体能同时为所有玩家提供响应式物理反馈,与玩家的交互能自然发生且没有故障。起初,这似乎是不可能的,显然我们需要一套属于我们自己的不同方案,说实话,我们确实也是这么做的。
多人游戏对我们来说绝非事后补充,我们多年来一直在构思解决这些问题的方案,并试图在设计游戏和物理引擎时将其考虑在内。但在我们能够实际实现并进行测试之前,这些都只是盲目的希望,无异于空想。
我们所描述的几乎就是单人游戏的工作方式,没有网络延迟带来的任何问题。这成了我们解决方案的基础:一切仍然按照单人游戏的方式运行。现在的问题变成了:我们如何让这些具有不同输入的多人单机游戏和世界状态在同一时间做同样的事情?嗯,我们做不到,但如果我们能做到非常、非常接近,如果差异很小,我们或许能快速、无缝地纠正它们,并产生对任何玩家来说都不显得怪异的结果。
这始终是我们的计划,我们曾满怀希望地告诉大家,我们相信低延迟多人游戏是可以实现的。但正如一些早期的基本原型所证明的那样,即使在低延迟下,这些问题也非常明显。即使在局域网下,如果没有良好的同步,一旦我们开始交手,结果简直糟糕透顶。
我们如何保持复杂且高度动态的角色动作在时间上同步?当多个模拟告诉它们做不同的事情时,我们如何让物体自然移动并响应碰撞?我们有一些理论,但它们涉及复杂的解决方案,且在许多方面未经过测试和验证,直到现在。
测试与结果
我们一直在开发和测试这些理论方法。我们还没有完成完整的多人模式,还有许多个别问题需要解决,这都需要工作量,但与我们讨论过的核心问题不同,我们知道它们是可以解决的。虽然目前还不完整,但我们现有的成果绝非粗糙的原型,而是一个经过深思熟虑、妥善且彻底开发的架构,用以支持我们未来所有的多人游戏需求。
我们的重点是合作模式,但我们认为测试精确时间同步的准确性和处理玩家交互能力的最佳方式是 PvP 决斗模式。这些交互非常重要,我们不能让朋友的一次意外击打或纠缠导致模拟系统崩溃。额外的好处是,如果我们能让这种极端困难的情况正常运作,我们也就拥有了功能性的 PvP 战斗。时机也很合适,因为我们正在对战斗进行最后的打磨,无法忽视多人游戏的影响。
结果相当不错。像这样的系统不可能支持跨洲游玩,但在 ping 值约 100 毫秒以内的情况下,它能提供非常实用的战斗体验,尽管有时会有些小怪癖。问题非常轻微且可以原谅,我们认为可以进一步改进。大多数时候,它感觉就像在单人模式中与人对战一样。
这是一个非常棒的结果,我们现在可以自信地说,高质量的多人游戏体验是可能的。当然,网络总是一件反复无常的事情,延迟抖动、断开连接和连接问题是不可避免的现实,超出了我们的控制范围,但我们正尽可能地考虑这些情况并优雅地处理它们。
原理与机制
最好的解决方案永远是定制化的。一刀切的方案有其用武之地,但专门针对我们游戏功能和引擎量身定制的东西才会带来最好的结果。这相辅相成,我们的设计和引擎能力必须支持该方案。我们所做的一些工作涉及基础物理问题,并不那么特殊,但正是许多因素共同作用,才产生了最终的结果。
首先需要完美运作的是让本地模拟的角色与远程控制的角色完全匹配。我们称之为“预测层”。《Exanima》中的角色不播放预设动画,它们每秒会对肌肉张力进行数千次动态调整,并根据力、平衡点、模拟输入、接触点和碰撞等即时生成动作。预测它们将如何移动是不可能的,而且输入接收存在延迟。显然,我们确实非常了解角色的行为模式,如果我们确切知道这些输入发生的时间,并考虑它们随时间的变化,我们就能做出非常精准的推测。
一些动态行为具有足够的可预测性,为了获得时间精确的结果,最好的方法是让它们在本地完成,而不会受到延迟的远程结果干扰。很多工作归结于非常详细的状态匹配,以保持所有细微因素的一致性,并教会角色在预测失误时能够快速、平滑地进行修正。每一处细节同步得越好,预测就越准确。当情况略有偏差时,物理引擎会自然过滤掉短暂的抖动,因为力需要时间来产生作用。
基本上,这涉及针对每种不同的动作、输入和动态行为或运动,进行大量特定的外推和预测方法。我们进行了大量的测试和调整,以找到合适的方法,并平衡它们与物理引擎、其他同步层之间的交互,从而获得最佳结果。可能还有改进的空间,但已经非常不错了。我们经常以为已经做到了极致,结果通过一些额外的调整,又看到了巨大的提升。
整个“预测层”概念本身就非常有用。角色可以在没有精确物理和状态同步的情况下继续行动和运作。如果出现延迟抖动、短暂的网络中断、电脑死机等情况,它会继续按其最佳猜测运行。这真的很重要。它还允许角色在几乎没有任何同步的情况下运行,提供了一种非常轻量级的后备方法。在不需要精确同步的情况下,例如在大厅或面对远处的非活跃 NPC 时,只需要基本指令就能让角色在物理规则下保持与其目标非常一致的行为。
这是一个很好的起点,也是拼图的关键部分,但随后原始物理计算必须介入。所有无法预测的意外情况。这部分甚至更重要,但涉及大量技术细节和数学计算。简而言之,最初良好的同步通常会产生相同或非常接近的物理交互,但如果情况出现分歧,通过分析运动的差异和变化,结合一些数学技巧,我们能够快速纠正它们,而不会产生任何突兀的意外力或明显的副作用。如果出现严重不同步,我们有一种修正方法,基本上与“无限质量效应”相反:我们使物体变得“无重”,这样它们就能平滑地跳入新位置,而不会变成一个横冲直撞的破坏球。
很难解释为什么这一切都是必要的,但模拟是脆弱的,它们依赖于一个不断演变的稳定状态。如果物体突然移动到它们不该去的地方,违反了模拟的约束,物体可能会剧烈反应、永久卡住或“爆炸”。即使这种情况很少见,在《Exanima》这样的游戏中,这些也是足以破坏游戏体验的事件。
我们独特的物理引擎在这里提供了坚实的基础。它能够承受严重的冲击并保持稳定,无论发生什么,它永远不会错过或跳过碰撞。我们物理引擎中的物体实际上会变形,而不是对不可能的压力做出剧烈反应。我们最近对物理引擎的全面升级改进了这一切,但我们仍有一些想要进行的改进,这将使整个游戏受益。
不过还有一个最终问题:模拟中细微的差异是不可避免的,而在本游戏中,这可能意味着“擦肩而过”与“致命一击”的区别。这些事件的影响同样具有戏剧性和动态性,是物理作用的结果,而不是某些简单的数值反馈或视觉前端。因为这些是物理交互,我们不能仅仅等待消息来回传输以确认每个人都对发生的事情达成一致。这不是一个能完全解决的问题,但可以缓解。这涉及一套复杂的协商和让步系统,可以解析出一个公平的结果,并向双方玩家提供关于实际发生了什么的反馈。通常没有延迟,或者延迟非常短暂,非相互结果的影响由对等节点模拟。
战斗影响
其中一些问题可以通过调整游戏机制来改善。这里的主要问题是无法进行时间调整的“二元事件”。有趣的是,这种二元事件本身就与游戏流畅的物理交互相冲突,并受到玩家的排斥。一个设计良好的解决方案既能帮助解决网络问题,又能整体提升游戏体验。二元格挡(Binary parries)就是一个很好的例子,但这可以应用于大多数随输入或事件瞬间转换的效果和角色状态。
在近期的日记中,我们谈论了很多关于战斗的增加和改进。这应该是对核心战斗机制真正彻底的最后一次打磨,也是重新审视许多被忽视事项的时机。如果要进行决定性的打磨,我们觉得理解多人游戏的影响同样重要。
与人类玩家对战与对战 AI 是完全不同的体验。每位玩家的策略都不同,会做出 AI 永远不会做的事情,也不会掉进同样的两个陷阱里。在尝试之前,我们有点担心战斗可能不够流畅,玩家可能过于犹豫,或者过于激进,从而破坏了规则和机制,但在对特定玩家的战术进行了一些调整后,这不再是问题。过程非常有趣且引人入胜。然而,它确实突出了一些缺陷和不平衡点,但这恰恰是件好事,正好赶上我们的战斗修订。在缠斗中缺乏撞击(bashes)以及格挡的现状显得格格不入。你学会了在对阵 AI 时放弃这些,但面对玩家时情况就完全不同了。我们非常渴望让格挡变得真正好用,当它奏效时,会带来非常有趣且电影般的交锋。
我们还一直在与社区中几位公认的高手玩家进行测试,并将继续这样做。他们的反馈也非常积极。我们可能还没达到在高延迟下实现完美应急擒抱的水平,但相差不远。时间会证明我们能改进到什么程度,但我们已经对这个基准感到满意。撇开 PvP 特定的担忧不谈,整体表现非常稳定且响应迅速。
网络连接
当你真正深入研究时,网络连接是个巨大的麻烦。互联网就像一只患病的恐龙,在根本上已经过时,不足以满足当今的需求,而且被不同的制造商和供应商匆忙修补成各种方式,结果反而破坏了其他东西。你还有一层自定义安全设置,它破坏了更多东西。流量必须通过多个节点在物理上穿过世界,关于它的一切都是不可预测的。这意味着要为所有不同的潜在问题准备大量的权宜之计,并围绕“你不知道数据何时到达或是否到达”这一事实进行设计。这使得即便看起来简单的问题也几乎无法解决。电脑出现任何问题都可能,但在网络方面,这才是常态,而非例外。
秉承典型的 Bare Mettle 风格,我们完全从零开始开发了自己的网络解决方案。我们想要一种轻量级且针对最佳延迟进行优化的方案。没有服务器/主机,一切设计都围绕“希望通信能够实现”而非“预期通信一定能实现”来展开。这种对独立玩家功能的关注,最终也应该允许玩家处于游戏世界的不同部分,并就近加入彼此,或者轻松加入和重新加入会话。我想大家都熟悉点对点(P2P)游戏的痛苦,我们想避免这些痛苦。
我们还能够动态地实现理想的时间同步,无需专门的同步阶段,甚至考虑到非对称延迟以及 PC 速度和模拟负载的差异。这非常难做到,是一项了不起的成就,我们甚至构建了一个网络模拟器来开发算法并验证结果。这最初是为了满足即时同步和我们极简网络设置的需求,但最终效果比我们之前考虑过的已知方法更好。
我们还想要一种不依赖在线服务的东西,并且可以在没有互联网连接的情况下在局域网内工作,以保持游戏无 DRM(数字版权管理)的特性。这是一个与朋友一起玩的东西,目前不打算加入任何匹配类功能。我们不想要竞技匹配,我们觉得它只会助长有毒行为、作弊等各种问题。我们确实希望最终能为玩家提供工具,让他们举办自己的社区锦标赛等活动。
合规噩梦
不幸的是,我们生活在一个政府认为可以对任何形式的人际交往或整个艺术媒介实施全面禁令,并认为大规模监控高于基本人权的时代。《在线安全法案》(Online Safety Act)对任何形式的在线互动设置了极其荒谬的限制,甚至将用户名和排列物体拼写单词视为一种被禁止的通信形式。合规需要年龄验证和严格(且昂贵)的审核,不合规将面临至少 1800 万英镑的罚款。小型利基在线社区,甚至是专业的论坛,正在被这些垃圾政策摧毁,在线游戏也变得非常复杂,尤其是对于小型独立开发者而言。
我们正在探索未来的可行替代方案,但他们正在收紧这些限制。目前,幸运的是,我们通过不依赖在线服务来制造完全免费且永远不受限制的东西的愿望,意味着只要我们这样做,就完全不受这些法规的约束。没有服务,就没有问题。
现在,玩家正面临“欧盟儿童法案”(EU Kids Act)提案形式的新威胁。这甚至更加脱离现实且范围更广,承诺让在欧盟分发游戏对独立开发者而言变得极其昂贵且困难,甚至是单机游戏。如果该提案通过,可能意味着独立游戏的消亡,并基本上使在欧盟游玩大多数游戏(无论是旧游戏还是新游戏)成为非法行为,当然,这在“保护儿童”方面毫无作为。欧盟的限定词对已经在财务上挣扎的独立开发者来说意义不大,这将是终点。行业巨头对此无动于衷,因为这只会消灭他们讨厌的独立竞争对手,所以这取决于我们公众去提高意识,让这些无知的立法者知道这是多么令人发指。传播消息,在欧盟委员会网站上留下你的反馈,如果你在欧盟,考虑向当地代表提出你的意见。
很抱歉以如此糟糕的基调结束。多人游戏即将到来,我们对 1.0 版本之后想要做的事情有宏大的计划。现在谈论这一切还为时过早,但我们已经悄悄地为此努力了很长一段时间,它们涉及的不仅仅是增加多人游戏。我们需要确保能够将其变为现实,但在短期内,多人游戏不会成为开发重点。我们想要最终将《Exanima》推进到 1.0 版本,我们的下一步是实现尚未完成的技能,这不可避免地会带来一些战斗方面的通用改进和补充。这已迅速成为我们测试战斗的首选平台,并为我们提供了新的视角,所以在某种程度上,它们将齐头并进。我们确实希望在 1.0 版本发布时至少引入一个完善的决斗模式。
祝好,
Bare Mettle
【来源:steam】


