虚幻引擎提供了一套完整的动画设计系统,从基本的动画导入,到最后的人物动画控制,流程完善成熟,上手简单。下面先从宏观上介绍下UE4的动画系统,然后深入介绍几个功能模块。
一、整体介绍
下面这张图翻译自官方文档,它从整体上介绍了动画功能的来龙去脉,简单明了。
处于核心的是Pawn和Character蓝图,它相当于游戏玩家,包含可视化的人物骨骼、形象,它接收用户的输入,并让角色执行某种行为(如奔跑、跳跃)。值得注意的是,角色的动画和行为是分离的,即使没有指定角色的奔跑动画,角色也是可以“奔跑”的。指定角色何时播放何种动画的就是动画蓝图。
当角色蓝图没有指定动画蓝图时,角色依然可以“行走”和“跳跃”。
动画蓝图是一种专有蓝图,它从Pawn和Character蓝图获取当前角色的状态(如行走以及行走的速度,跳跃及跳跃的状态等等),并根据获得到的数据决定角色播放的动画。而动画蓝图中的事件图表是专门用来获取角色状态的, 动画图表是专门用来决定播放什么动画的,动画蓝图的决策依据就是状态机。
在Character蓝图的 骨架网格组件 细节面板中可以指定当前角色使用的动画蓝图
状态机将动画整理为几个状态,每个状态代表了一种动画。状态机会不断的根据角色的状态去决定播放什么状态的动画,状态之间的转换依据叫做变换规则 Transition Rules。通过状态机去决定动画的播放可以极大的提高效率。
典型的状态机,状态以及变换规则。
二、下面完成一个基本的动画蓝图,控制角色奔跑。
首先在动画蓝图的事件图表中去不断获得角色当前状态,并存入变量中(speed)。
然后在动画图表中,右键选择新建状态机并连接上最终动画姿势。状态机类似于tick事件,会不断的执行,并时刻输出动画,最终应用的角色身上。
双击这个状态机,打开它,新建两个状态,Idle和Run。设置Idle为默认状态,连接Idle和Run状态,并指定转换条件分别为speed>10 和 speed <10。点开Idle和Run状态,分别拖入idle和run动画序列,连接最终动画姿势即可。
最后绑定动画蓝图到角色蓝图。效果如下。
三,其他概念
AnimationSequence(动画序列),最基本的一种动画资源,可以直接当做状态机的一个状态使用。
动画通知(AnimNotifies或通知),在动画播放的某个时刻发出通知,播放其他声音、特效等。
混合空间Blendspaces,将几个动画序列基于多个值进行混合,减少动画序列之间的转换工作,可视化的控制多个动画序列的转换。官方示例这里
AnimMontages动画蒙太奇,可视化的对动画进行组织和管理,简化流程。
逆运动学(IK),通过末端的结果来倒推其他关节的动画,如下所示。官方例子
Blend Nodes混合节点,在动画图表中通过节点混合动画,主要有:Apply Additive(应用叠加型姿势)、 Blend(混合)、Blend Poses by Bool(按布尔值混合姿势) 、Blend Poses by Int(按整型值混合姿势) 、Layered Blend Per Bone(基于每个骨骼的分层混合)等。 不同的混合节点通过不同的方法混合输入的动画。具体介绍见这里。
Animation Retargeting将动画共享给其他模型,减少动画制作的成本。主要分为两种形式,一种是在骨骼相同的模型之间使用相同的动画,另一种是通过Rig这个中间件使得骨骼结构不同的模型得以使用共享的动画。
Root Motion根骨骼运动,角色基于骨架根骨骼动画的运动。如下所示。
上面这些概念比较多,但官方文档介绍的非常详细,可以慢慢跟着学一遍。