动画蓝图与动画系统
Animation Blueprint & Animation System
UE5 角色动画以动画蓝图 (Animation Blueprint) 为核心:它每帧为骨骼网格体 (Skeletal Mesh) 计算最终姿势。动画蓝图内部用状态机 (State Machine) 组织“何时播什么”,用混合空间 (Blend Space) 按速度、方向等参数连续混合,用蒙太奇 (Animation Montage) 在插槽 (Slot) 中插播攻击、交互等一次性动作,用 Control Rig 做程序化骨骼控制(如贴地)。算出的骨骼姿势最终交给蒙皮 (Skinning) 驱动顶点。
整体结构
下图是一个典型角色的动画求值链:事件图更新变量,动画图中状态机(内含混合空间)产生基础姿势,插槽节点允许蒙太奇覆盖,Control Rig 节点再做程序化修正,最终姿势输出到骨骼网格体进行蒙皮。
flowchart LR
EG["事件图:读取速度/方向等变量"] --> SM
subgraph AG["动画图 AnimGraph"]
SM["状态机<br/>Idle/Locomotion/Jump"] --> SLOT["Slot 插槽<br/>蒙太奇插入点"]
SLOT --> CR["Control Rig 节点<br/>贴地/接触点"]
CR --> OUT[Output Pose]
end
BS["混合空间"] -."被状态内引用".-> SM
MT["蒙太奇 Montage"] -."播放到".-> SLOT
OUT --> SK["骨骼网格体蒙皮"]图中实线为姿势流向,虚线表示资产被引用或播放到某节点。蒙皮本身的数学(线性混合蒙皮等)见 顶点混合与蒙皮;表情等逐顶点形变见 变形动画。
动画蓝图 (Animation Blueprint)
动画蓝图是控制骨骼网格体动画的专用蓝图,在动画蓝图编辑器中混合动画、控制骨骼、编写决定每帧最终姿势的逻辑。创建时必须指定目标骨架 (Skeleton),可选模板动画蓝图或父类以做继承。要生效,需在骨骼网格体上把 Animation Mode 设为 Use Animation Blueprint 并把 Anim Class 设为该资产。其他特性包括链接动画实例 (Linked Anim Instances) 与作为蒙太奇入口的插槽。(Animation Blueprints)
状态机 (State Machine)
状态机是动画图中的子图,主要把动画与移动状态(待机、走、跑、跳)对应起来,避免把复杂混合全堆在一个动画图里。(State Machines)
| 元素 | 作用 | 要点 |
|---|---|---|
| 入口 (Entry) | 定义默认状态 | 通常是 Idle |
| 状态 (State) | 自带一层动画图,产出该状态的姿势 | 只有激活时才执行其逻辑;Always Reset on Entry 决定重入时是否从头播 |
| 转换 (Transition) | 状态间的有向连接与规则 | 单向,来回需要两条 |
| 导管 (Conduit) | 一对多、多对一、多对多的共享转换 | 规则默认返回 false;可作入口以实现可变默认状态 |
| 状态别名 (State Alias) | 合并多个状态共有的转换,减少连线 | 被勾选的状态共享同一套规则和混合时长;Global Alias 适合攻击等有限时长状态 |
状态机属性中,Max Transitions Per Frame 设为 1 可防止同一帧多个转换同时成立造成的竞争;Skip First Update Transition 控制初始化时是否直接跳到已满足条件的状态而不混合。状态还能在进入、离开、完全混合时发出骨架通知 (Skeleton Notify),在事件图中响应。(State Machines)
混合空间 (Blend Space)
混合空间是把多个动画或姿势作为样本 (Sample) 放到一维或二维图上的资产,运行时按各轴输入值在样本间插值,例如以速度和方向两轴混合八方向移动。(Blend Spaces)
| 类型 | 说明 |
|---|---|
| Blend Space / Blend Space 1D | 基础混合,常作为基础层 |
| Aim Offset / Aim Offset 1D | 样本是网格空间叠加 (Mesh-Space Additive) 动画,用于瞄准/注视,节点需要输入一个基础姿势 |
关键设置(Blend Spaces):
- 默认用三角剖分 (Triangulation) 混合,比旧的网格模式 (Use Grid) 更精确;网格模式一般只在需要 Wrap Input 等特殊布局时用。编辑器会把过细的三角形标红提示调整。
- Wrap Input 让轴循环(如 −180°~180°),两端动画应相近以免跳变。
- Smoothing Time / Type(含 Spring Damper)平滑轴输入的变化;Weight Speed 限制样本权重变化速度(2.0 表示半秒从 0 到 1)。官方提示二者一般不要同时用。
- Notify Trigger Mode 决定混合时哪些样本的动画通知触发(全部 / 权重最高 / 无),避免脚步声重复等问题。
混合空间本质上是在参数空间中对姿势做重心插值,与 顶点混合与蒙皮 中按权重混合骨骼变换是同一类思想在不同层级的应用。
动画蒙太奇 (Animation Montage)
蒙太奇把多个动画序列组合成一个资产,并通过蓝图控制播放;可划分段 (Section),运行时按逻辑以任意顺序跳转(如连招的起手、循环、收招)。(Animation Montage)
- 插槽与插槽组 (Slot / Slot Group):插槽占据网格体的全部或一部分;蒙太奇中的动画播放到动画蓝图中对应的 Slot 节点。同一插槽组内同一插槽的序列会互相覆盖;用上半身、下半身两个插槽可同时播放不同动画(边跑边换弹)。同一插槽内不要让动画重叠;多插槽时各轨总时长最好一致。(Animation Montage)
- 子蒙太奇 (Child Montage) 继承父蒙太奇,只替换片段,引擎自动调整播放速率以对齐时长;子蒙太奇不能再作父级。(Animation Montage)
- 网络:蒙太奇可用于在网络游戏中复制根运动 (Root Motion),但需要手动用 RPC 复制 PlayMontage 节点,且只有根运动的复制与校正会被带过去。(Animation Montage)动画蓝图本身不复制,应复制驱动动画的变量(Networking Overview),详见 网络复制与 RPC。在 GAS 中,与玩法相关的蒙太奇应通过 Play Montage Ability Task 播放,见 Gameplay 能力系统。
Control Rig
Control Rig 是在引擎内绑定 (Rigging) 和制作动画的工具集:可创建自定义控制器、在 Sequencer 中制作动画,提供模块化绑定、全身 IK (Full-Body IK)、样条绑定、约束、空间切换、Python 脚本等功能,从而减少对外部 DCC 的依赖。(Control Rig & Control Rig in Animation Blueprints)
在动画蓝图中通过 Control Rig 节点引用,用于程序化的玩法控制,官方举例为贴地 (Ground Alignment) 或任意接触点。节点可把 Control Rig 的变量和控制器暴露为引脚,或用动画曲线驱动浮点变量;Transfer Pose in Global Space 保证全局姿势一致,关闭可提升性能(仅当两边骨架层级不同时结果才有差别)。(Control Rig & Control Rig in Animation Blueprints)
全身 IK (Full-Body IK, FBIK):Control Rig 图中的 Full Body IK 节点(需启用 FullBodyIK 插件)基于位置型 IK (Position Based IK) 框架,支持逐骨骼设置、偏好角度、拉伸,定位为程序化修正工具(如贴地、伸手够物)。设置方法:指定根骨骼(通常是骨盆),每个控件对应一个效应器 (Effector),传入骨骼和变换。(Control Rig Full-Body IK)
| 调节项 | 作用 |
|---|---|
| 旋转/位置刚度 (Stiffness) | 0 完全自由,1 完全锁定;如骨盆设 0.8 防止髋部乱动 |
| 偏好角度 (Preferred Angles) | 让关节优先沿某轴弯曲,解决腿僵直(膝盖 Z 轴 45) |
| 限制 (Limits) | 每轴 Free / Limited(Min/Max)/ Locked,修正脚踝过度旋转 |
| 排除骨骼 (Excluded Bones) | 官方推荐优先排除,而不是把骨骼刚度设满 |
| Iterations / Mass Multiplier | 迭代越多越收敛但 CPU 越贵;刚度、高质量系数和限制都会减慢收敛 |
| Root Behavior | Pre Pull(远距离更易收敛)、Pin to Input(局部肢体)、Free |
(Control Rig Full-Body IK)取舍:FBIK 适合运行时微调姿势,不能代替动画本身;迭代次数直接计入动画线程的 CPU 开销。
取舍与常见坑
| 问题 | 建议 |
|---|---|
| 动画图堆满混合节点 | 用状态机拆分状态,用别名/导管减少连线 |
| 同帧多个转换竞争 | Max Transitions Per Frame 设为 1 |
| 混合空间输入抖动 | Smoothing Time 或 Weight Speed 二选一 |
| 蒙太奇覆盖了全身 | 用上下半身插槽与分层混合 |
| 多人下动画不同步 | 不要指望动画蓝图复制,复制驱动变量;根运动蒙太奇需 RPC 播放 |
| 动画逻辑写在哪 | 动画蓝图事件图每帧运行,重计算放 C++,见 蓝图与 C++ 协作 与 委托与 Tick 机制 |
GEA 的视角:UE5 动画工具与通用动画架构(卷 II 13.4.7、13.6、13.10)
- GEA 列出 UE5 的五个骨骼动画工具:骨架编辑器(绑定、给关节加插槽 socket,即其他引擎所说的挂接点)、骨骼网格体编辑器、动画编辑器(导入、调整压缩和片段时间,组合混合空间,创建蒙太奇)、动画蓝图编辑器(用蓝图控制角色的动画状态机)和物理编辑器(布娃娃刚体层级)(卷 II 13.10.3.2)。
- 本页的概念大多能在 GEA 的通用架构里找到对应:
| 本页(UE5) | GEA 通用概念 |
|---|---|
| 骨架 (Skeleton) 与多个骨骼网格体共享 | 骨骼是中心,多个皮肤和片段都针对同一骨骼,以减少骨骼种类(卷 II 13.4.7) |
| 状态机 | 动作状态机 ASM(卷 II 13.10) |
| 混合空间(三角剖分) | 通用二维 lerp 混合:Delaunay 三角剖分 + 重心坐标(卷 II 13.6.3.4) |
| Aim Offset(网格空间叠加) | 用叠加混合做瞄准与注视(卷 II 13.6.6.3) |
| 插槽与上下半身分层 | 状态层与部分骨骼混合(卷 II 13.6.4、13.10) |
| Control Rig / FBIK 贴地 | 动画后处理中的 IK 与脚部 IK(卷 II 13.7.2、13.11.4) |
- 分歧:GEA 说动画蒙太奇用来定义游戏内过场,而本页依据 UE5 文档把蒙太奇描述为可分段跳转、播放到插槽的玩法动作资产(连招、换弹等)(Animation Montage);UE5 的过场由 Sequencer 过场动画 负责。GEA 同节还沿用了 UE4 的说法和截图。两种说法并列,以引擎文档为准。
- 通用原理分别见 骨骼、姿势与动画片段、动画混合、动画管线与动作状态机、动画约束与后处理、动画压缩。
出处
- Animation Blueprints UE 5.8 文档
- State Machines UE 5.8 文档
- Blend Spaces UE 5.8 文档
- Animation Montage UE 5.8 文档
- Control Rig & Control Rig in Animation Blueprints UE 5.8 文档
- Networking Overview UE 5.8 文档
- Control Rig Full-Body IK UE 5.8 文档
- Game_Engine_Architecture_4th_Edtion_Volume_2_-_Jason_Gregory.pdf
- Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 13 章 13.4.7、13.6、13.10 节