1.概述
1.动画工具
- 骨架编辑器用于管理驱动骨架网格体和动画骨骼(或层级关节)
- 动画编辑器可以创建并修改动画资源,用于调整动画
- 动画蓝图编辑器可以创建动画逻辑,驱动角色动画,以及动画混合方式
-
2.骨骼资源

在UE4中,骨架从资源中的骨架网格体分离处理。这意味着动画可以应用于骨架,而不是骨架网格网体。通过使用相同的骨架,多个骨架网格体可以共享动画。3.动画序列
动画序列包含各个关键帧,关键帧可以表示骨骼在特定时间点的位置、旋转和比例。一次回放这些关键帧(相互合成)可以实现骨架网格物体中的骨骼动画。
4.动画通知
动画通知就是动画回调事件,它会被绑定(注册)到动画时间轴的时间点上(可以精确到毫秒),当动画播放到该点就会触发事件并执行我们想要的操作。即:动画通知是一种动画动用游戏逻辑的机制。
5.动画蓝图
动画蓝图可以控制骨架网格。在动画蓝图编辑器中编辑动画蓝图图表,可以实现动画混合,直接控制骨架的骨骼,也可以设置每一帧要用的骨架网格体,并制出各种动画角色姿势。
6.混合空间
混合空间是可以在动画图表中采样的特殊资源,可以根据两个输入的值混合动画

要根据一个输入在两个动画之间实现简单混合,可以使用动画蓝图提供的标准混合列程。也可以根据多个值在多个动画之间进行复杂混合。
7.动画蒙太奇
动画蒙太奇可以在蓝图可视化脚本中或代码制作各种动画效果
-
8.骨架控制
骨架控制可以直接控制资源中的骨骼,用于在动画蓝图中进行控制一个单独骨骼,创建IK链等操作。
在直接控制动画骨架后,可以创建过程化、动态驱动的动画。一个骨骼的变形可以用于驱动另一根骨骼,或在播放动画时使角色的脚与地面贴合,覆盖动画序列所应用的骨骼变形
9.状态机
状态机可以通过图形化的方式将网格物体动画分割为分段状态。然后按照转换规则管理这些状态,转换规则可让一个状态混合到另一个状态

- 状态机简化了骨架网格物体动画的设计流程,并创建表格控制图来控制角色在动画之间的运动方式,无须创建复杂的蓝图
- 在制作动画时,可以指示角色如何从一个状态变换到另一个状态。
2.根运动
根运动(Root Motion)是基于骨架骨骼动画的角色运动。是由动画驱动的。游戏中的动画大多数动画都是通过循环处理的,角色的根在循环中保持固定。属于移动组与动画系统相结合的一个部分,表示角色的整体运动(包括物理)
为了正确的使用根运动,必须注意角色的根骨骼(Root Bone)应该位于原点(0, 0, 0,无旋转)。这样就能使系统将物理移动(胶囊体)从动画移动(角色)中分离出来
为什么要有RootMotion:走跑跳动画,角色在位移,动画只是在角色移动时正好播放,来达到人好像是在跑步的效果。实际拥有运动权的不是动画,而是角色自己
矛盾:有些行为需要比较精确且复杂的位移,靠程序来控制位移比较困难
需求:让角色位置随着动画来移动,而不是只能由角色自己来控制自己的位置。即:让动画拥有角色的运动权。**RootMotion**来应对部分复杂的动画,可以让角色的移动位置与动画相匹配。
1.启用根运动
当我们设置一个不做任何视觉动画表现,只用来跟角色位置相绑定的root节点
- 当角色自己拥有运动权时,根节点因为跟角色绑定,跟随角色一起运动
- 当动画拥有角色的运动权时,角色因为跟根节点绑定,也会跟随根节点一起运动
- 通过设置一个同角色位移绑定的根节点,我们就实现了RootMotion机制
在动画编辑器中的**Asset Details**面板中勾选**Enaleb RootMotion**
- 启用根运动(EnableRootMotion):使动画可以使用 Rootmotion机制。
- 在动画蓝图里设置使用Rootmotion:将角色运动权交给 Rootmotion机制。
- 根运动根锁(Root Motion Root Lock):提取根运动时,要锁定到该位置的根骨骼
- 参考姿势(Ref Pose):使用参考姿势根骨骼位置
- 动画第一帧(Anim First Frame):使用动画第一帧上的根骨骼位置
- 零(Zero):使用零帧上的根骨骼位置
- 强制根锁(Force Root Lock):是否强制施加根骨骼锁,即使未启用根运动也是如此。
- 使用规格化根运动比例(Use Normalized Root Motion Scale):如果启用此属性,它将对提取的根运动使用规格化比例值:FVector(1.0, 1.0, 1.0)
2.动画混用
- RootMotion动画和RootMotion机制并不相同
- RootMotion动画和Inplace动画的区分并不代表它们能否使用RootMotion机制进行播放。两种动画都可以使用RootMotion机制进行播放,从RootMotion的运行机制来讲,两者并无区别。
RootMotion动画和Inplace动画的本质区别是:根节点是否有位移
- Inplace动画根节点没有位移:不希望其使用RootMotion机制播放,当角色需要位移时,角色自己控制自己进行位移,动画跟随角色的位移进行播放。当Inplace动画使用RootMotion 机制播放时,角色将由于根节点位置绑定而呆在原地。
- RootMotion动画根节点有位移,我们希望其使用RootMotion机制播放,让角色把运动权交给动画,角色跟随动画进行位移。当RootMotion动画不使用RootMotion机制播放时,根骨骼将因为跟角色位置绑定而跟角色一起运动,而其他的骨骼将会暂时离开角色,在动画播放结束后又突然回到角色位置。
- 如果出现动画播放时动画离开角色所在位置,动画播放结束后又突然回到角色所在位置的现象,则有可能是由于RootMotion动画以非RootMotion的方式播放
- 如果出现动画播放时角色在原地移动并且失去角色运动的控制权,则有可能是由于Inplace动画被以RootMotion的方式播放
坏动画: 当动画本身有问题时,即使所有有关RootMotion播放的设置都正确,依然可能出现动画播放时动画离开角色所在位置,动画播放结束后又突然回到角色所在位置的现象。这说明原动画的根节点没有位移,但是屁股节点却有位移。
如果动画的根节点在Z轴方向有位移,大部分情况下这个动画是有问题的。因为它跟重力对角色在Z轴上的控制权产生冲突,角色将不会在Z轴上随着根骨骼进行移动。
动画转换
RootMotion动画:根节点有位移的动画
- Inplace动画:根节点没有位移的动画
- RootMotion动画转换成Inplace动画:
- 1️⃣:K帧:在动画资源里面将根节点的位移手动调为 0, 设置关键帧并保存
- 2️⃣:将动画重定向方式中根骨骼的重定向由Animation改为Skeleton
- 骨骼重定向:Animation跟随动画、Skeleton跟随父节点
- Inplace动画转换成RootMotion动画:
- 1️⃣:K帧:在动画资源里移动根骨骼,设置关键帧并保存
- 2️⃣:对于根节点没有位移而屁股节点位移,且根节点所需要的位移的动画,我们需要把屁股节点的XY方向位移复制给根骨骼,屁股节点的XY方向位移清零,保留屁股节点的Z方向位移,把根节点的屁股方向位移设为0
- 当角色运动权的掌控产生冲突时,如果不能解决冲突问题本身,可以尝试使用Inplace动画,让根节点跟随角色运动,调整动画使其播放效果正常。
3.根运动模式
- 在定义是否使用动画序列中启用根运动时,需要确定如何在动画蓝图中处理该序列。可以在通过动画蓝图编辑器的Details面板中的根运动模式(Root Motion Mode)下拉菜单定义方式。

- 无根运动提取(No Root Motion Extraction):根运动按原样保留(应用到根骨骼)
- 忽略根运动(Ignore Root Motion):提取根运动(并从根骨骼中移除根运动),但不应用到角色。
- 来自每一项目的根运动(Root Motion from Everything):
仅来自蒙太奇的根运动(Root Motion from Montages Only):
1.来自每一项目的根运动:
当这个选项被设置为根运动模式时,则会提取每个帮助构建最终角色姿势(AnimSequence、Blendspace、AnimMontage等)的根运动(如果它已被设置为包含根运动)。每一部分的提取根运动均构成该姿态之源资源的权重进行混合。
-
2.仅来自蒙太奇的根运动
该方法适用于网络游戏,因此其功能受限。由于Root Motion from Montages Only被设计为不受限制,因此建议仅在不在网络上复制动画的游戏中使用此方法。
3.动作中的根动作
1.无根运动
如果没有根运动,部分动画会将其角色从胶囊体中拉出,当动画播放完毕,角色控制器就会将角色拉回其原始位置。
由于角色正在离开碰撞形状,它将穿过世界场景对象,并打破整体的连续性。
2.利用根运动解决问题
一旦动画设置为利用根运动,那么设置好的动作将暂时成为胶囊体的驱动力。这让我们可以从动画的终点继续播放。
3.根运动和物理状态
启用根运动后,胶囊体出现意味着物理碰撞仍然可以使用,解决了角色穿过墙壁的问题,也缓解了角色需要位移回弹到胶囊体位置的问题。
3.重定向
1.概述
重定向:让动画在相似骨骼间重复使用
相似指的是它们是相同类型,比如:都是二足人形角色骨骼。可以重定向的骨骼一般骨骼的结构相似甚至相同,但命名规则不同。
- 动画重定向是一种允许共用相同骨架但比例差异很大的角色之间复用动画的功能。
- 通过重定向,可以防止生成动画的骨架,在使用不同外形的角色的动画时,丢失比例或产生不必要的变形。
- 通过动画重定向,还可以在使用不同骨架资源的角色之间共享动画,前提是他们使用相似的骨骼层级,并使用名为绑定
**Rig**的共享资源在骨架之间传递动画数据
原理:
动画绑定到骨架资源。骨架资产其实就是一个骨骼名称和层次结构的数据的列表,但它也存储了来自用于自定义骨架资产的原始骨骼网格的初始比例。此数据是以骨骼平移数据的形式存储的。
重定位系统只会重定位骨骼的平移分量。骨骼的旋转始终来自动画数据。
选中骨骼,打开Retarget Manager/骨骼编辑器,将 Select Rig 设置为 Humanoid
骨骼设置完成后才可以进行动画重定向
- 选择任意一个已经完成骨骼设置操作的动画,右键
**Retarget Anim Assets**—**Duplicate Anim Assets Retarget** 
- 选择好源(Source)和目标(Target)

- 重定向完毕后,会生成一个新的动画文件

- UE4动画蓝图重定向:蓝图重定向和动画重定向原理相同,只是UE4可以对一个动画蓝图及其所有动画状态批量做重定向。
- 骨骼重定向:允许该骨架的所有动画资产重定向到另一个骨架
3.Rig

- Rig也是一种资源类型,但UE4不允许我们直接通过右键来创建他,必须以一个既有的骨架Skeleton来生成(提取)Rig

- 生成Rig时允许我们去除一些不需要的骨头
- Rig文件包含两部分信息:
**Node**和**Constraint Setup** 
**Node**部分的信息最为重要,它定义了节点之间的”父子关系”,这些”父子关系”加在一起就决定了骨架的”拓扑结构”。需要注意的是,UE4不允许我们在这里添加新骨头或修改”父子关系”拓扑结构,它只有骨头与骨头之间的父子关系信息,而不包含父子之间相对变换的信息
**Constraint Setup**部分可以设定每个骨头移动和旋转的坐标系,并且是可以修改的。
-
4.Rig、Skeleton以及Animation Sequence的信息分工
| | 重点信息 | 其他信息 | | —- | —- | —- | | Rig | 骨骼的拓扑结构信息(父子关系的定义) | 骨骼变换的坐标系(可修改);骨头的名称(最次要) | | Skeleton | 父子骨骼相对变换(位置/旋转/缩放)信息 | 骨骼的拓扑结构信息(父子关系的定义) | | Animation Sequence | 骨头每一帧的变换(位置/旋转/缩放)信息 | 其他 |
总结:UE4的Rig是骨骼、动画以及动画蓝图是重定向的最根本基准,只有声明为同一个Rig,才可以进行重定向,而Rig本身也是提前创建好的,这样做的目的其实就是为了反复确认要重定向对象的骨架必须具有相同核心拓扑结构。
Rig是为重定向服务的,而重定向归根到底就是为了方便复用骨骼和动画资源以改善工作流。
5.T-Pose
微调姿势时容易出现位置不准、不对称等等问题。
解决方法:因为很多动画资源,它们的模型都是
**T-Pose**的,所以拥有一个标准的**T-Pose**的重定向姿势,会大大提高工作效率和重定向的质量。6.UE Skeleton骨架
UE Skeleton是一种标准,许多第三方动画资源都是直接基于UE Skeleton的
很多动画制作工具可以直接导出UE Skeleton适用的动画
在使用二足类人类型的,即使要使用自定义骨架,可以在UE Skeleton的基础上进行拓展。
**Root**:整个骨架的根骨头,控制整个骨架的位移。在**Root Motion**中起关键作用的骨骼就是它**twist**:蓝色框中标注的带有**twist_01**的骨头与去掉该名称节点的骨头一一对应,并且带有twist_01的骨头一定是不带twist_01的直接子骨头,它们出现的位置是 上/下/臂 和 大/小腿。这些骨头是防止腿部或手部出现较大扭转而造成模型过度扭曲。**脚部IK**:**ik_foot_root**脚步IK的根骨骼,它有2个子骨头if_foot_l/ik_foot_r,即脚部的IK控制器**手部IK**:**ik_hand_root**手部IK的根骨骼,它的直接子骨头是if_hand_gun,ik_hand_gun的子骨头是ik_foot_l/ik_hand_r,该设计其实就是为了方便动画师制作端枪的动画,移动ik_hand_gun就能同时移动双手。该设计并不是左手连接到右手,是左右手的IK控制器都连到了**ik_hand_gun**上,**ik_hand_gun**的方向是从右往左的7.UE Skeleton Plus
https://zhuanlan.zhihu.com/p/345004477 以后补全学习
4.动画曲线
动画曲线是UE4提供的一种机制:
- 我们可以借助动画编辑器在动画片段的时间轴上编辑这种曲线。它的优点就是直观:动画的每一帧(X值)对应的曲线值(Y值)一目了然,且便于编辑
- 在运行动画时获取这个曲线,动画播放到哪一帧,我们也同步地获得了该帧对应的曲线值。
- https://zhuanlan.zhihu.com/p/349336076
- 操作尚未掌握熟练
5.动画层
6.状态机
状态机通过图形化方式将骨架网格体的动画拆分为一系列状态。然后按照**转换规则**管理这些状态,转换规则可控制从一个状态混合到另一个状态。
- 剖析状态机:主要组成部分为”各种状态的网络”、”定义状态转入转出的规则”。每种状态和每条规则设置都是其自身浓缩的蓝图网络。这易于处理复杂动画的混合,无需使用过于复杂的
**AnimGraph** - 状态:
**AnimGraph**的一个组成部分。角色和骨架网格体将定期混入混出此状态 - 转换规则:使用
**转换规则**来控制骨架网格体从一个状态转换到另一个状态。转换规则可对变量值执行任意数量的检查和测试,目的是输出一个**True/False**值。该布尔值将决定动画能否通过转换。 - 导管:更高级的共享转换资源。转换规则只是从一个状态到另一个状态的简单
1对1的关系,而导管可以是 1对多、多对1、或多对多的关系。图表中的导管和状态相似,但带导管名称的图标不同。如果转换未进入状态而进入导管,即可执行一系列的检查,以确认进入不同的状态。 -
7.蒙太奇
蒙太奇是一种动态播放角色的方法。
- 对动画序列进行剪切、组合、循环、跳转。
动画融合不属于Montage的功能,而是属于动画蓝图中本身就有的功能
