[UE/动画/ContentExamples]Animation Basics学习笔记
前言
如果你是一位完全没有接触过UE的初学者, 不建议直接上手看示例项目, 因为这种情况下连哪些东西怎么打开都不知道, 是没办法学的. 建议在B站找一个UE蓝图入门教程过一遍, 然后找一个UE角色动画基础教程过一遍. 之后再来上手看项目会好很多. 这里推荐一下我个人看的两个入门教程:
虚幻5基础,虚幻5蓝图基础,虚幻5蓝图零基础入门(已完结)_哔哩哔哩_bilibili
加起来十一个小时. 由于内容非常入门, 肝一点开倍速一两天就能学完.
本文是一位UE初学者的学习笔记, 学习的内容是官方示例项目Content Example. 不保证没有错误, 仅供参考.
当然, 如果你是因为懒得学这个项目, 来找找有没有文章直接讲解这个项目的, 那应该会比较适合你.
Mirror
概述: 通过一个数据表完成镜像映射, 从而让一个动作镜像播放.
动画蓝图中:

如图, 如果从节点1连接至输出, 就会播放镜像后的动画, 如果直接输出, 就会播放原动画.

选择这个mirror节点, 可以看到右边栏可选择数据表.
数据表内部大概长这样:

RootMotion
概述: 为skeletal mesh添加一个根(root)骨骼, 并在动画中加入对根骨骼的移动, 就能实现角色随动画改变位置.
项目里给的演示是, 用同一个带有根骨骼的角色模型, 播放动作相同的两个动画, 其中一个带有root motion, 另一个不带root motion. 结果就是前者的根骨骼会随着动画改变, 后者不会.
项目还展示了root motion的应用. 大概来说, 就是如果一个动画有root motion, 那么根骨骼的位移可以被移动组件提取和使用.
但是我看蓝图好像没有特意去提取这个位移, 而是直接绘制了胶囊体. 所以不清楚是否需要特地去获取根骨骼的位移.

其hierarchy也是很正常, 没有特别动过. 不排除胶囊体内部有哪些蛇者与此有关, 后续遇到再补充.
Additive Animations
概述: 当一个动画作为附加动画播放时, 意味着它将添加到另一个动画上, 而非覆盖另一个动画. 而一个动画如果想作为附加动画, 那么它需要有一个base pose. 可附加动画将计算其自身与base pose之间的差异, 然后这个差异将被叠加上去.

在项目给出的演示中, base pose是跑步动作, 附加动画是受击动作(头朝后仰). 这里两个动作的差异体现在: 腿部跑动, 手臂动作, 头部位置. 最终叠加的效果为: 头部后仰, 腿部跑动, 手臂更多与base pose相同, 不过会有一点偏移. 这部分偏移效果应该就是附加动画叠加后产生的.
动画蓝图:

实验了下, alpha值在0到1之间有效(取大于1的值效果与1相同), 1的时候附加动画的叠加效果体现到最大, 不过看下来就算取1, 效果也比较有限. 附加动画确实更多是一个"附加"的作用.
Blendspaces
概述:
动画蓝图:

可以看到两个关于混合空间的节点, 一个是1D, 一个是2D, 分别就代表了输入值的维度.
双击节点能够打开对应的资源文件.

它们的区别主要就是左边栏中的Axis Settings. 在1D文件中, 只有Horizontal Axis子菜单, 而在2D中还会有一个Vertical Axis子菜单. 我们还能看到正中央下方的坐标图, 可以认为, horizontal axis控制的是水平方向的相关参数, vertical axis控制的是竖直方向的相关参数.
坐标图中, 圈出来的三个点就是被拖入坐标图的动画资源, 混合空间将根据输入值(本例中为speed)来混合被拖入坐标图中的动画, 从而得到当前应该播放的动画.
我们需要在event graph中自行实现对输入值的更新. 在项目中, 使用的是slider.
(仅展示部分)

Aim Offsets
概述: 瞄准偏移. 本质上是混合空间与附加动画的结合.
我觉得原文说的有点太泛了, 顺便贴一下ai.

豆包解释:


动画蓝图:

关键就是那两个aimoffset_player, 双击打开就能进行配置. 但好像只能用一维的值来做, 其他节点我试了一下都报错, 不太清楚什么原因. 后续遇到了补充.
Montages & Slots
概述: 动画蒙太奇节点比较复杂, 光看文字还是理解不了的. 这里推一下这个视频, 讲的简洁易懂. 作为入门来说应该足够.
ue5教程15:使用动画蒙太奇制作角色攻击动作,Mixamo网站的使用_哔哩哔哩_bilibili
这里提一下视频没讲到但是项目展示讲到的点: 如果蒙太奇包含了一个附加动画, 那么就会在已有动画的基础上添加附加动画; 否则就会覆盖所有动画.
以及, 视频展示的是在角色蓝图中调用播放蒙太奇, 而项目展示的是在动画蓝图的eventGraph中调用播放蒙太奇.

Blend Curves
概述: 可以用曲线来控制blend的过程.
点击blend节点, 就能自行配置曲线

Blend Profiles
概述:

动画蓝图:

项目说blend profile是在skeleton tree中配置的, 我就找了下:

进入对应skeletal mesh的文件中, 左边栏就能找到blend profile的相关配置. 他会给每个骨骼添加一个值, 这个值如何设置就如项目讲解的一样.
Inertial(惯性化)
概述: inertial比较符合它的名字. 在动画切换的时候, 会停止当前动画的计算, 并平滑地转换至下一个动画. 在项目的演示中表现为: 跑步跑到一半动作直接停了下来, 缓慢混合至战力, 非常僵硬.
惯性化似乎并不总是一个好选择. 以项目给出的演示为例, 从站立到跑步这个过程的切换会显得十分鬼畜突然, 相比之下正常的blend节点就能做的很好. 从跑步切换到站立的过程同样如此.
动画蓝图中, 可以在blend节点后使用惯性化.

我看了下, 惯性化节点能配置的东西相当少. 以后用到了再补充吧.
Blend Nodes
概述: 动画蓝图中会有很多blend节点可以用.


State Machine(状态机)
概述: 动画系统的经典设计了, 应该无需多言.
在animgraph中可以创建一个动画状态机, 双击就能进去配置.


Blendspace Graph
概述: 前面已经接触过blendspace了, 它是一种资源文件, 可以在动画蓝图中播放. 而动画蓝图也有一个节点, 也是个blendspace. 它不以资源文件的形式存在, 而是个可配置的节点, 灵活性比较高.

双击进节点:

右键可以添加新采样点

我们可以双击采样点, 配置该采样点输出的动画.

Layering
概述: 基于骨骼进行分层. 比如上半身播放动画1, 下半身播放动画2.

右边栏框住的部分就是配置分层的地方. 这里以spine_01为分界点.
(spine_01位置示意图)

Layering Montage
概述: layering与蒙太奇相结合.
这里直接讲一下项目给的蓝图.

配合项目场景中的逻辑, 应该可以理解为: 上半身和下半身正常状态下都是跑步. 然后在插槽upper body中, 当触发换弹按钮时会直接播放换弹动画. 体现为整个人物停下来, 换弹. 而lower body中, 换弹动画作为附加动画在触发换弹时被播放. 而在蓝图中, 使用了Layerd blend per bone节点, 将二者结合(分界点同样是spine_01). 这样一来, 在触发换弹时, 上半身会播放完整的上半身的换弹动画, 下半身播放被换单动画附加后的下半身的动画. 最后体现为: 上半身有明显换弹动作, 并且下半身(腰部, 腿部等)会随着换弹动作而有所变换. 显然, 二者都保留了原有的特征.