大家好,我是Skydance Interactive的联合创始人兼首席技术专家Peter T. Akemann。在这篇技术博文中,我将谈谈我们最近发布的VR游戏《行尸走肉:圣徒与罪人》。
物理表现力一直以来被认为是VR游戏的终极追求。VR游戏可以通过它向玩家提供优于传统游戏平台的体验。但在实践中,VR的物理效果一直是个矛盾体,在优秀的画面中混杂着糟糕而不可预测的结果。如果在物理沙盒中追求新奇是游戏的精华所在,这将起到作用。然而到目前为止,这却将VR现实模拟游戏的受众限制在了一个狭小的范围。
《行尸走肉:圣徒与罪人》在基于物理的VR游戏中处于先锋地位。这类游戏将“物理体验”打磨成一套直观可靠的控制机制,使玩家专注于更宏大的游戏场景。我相信我们已开始实现更高水准的VR游戏,尤其是在沉浸式近战操作方面。
这篇博文将概述玩家对战僵尸的战斗系统,并着重介绍构建出这一系统的技巧、技术与关键知识。
基础
“视觉触感反馈”——眼见为实
与标准游戏控制器相比,运动控制器是一种高维、直观的输入设备,但它们仍是一种抽象概念,距离游戏的完整物理“真实性”还很远。从字面上讲,玩家手部的位置可以直接穿过物理表面,但感觉不到所持物体的重量或惯性,并且通常不会与虚拟环境产生真正的交互。
这其中缺少的是一种叫作触感反馈的东西。字典将触感反馈定义为“在远程操作或计算机模拟中重现用户直接与物理对象交互的感觉”。当然,这种技术在目前的商业作品中仍无法实现。
幸运的是,我们的大脑非常善于理解我们所看到的东西,甚至会无视其他感官。如果我们看到自己的虚拟手部遇到障碍物,并对虚拟物体的重量或与其产生的碰撞作出反应,而这些物体也以同样的方式回应手部动作,我们就能开心地协调虚拟手部与其真实位置之间的偏差。当你期望的这种自然反馈循环以一种有说服力的方式表现出来时,你就会“感觉”到它们,并凭直觉接受它们。
因此,我们采用了“视觉触感反馈”这一术语来描述物理和一些动画技术的集合,借助这些技术,VR玩家的手部动作将变得可预测、可信、令人满意并能起实际作用。
图1:质量不等的物体
物理世界中的手部
要开始,我们需要先区分游戏中的手部与玩家的手部。游戏中的手部在视觉上是一个骨骼网格体,但从物理上讲,它是一个PhysX刚体。当手指与物体表面接触时,手部姿势的逻辑会将手指保持在一个美观、合理的位置。这使我们在遵循碰撞规则的同时,将现实中与游戏中的手部保持同步。
玩家的手部就像是一个提线木偶控制器,操纵着游戏中的手部。它确定了两个PID控制器(一个线性控制器和一个四元数控制器)的设置点。这两个控制器会为游戏中的手部施加恢复力。因为目标位置和方向始终在变换,我们的积分项为零,只剩下比例项和微分项——这在很大程度上充当了一种阻尼振荡控制器。
通过PID增益系数的缩放可模拟玩家在游戏中的力量与能量等级。这同时提供了现实统计值的和有用的游戏统计值,可影响游戏玩法。
抓握被建模成一种在真实世界中,手部与物体间的物理约束。玩家的手部通过摆出姿势,表示牢固抓握所持物体。
这就产生了一种结合重量、线性和角动量的真实感觉,并感受到来自所持物体的碰撞。
这种物理表现力会引导玩家模仿出其所持任何物体的物理特性,不管是挥动或大或小的各种物体,还是持握较大的物体展现出从容谨慎的动作。同时,这也增强了物理体验。
必要时的妥协
没有一套通用的PID数字可以使手部感受到任何可能持握的物体所带来的物理反馈。我们需要更强的力量挥动较长的物体,例如斧头或刀剑,而在空手时,不需要过度调节模拟过程。因此,我们通过一条与所持物体惯性矩成比例的曲线来调整PID控制器。
对于某些特定物体,我们也会对大众妥协,例如枪,玩家已经习惯了一种高度(且不切实际)的控制。要点:玩家体验始终优先于“现实”。
图2:双手武器的掌控
详谈抓握与物体操控
要享受物体的物理表现力带来的乐趣,持握方式是重中之重。我们需要确保玩家轻松享受到单手或双手持握各种物体的乐趣,并避免握在不恰当的位置。
因此,我们为各种物体配备了多个抓握点和抓握样条曲线,这些样条曲线也指定了每个抓握点所允许的活动程度和角位移。
物体可以很容易地从一只手传递到另一只手,或从单手持握过渡到双手持握。对于在同一抓握点翻转持握方向,我们添加了一些特殊动作(见上图1中的匕首)。
双手之间的交互产生了一系列看上去直观而符合物理法则的自然效果。要操控较长的物体,使用较远的抓握点会更轻松。通过变换双手之间的距离,使你可以管理控制的力度和程度,这一切都以物理法则为基础。不同的抓握方式会执行不同的自然动作。
这使玩家可以自由地上演华丽的武器表演,在场景中展现出优秀的剧场效果,并为成为武器大师而兴奋不已。
近战
通过将物理冲击解释为潜在的伤害事件,任何钝器都可以产生近战伤害或击退敌人。手持和投掷钝器都可产生这样的效果。
近战武器配备了特殊的碰撞物几何体,它指定了武器的哪部分(以及哪个角度)会造成伤害,从而影响带刃或带刺武器的伤害属性。
良好的打击反应和可怕而逼真的伤口着色器(结合皮肉层的外翻、贴花缘饰的斑块以及顶点的变形,表现出伤口的深度和角度)满足了不同形状和尺寸的武器所造成的各种伤害。
这些都是非常标准的东西,但这个系统的真正精华在于戳刺和搏斗系统。
图3:戳刺
近战和刺入身体的武器:戳刺系统
戳刺系统是《行尸走肉:圣徒与罪人》战斗操作中的标志性特色,它允许武器刺入敌人的身体,玩家必须使用足够的力气才能将它们拔出。
成功的戳刺包括以下阶段:
1.初始检测
我们在带刺武器尖端的周围放置了一个增大的碰撞体积,用于检测即将发生的戳刺动作。如果戳刺体积与可戳刺表面相接触,并且垂直于该表面的速度满足所需条件,就会初始化戳刺。
2.戳刺初始化
如果需要,玩家角色会被赋予一个细微的前冲动作,从而更接近距离范围,便于玩家触碰到戳刺点。这种体验很好,玩家一般甚至不会察觉到自己被移动了。
与此同时,所持的武器和玩家的手部会被吸附到最近的可戳刺位置和方向,这代表有效地刺入了可戳刺的碰撞表面。刀刃的尖端或边缘会以适当的垂直方向被放入被戳刺表面的内部。在命中点会创建一个约束,只允许动作沿着武器的轴线移动。小伤害事件从命中的那一刻起就产生了。
3.刺入/拔出
玩家手部沿着戳刺方向的位移会被解释为施力,这将使刀刃更深入地刺入表面。刀刃可完全没入被刺表面。玩家必须持续推动刀刃,才能使它产生最大伤害负载。将有一条不同的反向曲线用于抽出刀刃。
玩家会通过这些曲线体验到被刺表面对刀刃的抵抗阻力,这种体验已被证实极具真实感。位移模型也有助于我们轻松地掌握所需的物理操作。
图4:刺入和抽出曲线
被刺者也扮演着一个关键角色,他们通过进入一种受惊状态和/或做出反抗动作,提供足够的反作用力,使得戳刺动作得以干净利落地完成。下面将进一步解释。
NPC近战行为
本质上,我们的僵尸和NPC一般是根据将动作捕捉与由动画蓝图控制的手部动画数据协调起来,从而进行活动的。这些动画数据包括头部外观、瞄准动作、足部位置的反向运动,和部分/全部身体应对攻击的打击反应,以及用于死亡后的布娃娃状态。
然而,《圣徒与罪人》的物理表现力还需要几个其他系统,才能将物理体验推向极致。
图5:局部被刺时激活的布娃娃状态
激活布娃娃状态
我们使用UPhysicalAnimationComponent在NPC和僵尸身上部署了布娃娃系统,在执行未受约束的移动期间(例如,当未发生搏斗,或未被玩家戳刺时),该系统会在他们的上半身运行。它使角色对小的刺激因素作出反应,例如玩家的手部、投掷的物体,或玩家所持握的物体(未使用足够的力度,无法触发打击反应的动画)。
对于一系列不足以触发打击反应或击倒事件的刺激因素,该系统提供了一套自然而多样的反应。在VR环境中,玩家可以通过任意方式自由地干扰NPC的移动。这是很有必要的。否则,角色给人的感觉就像电子雕像,缺乏真实感。
激活后的布娃娃状态也极大地改进了戳刺操作期间的触感。这使得被刺角色可对刺入自身的刀刃作出身体反应,这极大地提升了真实感,以及在成功刺入后拔出刀刃的挑战性。
图6:搏斗
搏斗
《圣徒与罪人》在玩家和僵尸之间支持两种搏斗方式。
玩家可以通过抓住僵尸的头部与他们搏斗(请参看上方的动图剪辑示例)。在这里,我们需要同步僵尸和玩家的动画,因此我们会切换到这样一个动画模型:真实世界的手部动作将被禁用,并通过逆向运动将其锁定到僵尸的头部。然后,僵尸通过一个偏移量的三维混合空间做出动作,这个偏移量是基于玩家手部相对于抓取点的动作而设置的。这保留了物理交互的感觉,但结果是可控的。如果玩家放开了被抓住的僵尸,则会进入一种交错安排的动画,并且动画中的方向和速度将与放开之前相符。
僵尸也可以用任何一只手臂抓住玩家(存在两个僵尸同时抓住玩家的情况)。玩家和僵尸将被锁定到一个共同的动画状态中。玩家会再次失去对手部的物理控制,手部的移动将驱动一个2D动画混合空间,来模拟挣扎逃跑。最终结局可能是玩家挣脱,僵尸被推开并蹒跚后退,也可能是玩家被咬(晚安,玩家!)。
这两种模式可以共存:左臂被僵尸抓住,而玩家用另一只手抓住了僵尸的头。
搏斗与戳刺系统也可以完美融合。抓住僵尸的头部,戳刺僵尸就变得容易得多,因为僵尸被抓住后就无法移动。此外,拔出刀刃也更容易了,因为可以两只手共同将刀刃从身体中拔出。
仍需进一步妥协
如果刺入了某人(或者已经不能称之为人)的头部,但没有抽出刀,玩家将拖着尸体到处走(见图3)。从物理上讲,除了被拖动的物理链的重量外,我们还要将玩家的行动限制在被拖对象上,这会强烈地增强重量感。
在这里,我们遇到了稳定性问题。不同质量物体之间的长约束链是众所周知的难题。这可能是我们最糟糕的情况:手部→刀→僵尸的头部→僵尸的躯干(以及剩余的肢体等等)。它们所组成的链条在最终端是一个非常重的不规则物体,玩家具有强大恢复力的手部作用于另一端,而非常轻的刀则在中间。结果是手部到刀,以及刀到头部之间的约束点会持续抖动。
我们的解决方案是当物体处于被刺状态时,对它们的质量进行妥协。我们临时缩小了布娃娃的总质量,并将同样的质量添加到了所持物体上(本例中为刀)。玩家的手部仍拖着相同的总质量,但质量分布更便于模拟了。
总结
我们是一支规模不大的团队,由一些虚幻引擎老手组成。借助VR的力量,以及对创造无与伦比的战斗体验的专注追求,Skydance自信能够提升电子游戏中直观物理战斗的标准。
此外我们也相信,我们还只是刚刚开始发掘自身潜力。随着VR经济的持续增长,我们期待着继续推进VR战斗的体验,并探索玩家-物理战斗的新高度。
我们希望自己正在开辟一条新道路。而最终,将有许多人前仆后继地涌入。
如果你想成为其中一员,请关注我们的就业机会。