本教程采用图文教程+视频教程的多元化形式,我会为不同的知识点选择适当的表达方式。教程内容将同步免费发布于 开发游戏的老王(知乎|CSDN)的专栏《玩转UE4/UE5动画系统》。教程中使用的资源及工程将以开源项目的形式更新到GitHub:玩转UE4上。
工程文件: 玩转UE4(GitHub)
- 1. 状态机概要
- 2. 地面站立动作状态机分解
- 2.1 Linked Anim Layer:(N) Cycle Blending
- 2.1.1 (N) Directional States:六方向状态机
- 状态逻辑
- 过渡规则
- 2.2 (N) Locomotion Cycles:站立动作循环状态机
- 2.3 (N) Locomotion Detail:细节状态机
- 2.4 (N) Locomotion States:地面站立动作状态机
- 2.4.1 Stop States:脚掌锁定状态机
- 3. 小结
在《[玩转UE4/UE5动画系统>应用篇>架构设计] 之 ALS V4的Overlay框架详解》一文中,老王介绍了ALS V4的Overlay框架,该框架由BasePoses、OverlayLayer以及BaseLayer三个核心动画层动画层(Animation Layer)实现。其中BasePoses提供了用于叠加(Additive)的“被减姿势”;OverlayLayer层是要叠加的动画;BaseLayer层负责走跑跳蹲等基础动画。本文主要介绍地面站立动作状态机部分(下图左侧蓝色区域)
篇幅的原因,本文仅着重介绍状态机的构成,状态控制参数的计算将另文介绍。
下图为BaseLayer中状态机关系图,其中箭头表示包含关系。
Linked Anim Layer的作用是可以复用一部分状态机逻辑并可以优化状态机的结构提高可读性,(N) Cycle Blending使用Linked Anim Layer的意义主要在后者。(N) Cycle Blending有7个输入端,分别是6个方向(F、B、LF、LB、RF、RB)的动作和1个冲刺动作(Sprint),其中前向输入动作和冲刺动作通过步态标志Gait混合并缓存成(N)F Movement姿势,其它5个方向的输入分别直接缓存成对应方向Movement姿势。
以后要介绍的地面蹲伏动作状态机(CLF) Cycle Blending的Cycle Blending动画层和本文中地面站立动作非常相似,只不过没有了冲刺输入,6个方向直接缓存成对应方向Movement姿势。
(N) Cycle Blending的逻辑并不复杂,它最核心逻辑部分实际是**(N) Directional States:六方向状态机**,前面缓存的6个方向的Movement姿势将在六方向状态机使用。
(N) Directional States是(N) Cycle Blending的核心,也是整个地面站立动作状态机的逻辑核心。它的作用就是负责角色地面各个方向之间切换时的“无缝过渡”。
在解释(N) Directional States之前,我们先来看一下参与状态机的动画资源(以走步动画为例),重点关注角色的面朝向:
正前方迈步以及正后方退步的面朝向都是面向正前方的
而右(左)前方迈步时面朝向为左(右)前方 右(左)前方迈步时面朝向为右(左)前方
也就是说6个方向移动时,面朝向共有3种情况:左前/正前/右前,我们暂且分别称左前和正前以及 正前和右前为“相邻面朝向”。
(N) Directional States中的每个状态其实就是将对应方向的相邻面朝向动作通过速度参数混合以获取上体相对平稳的运动状态。
(N) Directional States中状态间的切换过渡规则共有3类,当A→B间有多个过渡规则时,它们之间是“或”的关系。
- 基于方向标志的过渡:(几乎)每两个状态之间有一个基于方向标志过渡,这些过渡规则都使用了过渡规则共享(Transition Rule Sharing),详见《[玩转UE4/UE5动画系统>基础篇] 之 过渡规则共享(Transition Rule Sharing)-提升效率的小技巧》。
它们的逻辑也比较简单,其形式诸如:
- 基于曲线值的过渡: LF⇆LB以及RF⇆RB之间都有基于曲线值的过渡,它们也使用了过渡规则共享,其形式诸如(下图示例为RB状态过渡至RF状态的规则):
- 动画曲线Feet_Crossing:标记着双脚交叉的部分。
- 动画曲线HipOrientation_Bias:标记髋部朝向的偏移,数值在-1至1区间,如下图所示:
这个过渡规则可解释为:当双脚无交叉且HipOrientation_Bias大于0.5时,由RB状态过渡至RF状态。
- 基于曲线和状态权重的过渡: LF⇆LB以及RF⇆RB之间都有基于曲线和状态权重的过渡(两个白色非共享过渡),其形式诸如(下图示例为RB状态过渡至RF状态的规则):
在(N) Directional States中LB和RB都是相对临时的过渡状态,所以当它们的权重为1时也会进入到对应的LF或RF状态。
2.2 (N) Locomotion Cycles:站立动作循环状态机 为(N) Cycle Blending提供6个输入动作,其中6个方向输入端(F、B、LF、LB、RF、RB),分别是对应方向由静止到移动(走步/奔跑)的混合空间(BlendSpace),它们的作用就是分别为各种移动状态提供更细致平稳的过渡。
Sprinting Cycles部分就是基于角色前方向的相对加速度(Relative Acceleration Amount)混合出适当的冲刺姿势,作为(N) Cycle Blending的Sprint端输入。
2.3 (N) Locomotion Detail:细节状态机故名思意,它的作用是(为 (N) Locomotion Cycles)增加细节,(N) Locomotion Detail的每个状态都包含有(N) Locomotion Cycles。甚至在(N) Running状态和(N) Walking状态中更是原封不动地使用了(N) Locomotion Cycles。
老王给这种动画状态机设计模式命名为洋葱模式(Onion Pattern)(另文详述)。
(N) Locomotion Detail并没有改变或扩展 (N) Locomotion Cycles的逻辑,只是丰富细节,比如:
在(N) Walk->Run状态添加了叠加动画以增添加速度感
(N) Locomotion Details的逻辑比较简单,本文就不做赘述了,大家也可以在使用过程中相对自由地在(N) Locomotion Details中发挥创造力。
(N) Locomotion States的作用就是添加了一些非移动状态及细节:
在ALS V4中有一个Should Move Check 方法,它决定角色是否为移动状态。
(N) Locomotion States
(N) Moving状态直接包含了 (N) Locomotion Detail
(N) Rotate Left 90和(N) Rotate Right 90分别是站立时的左右转向动画
(N) Not Moving做了一些曲线调节
(N) Stop中包含了Stop States状态机。
Stop States中的4个State(Lock Left Foot、Lock Right Foot、Plant Left Foot、Plant Right Foot)中都包含了(N) Locomotion States,它们的作用就是通过Feet_Position动画曲线控制Foot Lock,关于ALS V4中Foot Lock的实现,详见老王的另一篇博文《[玩转UE4/UE5动画系统>应用篇>功能模块] 之 Foot Lock系统(ALS V4实现方案详解)》
ALS V4地面站立动作状态机暂时介绍到此,未来的文章中还会介绍状态机的其它部分,敬请期待。