UE4 Advanced Locomotion System V3中的动画表现设计

编前:本篇针对UE4第三方插件Advanced Locomotion System V3中的动画树结构做详细拆解。内容包括资源命名规范、动画蓝图构成、状态机构成与动画叠加表现优化,并讨论了实现思路与实际项目的可参考内容,适合技术动画或策划人员查阅。编写所用引擎版本为4.24.3。

附注:有关Advanced Locomotion System V3的详细内容可参见 @刘舒畅 的相关文章(见下方链接)。文章涉及动画树、Locomotion、AO、Ragdoll与IK设置等内容。文字详实,结构舒适,推荐阅读:

刘舒畅:UE4高级运动系统(Advanced Locomotion System V3)插件分析

一、动画资源规范

1.1 命名规范

动画资源多数以“项目名_姿势_姿态_运动方向”为命名框架。项目名缩写ALS(Advanced Locomotion System);姿势包括站蹲及其朝向,如N为站立无朝向倾向、LF为站立朝右(左脚在前)、CRF为下蹲朝左(右脚在前)等;姿态包括Idle、Walk、Run、Stop、Pivot(急停转向)、Turn、Lean等。如ALS_LF_Pivot_F为向前方急停后站姿朝右。

1.2 角色姿态规范

站立状态下的默认姿态为无朝向,下蹲状态和瞄准(视野锁定)状态下的默认姿态皆为朝右。

二、与动画蓝图相关的枚举设计

运动方向-MovementDirection:Forwards/Backwards

进入待机时的朝向-IdleEntryState:N_Idle/LF_Idle/RF_Idle/CLF_Idle/CRF_Idle

上一次的运动模式-ALS_PrevMovementMode:Grounded/Falling/Ragdoll

当前运动模式-ALS_MovementMode:Grounded/Falling/Ragdoll

步态-ALS_Gait:Walking/Running/Sprinting

姿势-ALS_Stance:Standing/Crouching

旋转模式-ALS_RotationMode:VelocityDirection/LookingDirection

视野模式-ALS_ViewMode:ThirdPerson/FirstPerson

三、动画蓝图

项目中有两个动画蓝图:Mannequin_AnimBP和Mannequin_IK_AnimBP。其中后者作为Post Process AnimBP叠加在前者之上,负责处理用于贴合地面的脚部IK。

出于共用逻辑、简化节点等目的,UE4中的动画蓝图可以通过Post Process AnimBP、Child AnimBP和Linked AnimGraph等方式来进行优化处理。其使用场景与链接方式如下图示:

Fig.1 AnimBP逻辑与资产优化方案

四、动画状态机设计

Mannequin_AnimBP通过嵌套的方式,设计了三层动画状态机来实现基础运动表现。

4.1 顶层状态机:Main StateMachine与Ragdoll

两个顶层状态机用于控制运动一级模块之间的切换(如Fig.2所示),分别为运动模式Ragdoll模式。运动模式又包括空中模式(受重力)与陆地模式

UE4移动组件中,常见运动模式包括了陆地模式、空中(包括受重力与不受重力)模式、水中模式。

Fig.2 顶层状态机:MainStateMachine与Ragdoll

在运动模式的基础上,通过叠加Aim Offset与FullBody Anim Slot,与Ragdoll模式并联为最终Pose的两向输入,并经由ALS_MovementMode进行切换。FullBody Anim Slot所执行的表现包括从Ragdoll模式切换到运动模式时的起身过渡。

4.1.1 Ragdoll

Fig.3展示了Ragdoll模式下的状态分布设计。其由两部分组成:负责择取融入Pose的Ragdoll状态与负责提供融出Pose的BlendOut状态。

Fig.3 Ragdoll模式状态机的状态分布

如Fig.4所示,系统会根据当前的步态情形择取不同的Ragdoll融入姿态。当运动速度较低时,使用四肢摆动作为融入(且摆动速率在一定范围内与当前角色速度成正比);当运动速度较高(冲刺态)时,采用四肢蜷缩作为融入。其效果较好地模拟了跌倒时的人体应激与姿态惯性(如Fig.5所示)。

Fig.4 Ragdoll状态的融入Pose择取逻辑(左)与相关资产(右)
Fig.5 不同步态下的Ragdoll融入Pose:低速(左)与高速(右)

在执行起身命令时,系统会存储当前Pose Snapshot用于Ragdoll融出,并根据角色是否处于陆地、角色面朝下还是面朝上,来决定是否播放以及播放何种起身动画。

Fig.6 Ragdoll融出逻辑:角色蓝图(上)与动画蓝图(下)

4.1.2 Main StateMachine

Main StateMachine为主导移动模式的状态机,其状态分布与条件判定设计依次如Fig.7、Fig.8所示。其下分为空中与陆地两大模式,各状态之间通过转换的优先级设计来实现不同情形下的过渡。

Fig.7 运动模式状态机的状态分布
Fig.8 运动模式状态机的条件判定

4.2 次层状态机:Locomotion

次层状态机Locomotion描述了角色的陆地运动,分为静止、移动、运动急停转向(Pivot)与运动停止。有色过渡规则标记了过渡条件的共享(Transition Rule Sharing)。

Fig.9 陆地运动状态机的状态分布
Fig.10 陆地运动状态机条件优先级判定(空心圆圈为无优先级的并行判定)

如Fig.9所示,停止状态被划分为五种朝向来分别设计其过渡条件,其中涉及1.2节中所提及的默认姿态的问题。其核心准则在于优先判定非默认姿态。例如进入时会优先对RF_Stop与CRF_Stop进行判定。

4.3 底层状态机:Pivot与NotMoving

4.3.1 Pivot(急停转向)

急停转向状态机由八个单向输入的状态组成(如Fig.11所示)。其命名规范如1.1节所示,即“身体朝向_行为_行进方向”。如RF_Pivot_B意为向后行进时急停朝左(RF为右脚在前)。其择取逻辑较简单,也可替换为Blend Poses by bool/Blend Poses(Enum)的形式。此处使用状态机描述,具有向性清晰的优势。

Fig.11 急停转向状态机的状态分布

4.3.2 NotMoving

待机状态机由五向状态两两链接形成。

Fig.12 待机状态机的状态分布

状态机外链有Transition Anim Slot(如Fig.13<上右>所示),用以播放待机的过渡动画(如左朝向Idle过渡到右朝向Idle)。通过在Transition Rule中设置Custom Blueprint Event(如Fig.13<上左>所示),触发Event Graph中相关逻辑(如Fig.13<下>所示)。

Fig.13 待机状态之间过渡动画的触发逻辑

此处还采用了逆向播放(PlayRate=-1)的方法来提高动画资产的利用率。

五、叠加表现

除了基础的状态机动画,系统还采用了大量的叠加功能来丰富角色表现。其主要实现方式为Apply Additive节点。该节点可以根据动画资产的叠加设置与融合权重,将关节变化叠加至Base Pose上。本节主要讨论关于倾斜的处理。

Fig.14 Additive动画图解(图源:https://youtu.be/0JFYt8kGYhM)

系统中有两处使用了叠加操作来表现角色倾斜效果:陆地及空中,效果如Fig.15所示。

Fig.15 系统中通过动画叠加实现运动倾斜

5.1 空中倾斜

空中下落循环的动作设计一共包括三个部分。如Fig.16所示,从左到右依次实现了下落展臂、空中倾斜、落地预判效果。

Fig.16 空中下落循环的动作设计

Fig.16中Evaluate ALS_N_Land节点是由在ALS_N_Land资产节点上右键Convert to Single Frame Animation形成的,无法直接在搜索栏中查找。其作用在于获取指定动画资产的指定帧。

Fig.17 下落展臂的融合权重变化图解(左)与落地预判融合图解(右)

如Fig.17(左)所示,随着混合权重增加,角色表现会逐渐从FallLoop渐变到Flail(即4.1.1节中用于低速状态下融入Ragdoll的资产)。其混合权重的设置如Fig.18所示,以下落的速度为输入,在既定曲线上取值,继而实现随着下落速度加快,角色张惶摆动四肢的表现。

Fig.18 下落展臂动画的权重值设置(左)与相关曲线样式(右)

Fig.17(右)则展示了对于着陆缓冲姿态的处理。其中蓝色为原始姿态,红色为最终解算姿态。如Fig19所示,着陆预判动画权重的设置是通过球形检测来完成的:当角色处于下落状态时,角色胶囊体半径大小的球形自角色脚部开始,沿着速度方向扫射检测,扫射轨迹长度与下落速度正相关。当返回的碰撞表面为可行走表面时(通过法线判定斜度在可允许范围内),系统会获取与碰撞表面的距离来做预判动画权重的插值。

Fig.19 用于落地预判的球形检测:红色为检测轨迹,绿色为碰撞结果
Fig.20 落地预判检测逻辑:扫射直线范围、检测球半径、可行走判定

系统中使用Out Hit Time取值范围[0,1),代表了Start到End的距离。当未检测到碰撞物时,Out Hit Time取值为1。

空中倾斜效果主要通过叠加Blendspace来实现。如Fig.16所示,Blendspace的输入包括了两个参量,Direction与Lean in Air。其中Direction为角色旋转方向(Yaw),取值[-180,180]。Lean In Air的逻辑设定如Fig.21所示,其值由两部分决定。第一部分为当前Z轴速度相对于跳跃初速度的量级关系(即反映了跳起到降落的全过程);第二部分为当前横向速度相对于跑步速度的量级。两部分数值共同决定了,当横向速度存在时,Blendspace中的动画采样顺序必然为从上至下,采样范围由横向速度决定,如Fig.22所示。

Fig.21 Lean In Air的逻辑设定
Fig.22 跳跃倾斜动画采样示例

5.2 陆地运动倾斜

陆地运动倾斜同样通过Blendspace来处理,其中仅涉及Lean Grounded参量。如Fig.23所示,Lean Rotation由角色当前速度与速度旋转差值决定,速度越快,旋转差值越大,左右倾斜角度越大;Lean Acceleration由当前横向速度差值决定,速度变化越大,前后倾斜角度越大。

Fig.23 陆地倾斜逻辑设计:倾斜变量设置(上)与Blendspace叠加(下)

六、总结

Advanced Locomotion System涉及游戏中常见移动样式,在资源、变量设置规范化,状态机设计科学性,动作细节打磨等方面具有较大参考价值。优秀的动画表现取决于玩法、资源设计与动画结构的相得益彰,在此之上,引擎特性的充分发挥也依靠想象力与专业度。针对优秀实例的拆解与吸纳将有效帮助项目进行快速优化。希望本篇能对优化思路有所增益。

历史读物:

呆晒晒:Siggraph Asia 2019技术导读-用于角色与场景交互动画的神经状态机呆晒晒:Gears of War 4中的高性能动画技术

来源:知乎 www.zhihu.com

作者:呆晒晒

【知乎日报】千万用户的选择,做朋友圈里的新鲜事分享大牛。
点击下载