UE4学习笔记-UE4 Animation System
UE4学习笔记-UE4 Animation System
Persona
Skeleton (骨架)
Animation Sequence(动画序列)
Notifies(通知)
Curves(曲线)
RootMotion(根骨骼)
Animation Retargeting(相同骨架重定位)
Animation Retargeting(不同骨架重定位)
Animation Composite(合成动画)
Blendspaces(混合空间)
AimOffset(瞄准偏移)
AnimMontage(蒙太奇)
Sync Groups(同步组)
SkeletalControls(骨架控制器)
Slot(插槽)
Section(动画片段)
Vertex Animation Tool(顶点动画工具)
AnimBlueprint(动画蓝图)
Animation State Machine(动画状态机)
State(状态机)
Transitions
Animation Blend(混合动画)
Blend by Variable(混合动作)
Use Cached Pose
Layeredblend Per Bone
Inverse Kinematics(反向动力学)
Persona
Persona是虚幻引擎中的一组动画编辑工具集。可用来编辑骨架,骨架网格体,动画蓝图以及多种其它动画资源。包含用于编辑骨架 插槽 、预览 动画序列 、设置动画 混合空间 以及 蒙太奇 、编辑 动画蓝图等的面板。
Skeleton(骨骼)
骨骼资源是一切骨骼动画的基础,通过分层结构,一般描述一个生物及非生物的骨架形状。
骨架资源通常和Skeletal Mesh一同导入工程。
如果多个静态模型共用同一套骨架,则在导入的时候提醒选择已经存在的骨架。
Animation Sequence(动画序列)
AnimationSequence(动画序列) 是一个可以在骨架网格物体上播放的独立的动画资源。它们包含了一些关键帧,这些关键帧可以及时地指出某个特定点处的一个骨骼的位置、旋转度及缩放比例。通过在序列中播放这些关键帧,让 骨架网格物体 的骨骼之间进行混合,使得骨骼可以产生平滑的动画效果。
Notifies(通知)
一共有3种Notify:
AnimNotify(动画通知)
单次通知,需要新建自定义类,继承自AnimNotify,并复写其中的ReceivedNotify
方法。 动画播放至该处时会调用该方法。例如上图中的PlaySound。
AnimNotifyState(动画通知状态)
时间段内的通知,需要新建自定义类,继承自AnimNotifyState,按需复写以下方法:
Received Notify Begin
Received Notify End
Received Notify Tick
其中,Begin和End分别在通知的开始和结束调用,并保证成对调用,适合需要在区间内修改状态并复原的通知类型。Tick用来处理每帧的变化逻辑,最后一个Tick在End之后调用。例如上图中的Trail。
NotifyEvent(事件通知)
直接在资源中添加的事件,在AnimBlueprint中的EventGraph(事件图表)中可添加相应事件和处理逻辑。例如下图中的CustomNamedAnimNotifyEvent。
Notify类型有下图两种:
- Queued : 实现方式是异步的,适用不需要高精度的场合,一般的普通逻辑应该使用这个。
- Branching Point : 实现方式是同步的,精度高,适用于精确的动画跳转或设置动画时间。
Curves(曲线)
可以添加曲线用以动画中的形变或材质参数变化。
Curve Types:
- Morph Curve:用于骨骼形变等。
- Material Curve:用于材质变化参数。
在EventGraph中使用曲线:
RootMotion(根骨骼)
某些动作资源带有位移属性,(例如翻上杆子),区别是在动画播出后,人物的坐标位置是否真实移动。这些资源需要勾上RootMotion属性。
在AnimBlueprint中设置RootMotion的作用范围(默认只在AnimMontage里启用RootMotion)。
Animation Retargeting(相同骨架动画重定位)
是一种允许在相同的骨架资产角色间复用动画的功能。比如一个胖子和一个瘦子使用相同的骨架而不必重新制做绑定.
Animation Retargeting(不同骨架动画重定位)
是一种允许在不同骨架资产角色之前复用动画的功能.这需要匹配原骨架和目标骨架的骨架,要使目标骨架和源骨架匹配骨架节点关联数据
Animation Composite(合成动画)
Animation Composite(动画组合)允许将多个动画序列合并成一个使用,将动画序列拖入Composite区域即可,其附加的通知,曲线等内容和动画序列一致。
Blendspaces(混合空间)
Blendspaces(混合空间) 是可以在 AnimGraphs(动画图表)中进行采样的特殊资源,它可以基于两个输入值混合多个动画。基于一个输入值简单地混合两个动画,可以使用动画蓝图内其中一个标准的混合节点来实现。Blendspaces提供了基于多个值对多个动画进行复杂混合的方法。
Blendspaces的目标是减少创建一个独立的、硬编码的节点来执行基于多个特定属性或条件的混合的需要。通过允许动作美术或程序员指定 输入值、动画及如何使用输入值混合动画的方法, 使得通过这个通用的Blendspaces节点几乎可以执行任何类型的动画混合。
Ctrl Shift:预览混合效果
编辑器界面:
AimOffset(瞄准偏移)
在动画进行过程中,Aim Offset的效果同其他动作(比如跑动、步行、跳跃等)相混合,来使得角色在所有方向上都呈现出平滑的外观效果。 常用来做瞄准动画。
瞄准偏移(Aim Offset)和Blendspaces(混合空间)的区别是:
Blendspaces(混合空间) 用来混合下半身或身体动作
瞄准偏移(Aim Offset) 用来混合上半身(瞄准)动作
AnimMontage(蒙太奇动画)
AnimMontage(动画蒙太奇)是一个多用途的工具,常用来控制动画循环,跳转和衔接。与其他资源不同,AnimMontage具有Slot属性,可以通过插槽的方式替换或融合基本动作。
Slot(插槽)
可以选择当前的资源属于哪个Slot:
点击下方的放大镜可以打开Slot管理器,可对当前骨骼的Slot进行增、删、改等操作。
当执行MontagePlay时,Montage资源所属的Slot会被激活:
When we called MontagePlay, the slot will be actived.
Section(动画片段)
Section是一个动画片段,一个AnimMontage资源中可以包含多个Section。 在Section区域右键即可新建一个Section。
Section之间可以有默认的连接顺序,在进行MontagePlay的时候默认会从第一个Section播放,如果未编辑Section连接,则会在第一个Section播完后结束。按照下图编辑可以实现自动接连Section,甚至形成循环(灰蓝色部分),点击后面的X可以断开连接,点击上面的Clear将会恢复成初始状态。
Skeletal Controls(骨架控制器)
AnimDynamics (动态动画)
小型解算器,可基于物理实现相连、手镯、背包、头发布料的反弹或移动。应注意节点不计算碰撞,约束可以限制运动。
Apply a
Percentage of Rotation (应用旋转百分比)
用源骨骼的旋转数据控制目标骨骼旋数据。
Bone Driven
Controller (骨骼驱动器)
使用源骨骼驱动一个或多个骨骼运动产生动态影响。一般用在角色附件(如小包,大体积挂件)可避免模型穿插。
Copy Bone (复制骨骼)
从一块骨骼复制移动、旋转、缩放数据到另一块骨骼。
Hand IK
Retargeting (IK骨链重定向)
用于处理IK骨链重定向,基于Hand FKWeight 值匹配FK手部骨骼。0 偏向左手,1 偏向右手,0.5左右手权重均等。
Look At (跟随骨骼)
用于指定骨骼进行跟随骨架中的另一根骨骼。一般用于角色眼睛跟随。
Spring
Controller(弹簧控制器)
用于制做弹簧效果,可用于乳摇效果。
Transform
Bone(变形骨骼)
用于修改特定骨骼的变形,可用于捏脸系统。
Trail
Controller(轨迹控制器)
可用于影响层级中一系列的骨骼链。
Twist
Corrective(扭曲矫正)
可基于骨骼之间的相对扭曲驱动曲线值,产生模型顶点变形形成更自然的效果。可修正角色脖子、手腕、等部位容易产生模型变形的位置,使模型更自然。
Two Bone IK(两根骨骼IK)
将一个逆运动(IK)解算器应用到拥有 3 个关节的骨骼链条,如角色的四肢。
Observe Bone (观察骨骼)
可生成特定骨骼的调试转换信息,一般用于调试用,时实查看骨骼变化数据。
Vertex Animation Tool(顶点动画工具)
将复杂的动画数据存储在 2D 纹理中或网格 UV 中是在保持必要的动画外观和感觉前提下降低动画开销,可用在模拟草地、头发等效果。需要在外部3D软件中安装插件。安装位置:*.*\Engine\Extras\3dsMaxScripts\VertexAnimationTools.ms
AnimBlueprint(动画蓝图)
AnimBlueprint(动画蓝图)是控制动画播放、融合、处理动画事件和动画播放逻辑的地方。
Animation State Machine(动画状态机)
动画状态机,动画状态机用来给几个基本常态动作做动画切换用(例如走跑跳蹲、游泳、飞行等),只涉及表现。如果是动作游戏,里面包含多种逻辑状态,则不应该使用该动画状态机处理这些逻辑状态,而是使用AnimMontage,配合自己的逻辑状态机,去处理动画表现。在动画状态机里不应当做逻辑处理。
State(状态机)
一个简单的状态机是这样的:
其中包含一个Entry(入口),连向了默认状态;若干个State(状态),其中每一个状态都会输出在该状态下人物的动作表现;状态间的Transition(转换条件),当条件达成时,状态会根据箭头方向进行状态切换。 状态机可以进行单向嵌套。
AnimGraph(动画图表)的最外层和State的结构是一样的,如下图所示,都要提供Final
Animation Pose
:
Transitions
Transitions决定了状态间的转换条件。
其图表返回了一个bool值,作为转换依据。
在这个Graph中可以使用资源的播放状态(TimeRemaining)作为转换条件。
Animation Blend(混合动画)
Blend by Variable
根据参数混合两个动作,适合使用不同场合下用不同的动作资源。 支持float(Alpha)、bool、int、Enum,如果需要的Pin数目不够,可以点击鼠标右键添加新的Pin值。
Use Cached Pose
如果需要将节点输出的动画和一个MontageSlot进行融合(例如一边走路一边放技能),那么就需要用Cached Pose
节点将前面的动画缓存起来,再进行融合,如下图:
Layeredblend Per Bone
根据需要,只融合某些骨骼部分(比如下半身正常走路,上半身射箭),如上节配图所示。 根据需要,填写融合的骨骼名称作为参数:
Blending Animations(动画合成物)
用于将多个动画序列,并把它们”组合”到一起,以使他们作为一个新的动画序列使用,这就是动画合成物的理解。仅用于把多个动画合成为一个新的独立动画使用。并不提供任何动画混合功能。
Inverse Kinematics(逆向运动学)
Inverse Kinematics(反向动力学)提供了一种处理末端效应器位置处的关节旋转的方法,而不是通过直接的关节旋转处理。实际应用中,我们设置好受影响的位置,然后和IK解决方案会自动处理骨骼的旋转,以便最终的关节可以同设定的位置保持高度一致。这可以用于将一个角色的脚部放到不平的地面上,或以其他方式与游戏场景产生逼真的交互。
FK(正向运动学)
通过传入到角色或骨架网格物体的骨骼中的直接旋转数据驱动的骨架被认为是正向运动学
IK(逆向运动学)
逆向运动学是从另一个方向工作的。骼链的末端效应器,提供一个链条末端应该尝试到达的位置。用户或动画师移动该效应器,IK解决器(IK系统中驱动旋转的算法)旋转骨骼,以便链条中的最终骨骼在目标位置处结束。(红叉为末端效应器)
参考:https://docs.unrealengine.com/latest/INT/index.html
Mullin-ぼくりん