Language:
Page Info
Engine Version:
Share

根运动

通常而言,游戏动画中角色的碰撞胶囊体(或其他形状)由控制器通过场景来驱动。来自此胶囊体的数据则用于驱动动画。举例而言,如胶囊体向前移动,系统则会在角色上播放奔跑或行走动画,形成角色在利用自身能量前进的表象。然而,这类运动并不适用于所有情况。在一些情况下,复杂动画实际驱动碰撞胶囊体合乎逻辑,而且没有其他的方式可选。此时根运动对您的游戏就十分重要了。

举例而言,试想玩家发动特殊攻击,其中网格体已预设置向前冲的动画。如果所有角色动画均基于玩家胶囊体,那么此类动画将导致角色脱离胶囊体,失去实际碰撞。动画播放后,玩家可能会滑回其碰撞位置。这便会导致问题出现,因为胶囊体通常用作所有计算的中心。脱离胶囊体的角色将穿过几何体,无法和环境形成正确交互。此外,在动画的结尾滑回胶囊体也会显得十分不真实。

对于刚接收到这个概念的用户而言,只通过阅读说明来理解根运动的重要性并非易事。下方视频中的角色正在执行一次预设动画的攻击——前冲并猛砸大锤。需要注意的是——角色向前移动的动画并非由游戏处理,而是由动画师所设计。

动画内容示例 页面的第 1.9 部分可查看根运动的另一个实例。

什么是根运动?

简单而言,根运动就是骨架根骨骼基础动画的角色运动。多数游戏内动画均通过循环处理,其中角色的根仍为静止状态。情况并非固定如此,然而上例中便是如此的情况。如要处理这个问题,需要将根的运动从角色上移开,并将其应用到角色的胶囊体。这便是 UE4 中根运动的核心作用。

为正确使用根运动,必须要注意的是角色的根骨骼应该处于原点(0,0,0 且不带旋转),因为这将使系统从动画运动(角色)中分离出物理运动(胶囊体)。

回放中可看到动画的根运动。打开根骨骼运动的动画,在视口中选择 Show > Bones。如尚未在动画属性中选择 Enable Root Motion,角色的根移动时便会出现一条红线。这条线展示了动画的根运动。

RootMotionBone.png

启用根运动后,这条红线便会消失。而角色便会移动到恰当的位置。这是因为角色的根不再从其原始位置进行移动。此图中,我们已在角色启用根运动。注意我们现在处于和上图中同一帧,但角色的位置并未发生变化。

RootMotionAppliedBone.png

那这意味着什么呢?系统把角色动画的根运动计算在内后,则可将相同运动重新应用到角色的碰撞胶囊体。这意味着动画师设置的动作将完全得到保留,但同时也会正确地响应游戏中的碰撞和其他物理&游戏进程事件。我们将在下一部分看到实际操作。

启用根运动

可在 Animation EditorAsset Details 面板中启用 动画序列 的根运动。

RootMotion.png

早期引擎版本(4.5 之前版本)需要使用 动画蒙太奇 来定义根动画。从 4.6 版本开始,根运动的处理基于每个动画序列,可在 Persona 的动画属性开启/关闭。 然而对网络游戏而言,根运动仍然需要使用动画蒙太奇,请查阅下方 Root Motion from Montages Only 部分。

虽然是在动画序列中定义根运动是否启用,但仍然需要确定 动画蓝图 中序列的处理方式。在动画蓝图中有处理根运动的多个方式。可通过 Anim Blueprint EditorDetails 面板中的 Root Motion Mode 下拉菜单进行定义。

RootMotionMode.png

这些选项如下:

属性

描述

No Root Motion Extraction

根运动保留不变(应用至根骨骼)。

Ignore Root Motion

根运动已被提取(并从根骨骼移除),但未应用到角色。

Root Motion from Everything

见下文。

Root Motion from Montages Only

见下文。

Root Motion from Everything

此选项被设为 Root Motion Mode 后,组成角色最终动作的每个动画资源(AnimSequence、Blendspace、AnimMontage 等)的根运动均会被提取(前提是角色动作已设为包含根运动)。被提取的根运动的每个块基于组成动作的源资源权重进行混合。

例如:

FromEverything.png

上图中,Jog_Loop_Fwd_RMJog_Loop_Right_RM 的根运动将以各 0.5 的权重混合在一起。此设置下的动画效果是角色将斜对角超前奔跑,穿过地图。

Root Motion from Montages Only

此方法用于功能更为受限的网络游戏。Root Motion from Everything 的理念便是不受限制,因此只建议将其用在动画不通过网络进行复制的游戏中。

根运动实操

以下详解不处理根运动导致的问题,以及根运动对动画的益处。我们将使用下方所示的前冲动画

无根运动

如果没有根运动,动画则会使角色脱离胶囊体,如下方视频所示。可以明显注意到角色弹回胶囊体位置。出现此情况的原因是动画播放完成后,角色控制器将把角色拉回其原点。

为何胶囊体分离十分糟糕

而此情况下需要解决的还不仅是弹回一个问题。因为角色正在离开碰撞形态,它将穿透世界场景中的物体,并打破整体连贯性。在此例中,我们可看到角色的攻击使他穿过墙壁,然后弹回。

根运动处理如何解决问题

设置动画使用根运动后,动画师设置的动作将暂时成为胶囊体的驱动力。这使得动画到达终点后继续播放。现在可以看到第二次触发攻击动作后将从新位置开始。当然,需要调转第一个动作,摄像机便不会离开原处。

根运动和物理

胶囊体继续跟随后,就意味着仍然可以使用物理碰撞,角色穿过墙壁的问题已经得到解决,并缓解角色弹回胶囊体位置的问题。下图中的动画使用根运动,将带动胶囊体,使角色和墙壁发生碰撞,而不是从中穿过。

您会发现这并不完美,因为角色的混合动画将导致其轻微穿过墙壁。然而对墙壁或角色上的碰撞体积域进行调整即可轻松处理此问题。重要的是胶囊体与运动保持一致,防止角色穿过墙壁并弹回。

在根运动中,角色的物理状态将纳入计算。举例而言,如果角色物理为行走或倒下,则 Z 轴根运动将被无视,将应用重力。角色将倒下、走下斜坡或走上台阶。如角色物理为飞行,则会应用完整根运动并无视重力。