动画系统概述

虚幻引擎 4UE4)的动画系统可对角色和骨架网格体进行深度设定。在这篇文档中包含 UE4 动画系统工作原理的高级概要,以及这套系统的基本概念。

对网格物体进行骨架的绑定,结合对顶点数据的变形(Morph)的 动画 系统能够实现复杂的动画。这套系统能够完成从最基础的移动行为,到根据游戏过程混合预制的动画序列来获得真实的动画效果,比如使用动画蒙太奇(AnimMontage)来计算在窗台上移动或者墙上行走的动画表现,或者配合受伤效果以及利用 MorphTarget 显示面部表情,又或者通过 SkeletalControl 直接控制骨骼变形。

这篇文档是 UE4 动画系统的高级概述,主要面向刚开始在 UE4 中设置动画的人士。然而这并不是在 UE4 中对骨骼资源设置动画的综合手册。可以把这个文档看作为帮助熟悉动画系统一些方面的入门说明,解释了几个不同的部分是如何协同工作的,并展现这个动画系统的灵活性以及可以基于这个灵活性完成的强大效果。

我们先来定义 UE4 动画系统中的主要术语和概念。

PersonaIcon.png

Persona 是虚幻引擎中的一组动画编辑工具集。这是一个健壮的系统,可用来编辑骨架,骨架网格体,动画蓝图以及多种其它动画资源。在虚幻引擎中,大部分(即时不是全部)动画处理工作都在这个编辑器中进行。这是一款多功能的工具,包含了用于编辑骨架 插槽 、预览 动画序列 、设置动画 混合空间 以及 蒙太奇 、编辑 动画蓝图 等的面板。

SkeletonImage.png

骨架(Skeleton) 是一组由骨骼位置和旋转角度组成的树状结构,使骨架网格体(SkeletalMesh)可进行变形。在 UE4 中,骨架从骨架网格体中单独抽象了出来,保存为单独的资源形式。这意味着动画将被应用到骨架上而非骨架网格体上。对于使用同样骨架的多个骨架网格体来说,它们可以共享动画。

AnimSequenceIcon.png

动画序列(AnimationSequence) 是一个可以在骨架网格体上播放的独立的动画资源。它们包含了一些关键帧,这些关键帧可以及时地指出某个特定点处的一个骨骼的位置、旋转度及缩放比例。通过回放序列中的这些关键帧,并在将它们互相混合,使得骨架网格体可以产生平滑的动画效果。

附加动画 Additive Animation

动画都可以随时作为完全动画或者附加动画进行使用。系统将在必要时进行适当计算, 把数据转换为偏移。这使系统比老的引擎版本更加灵活, 不需要提前指定被识别为附加动画的动画。

混合动画 Blending Animations

使用 混合节点混合空间 后,可将各种动画混合在一起,实现一个 更为复杂的最终姿势。举例而言,跑步动画可以和瞄准姿势 或者面部表情动画混合,实现一边跑步一边举枪瞄准,或者一边跑步一边说话的最终效果;并且在这种状态下 保持源动画的独立。这样即可在各种不同情形下对单一源动画 进行重复利用。

动作姿势 Animation Poses

动画姿势可以理解为骨架的快照, 包含所有骨骼的位置和旋转信息。可以把姿势理解为一个动画播放时的暂停状态。比如可以暂停一个 跑步动画,可能看到的就是这个样子:

AnimationPose_Running.png

这里看起来就像是整个网格体,也就是它底下的骨架,摆了一个姿势。代表骨架中每个骨骼变形的数据 决定了实际的动作姿势。

有些动画序列是故意被设计成一个姿势。比如,可能有一系列只有 1 帧或者 2 帧的动画序列, 每个序列定义了一个姿势。以下这个姿势就是一种这类的动画数据, 设计这个姿势是用于控制玩家举枪瞄准时眼睛看的方向。

AnimationPose_Aiming.png

动画系统在 AnimGraph 中会使用动作姿势这个概念。由 AnimationSequence,Blendspace 或者 最简单的混合节点输出的都是动作姿势,或者叫当前时刻的动画快照, 并将这个动作赋予骨架网格体。

组件空间 vs 局部空间

动画姿势可以在 本地空间 中也可以在 组件空间 中。动画蓝图动画图表 中的 Convert Spaces(转换空间) 节点提供了在 本地空间组件空间 间转换姿势的功能。本地空间假设 骨骼的变换是相对于那根骨骼进行的。组件空间假设该骨骼的变换是相对于 SkeletalMeshComponent(骨架网格物体组件) 的。

一般,当在 动画蓝图 中应用姿势时,这些姿势位于本地空间中。但是,某些混合节点和所有的 SkeletalControls(骨架控制) 都是在组件空间中运作的。这意味着,输入姿势在传入到这些类型的节点之前需要先进行转换 。如果输入姿势来自于一个输出到本地空间的节点 ,那么在 SkeletalControl 在其上面执行任何操作之前,必须将其转换到正确的空间中。 在 SkeletalControl 执行完操作之后,所得到的姿势必须转换回到 本地空间中,以便作为其他混合或 Result 节点的输入。

Morph Targets

顶点变形目标是已经以某种方式发生变形的特定网格物体的顶点位置的快照。比如,您可以取一个角色模型,重新塑造他们面部的形状来创建面部表情,然后将已编辑的版本保存为顶点变形目标。在虚幻编辑器中,您可以混合顶点变形目标,来使得角色面部产生那个表情。顶点变形目标可以通过FBX导入到虚幻编辑器中,并且将会被封装在一个动画序列内。

这使得可以轻松地将复杂的顶点变形目标导入到虚幻编辑器中,因为您可以具有启动一个动画的多个顶点变形目标。比如,您可以在您的动画包中使用顶点变形目标来使得角色产生动画来说一段对话。该动画可以使用任何数量个顶点变形目标来捕捉脸部的完整动作。然而,当导入时,结果看上去就仅是一个单独的动画序列。您仍然可以通过曲线 来访问每个顶点变形目标的动画数据。

ParticleEffectNotify.png

动画通知(简称AnimNotifies或通知)使得动画相关的程序员可以设置在动画序列的特定点处发生的事件。通知通常用于这样的特效,比如走动时的脚步声、跑动动画或在动画中产生一个粒子特效。然而,它有很多种不同的用途,因为您可以使用自定义的通知类型来扩展该系统,从而满足任何类型游戏的需求。

Vim Blueprint

动画蓝图 从本质上讲是个专有蓝图 ,它的图表可以控制 骨架网格物体 的动画。 它可以执行动画混合,直接控制骨架的骨骼,并在每一帧对 SkeletalMesh(骨架网格物体) 输出最终姿势。

Controller(控制器) 根据玩家输入或者基于游戏环境作出的决定指示其 Pawn (或 角色 )进行移动。 每个 Pawn 有一个 骨骼网格物体组件(引用要产生动画的 骨架网格物体 ) 和 一个 动画蓝图实例 。 动画蓝图 通过它的两个图表,可以访问它所具有的 Pawn 的属性,可以计算进行动画混合、状态变换或驱动 动画蒙太奇 所使用的值,可以根据 动画序列 的混合计算 骨架网格物体 的当前姿势、还可以通过 骨架控制器 指示 骨骼_ 进行变换。

Blendspace

Blendspaces(混合空间) 是可以在 AnimGraphs(动画图表) 中进行采样的特殊资源,它可以基于两个输入值混合多个动画。基于一个输入值简单地混合两个动画可以使用动画蓝图内其中一个标准的混合节点 来实现。混合空间 提供了基于多个值(目前限定为2个值)对多个动画进行复杂混合的方法。

混合空间 的目标是减少创建一个独立的、硬编码的节点来执行基于多个特定属性或条件的 混合的需要。通过允许动画师或程序员指定 输入值、动画及如何使用输入值混合动画的方法, 使得通过这个通用的 混合空间 几乎可以执行任何类型的动画混合。

MontageIcon.png

动画蒙太奇(简称蒙太奇)是一种多功能工具,通过它可以实现多种动画效果,主要与公开代码或 蓝图可视脚本 中的动画控件相关。它也可用于创造各种动画效果,包括动画的智能循环,基于逻辑的动画切换,等等。

SkelControl

SkeletalControls(骨架控制器) ,也称为 kelControls ,可以直接控制骨架中的骨骼。这些骨架控制器可以用于在 Animation Blueprints(动画蓝图) 中控制一个单独的骨骼、创建IK链等。这种直接控制底层 骨架 的方式可以创建程序化的、动态可变的动画。一个骨骼的 变换 可以用于驱动另一个骨骼;或者当播放一般的走路动画时,可以使用踪迹来使得角色的脚部贴合地面。您可以应用任何类型的修改来调整或完全覆盖 AnimationSequences(动画序列) 对骨骼的 变换操作_ 。

系统分解

下图为动画系统特定部分创建和编辑的简单分解。

CreationDiagram.png

此图表说明了虚幻引擎中典型动画角色数据的流动和所有权。

AnimationDiagram.png

动画内容示例

动画系统及其功能的实际应用显示在 动画内容示例 页面中。

在此页面中可查看到每个功能的小块示例以及额外细节。

如需了解内容示例和如何使用的更多内容,请查阅 内容范例总览 页面。

动画调试功能

在播放模式中按下 ` 键呼出控制台即可访问调试功能。

渲染骨架网格体骨骼

AnimationShowDebugBones.jpg

在控制台输入 ShowDebug Bones 命令即可显示骨架网格体骨骼。上图中单独的白色线条即为骨骼。

通过 ShowDebug Bones 命令可显示游戏会话中可操作角色的信息。如需查看另一个角色(非玩家角色)的调试动画,可使用 viewactor ExampleCharacterID 命令,ExampleCharacterID 代表指定到需要查看的角色的角色 ID。在可显示角色 ID 名称的 World Outliner 中将鼠标悬停在角色上方即可显示 ID。

此时使用 viewactor 命令摄像机便会移动至当前正在查看的 Actor 并进行锁定。如需在调试时操控摄像机,可创建一个 Play in Editor 会话,会话中下拉菜单中有多个玩家使用一个窗口进行调试,另一个则控制玩家角色。

在控制台中输入 ShowDebugToggleSubCategory 3Dbones 命令即可启用另一个外观,匹配 Persona 中显示的骨骼。

动画调试输出

AnimationShowDebugToggle.jpg

在控制台中使用 ShowDebug Animation 命令即可启用 Animation Debug Output 信息。

显示的信息分为 5 个部分,每个部分均可结合下列的类型名与 ShowDebugToggleSubCategory 命令进行开关(如 ShowDebugToggleSubCategory SyncGroups)。

按钮

描述

SyncGroups

显示构成最终姿势的动画资源,按其同步组排列(如不属于群组,则按未分组排列)。此部分中列出的混合空间默认显示全部构成动画/权重。如需缩小输出使用的屏幕空间,可使用 ShowDebugToggleSubCategory FullBlendspaceDisplay 将其关闭。

Montages

列出角色当前使用的蒙太奇。使用中的蒙太奇为绿色高亮状态。

Curves

列出播放动画所开启的曲线值(以名称:值对显示)。

Notifies

显示当前有效的通知状态。

Graph

显示使用中的姿势图表。从代表最终姿势的最后节点(根节点)开始显示,然后继续列出构成最终姿势的全部节点。节点以层级的方式进行显示,可使用户了解到节点的连接方式,无需查看原始蓝图资源。使用中的节点为绿色,未使用的节点为灰色(如使用 ShowDebugToggleSubCategory FullGraph 进行显示)。