编注:本文整理了制作组在GDC 2017与SIGGRAPH 2017的分享内容,具体详见参考来源。本文不涉及具体技术实现方法,仅做思路参考,转载请注明出处。
技术内容纲要:
- MOTION PATH WARPING 运动轨迹翘曲
- MOTION TRANSITIONS 运动过渡
- PHASE MATCHING 相位匹配
一、MOTION PATH WARPING
1.技术目的:
在Gears of War 4中,角色需要翻越各种复杂的环境。为了让这种交互看起来更加真实,需要根据环境物理参数来调整动画的播放。如在Fig.1中,角色就需要同时处理障碍物的高度、宽度甚至斜度信息。
2. 相关工作:
研究相关技术基于Gleicher(2001)和Lockwood等人(2011)关于Motion Warping的工作成果。此前解决这一问题的主要方法是特化,即动画师不断产出所需的动画资源。这种方案在离线状态下很容易完成。但在游戏中,需要程序员根据具体内容定制化构建代码。比如滑行和跳跃都可以通过调整Trajectory的不同形式来实现。这种思路被称为Ad Hoc,即拉丁语中的“for this”,指代专门为某一问题或者任务而设计的解决方法,具有非泛化的特性。
为了让解决方案更加系统化,开发者们引入了Warp Point的概念。
3. 技术细节:
Warp Point分为两部分:制作时(Authoring)与运行时(Runtime)Warp Point。
(1)制作时Warp Point:
动画师在Maya中创建与动画相关的Warp Point,每个Warp Point具有三个参量:Face、Translation和Rotation。三个参量分别对应了动画中三个过程:从角色当前朝向转向Warp Point、从角色当前位置平移到Warp Point、从角色当前朝向转向Warp Point朝向。
(2)运行时Warp Point
运行时,游戏会在世界中分析并安置与环境相关的Warp Point(如Fig.8中黄色球体所示)。分析途径包括Physics Queries和关卡设计师在世界中摆放Marker,其实际上为对场景的描述。当系统开始播放翻越等可以被Warp的动画时,角色在世界中的运动轨迹会被修正,以令来自动画的Warp Point*和环境中生成的Warp Point对齐。两类Warp Point的对齐实质上是源动画到运行中动画的映射。
需要注意的是,两类Warp Point在数量上并非一一对应,制作中的Warp Point是依据动画需求创建的,这样的设置能够让整个系统更加灵活。所以如果动画师仅在靠近角色的障碍物边缘设置了Warp Point,而未在远端设置,就有可能出现Fig.9所示情境。此时仅需要如Fig.3所示添加远端Warp Point,此时无需设置Facing数值。
最终效果如Fig.10所示。图中红线代表动画的原始轨迹,蓝线代表根据真实物理环境翘曲之后的动画运动轨迹。可以看到角色在障碍物上方产生了平移,但是在游戏环境中,这种不自然的短瞬部分几乎是不可察觉的。
实际上在翻越障碍物时,角色的动画可能不止一个。尤其对于NPC而言,多样化的表现能够更加地丰富游戏画面。程序员会在蓝图中给开放逻辑接口,以便让动画师机动调整。
4. 性能数据
如Fig.2所示,UE引擎中早先关于翻越的策略是通过Blendspace来完成的。但这种方法不仅大大增加了项目资源量,同时运行中需要评估的采样点也随之增加。
Blend space 1D要先评估2个Animation sequence(在Xbox One上通常要耗费20 µs),再融合出结果(这又需要额外的10 µs),其开销是评估单个Animation sequence的150%。二维的Blend space评估三个Animation sequence并做两次混合的开销则是评估单个Animation sequence的300%。
除了翻越动画,Gears of War 4中使用Motion Path Warping的场景还有很多:
二、MOTION TRANSITIONS
1.技术目的:
在许多电子游戏中,Blended Motion Transitions也是不可忽略的一大开销。实际上,相对而言,Blend的开销并不大。但如Fig.15所示,系统必须在过渡过程中持续评估源动画与目标动画状态,这一行为无疑加倍了负担。有时还会出现Transition of Transition之类的嵌套结果,这无疑会使开销数据远超预算。
2.技术概述
Gears of War 4完全弃用了这种混合方式,反之选择将Motion Transitions作为Animation Post-process来处理。因为无需再在Transition时评估源动画,弃用Blended Transitions让性能得以飞跃提升。只需立即剪切到目标动画,剩下的不连贯的问题让Post-process来优化就可以了。
没有任何Post-process的情况如Fig.17所示:
通过给Fig.17的输出增加Filter,可以得到Fig.18这种非常接近预期的效果。但这种方法除了会产生残影,还不便于调整动作细节。同时,因为这种Filter也应用到了非Transition的输出上,所以可能会产生有别于动画意图的内容。在诸如对Muzzle Position有精确要求的情况下,这种方式就更加不可取了。
回到最开始说使用Post-process的策略。将Transitions作为Post-process来处理的一个最直接的方法是保存源动画的最后一个Pose,在Transition期间内,在该Pose和(移动中的)目标Pose之间进行平滑差值。但问题即在于,尽管Pose具有了连续性,速度却肉眼可见地不连续了(如Fig.19所示)。
如果从源动画中再保存一个额外的Pose,那么就能解决速度匹配问题。开发者将这种方法命名为Initialization,意为保留原始Pose和速度等数据。该方法求取源动画与目标动画的数据差值、使用有限差分法求取源动画的初始速度,并在曲线拟合过程中使用了一项来自生物医学文献的五次多项式,以模拟真实人类的手臂运动。但对于快速运动的源动画而言,这种策略将导致Overshoot(过冲)。如Fig.20所示,当武器挥动过快时,在恢复目标位置之前,武器会向右下方摆动过远。
研究所述方法(Fig.21所示)通过控制曲线的初始加速度以实现无过冲过渡。
Fig.22为这一曲线的应用详解。值得注意的是,如果源动画是朝着目标动画的反方向运动的,初始速度会被置零,以防产生负过冲(undershoot)。随后考虑加速度项,这也是最后需要模拟拉力置零的部分。与速度同理,如果源动画加速度与目标动画加速度相反,初始加速度值也会被置零,否则会产生被生拽硬拉到目标动画的样子——除非真的要做出那种对抗快速移动物体的效果。
3.PHASE MATCHING
当过渡回循环运动动画时,如果目标动画的Foot Phase与源动画不匹配,那么生成的Transition会表现出不自然的步法。在Gears of War 4中,开发者为双足角色开发了一个简单高效的启发式流程,以自动匹配运动中的Foot phase。
首先设计一个简单的表达式来计算角色左脚相对于右脚的位置在速度方向上的Phase Quotient(标量)。如果角色静止,那么取前向方向。当角色在运动周期上移动时,该量会大致呈现正弦振荡。为了区分循环中的incoming and the outgoing phases,在Incoming phase中对Phase quotient进行了抵消和偏移。如此一来,Phase Quotient会在整个运动周期中连续增加,并随着周期一同被重置。
在游戏的启动过程中,为主要运动循环的每个动画帧计算Phase Quotient,并将其存储在表格中。在过滤表格数据以确保Phase Quotient单增之后,将其invert并用分段线性曲线对其进行近似。如此,便获得了一个从Phase Quotient重新回到Locomotion Cycle Frame Number的简单映射。
在运行时,从非运动状态回到运动状态时,会为角色当前的Pose简单计算下Phase Quotient,随后使用此前计算得的分段线性函数来将Phase Quotient映射回Locomotion Cycle Frame Number,并接着从该帧开始进入运动状态。
4.参考文献
[1]Bollo D. High performance animation in Gears of War 4[C]// Acm Siggraph. 2017.
[2]GDC 2017 演讲视频
[3]Siggraph 2017 演讲视频