05 骨骼动画
骨骼动画原理
序列帧动画
2d游戏中的动画,实现方式是将一帧一帧的静态图片依序播放,也被称作精灵动画(sprite)。
3D游戏动画
3d游戏中的动画,就是改变模型顶点的位置从而形成动画效果。
模型由大量顶点组成,如果每一帧都直接驱动顶点,造成数据量庞大,性能开销巨大。于是我们采用先驱动骨骼,进而带动顶点的方法:互相连接的骨骼组成骨架结构,通过改变骨骼的朝向和位置来生成动画
蒙皮:将Mesh的顶点附着(绑定)在骨骼上,并且每个顶点可以被多个骨骼控制
基础资产类型
SkeletalMesh:骨骼网格体,主要的渲染资源
Skeleton:骨架,定义了骨骼的层级结构
- 在UE4中,骨架资源将关联动画数据,骨架资源将把骨骼(关节)数据关联到动画轨迹,从而驱动动画。
PhysicsAsset:物理资产,关联各骨骼和物理世界的交互
UE4动画蓝图
动画蓝图
- Event Graph
- 与普通蓝图的Event Graph类似,可以在BeginPlay、Tick中添加逻辑
- Anim Graph
- 用于逐帧生成动画Pose,可以进行AnimSequence的采样、混合、骨骼变形等操作,最终产生想要的Pose
常用动画资产
Animation Sequence
是由一系列关键帧组成的动画序列,也是最基本的动画类型,当动画执行到某个时间点时会由相邻两个关键帧融合出当前Pose
AnimAdditive
输出的Pose为此动画当前帧的Pose与设置的BasePose的差
AdditvieAnimType决定了此结果的Pose中骨骼变换的数据属于哪个空间
Local Space & Mesh Space
Local Space下,Pose中保存的每个骨骼的变换数据为相对父骨骼的变换
Mesh Space下,Pose中保存的每个骨骼的变换数据为相对骨骼模型组建的变换
Blend Space
BlendSpaces提供了很便捷的多动画融合功能,通过传入参数值动态计算各个动画的权重输出融合后的结果,可以省去程序或者美术编写复杂的动画融合节点、
注意:由于Blend Spaces是由若干个Anim Sequences构成,所以当所有的Anim Sequences都为叠加动画时,即可输出叠加型Pose
AimOffset
AimOffset是BlendSpace的一个子集,它其实就是一个在MeshSpace下具有叠加属性的BlendSpace。是引擎专门封装好用于做武器瞄准的动画类型(可能是为了降低上手难度,因为最基本的动画也要用到这个功能)。
Montage
Montage是一种在编辑器中创建的动画资源(非导入),它可以由若干个AnimSequence组成,通过其设置的Section和Slot,可以实现一些特殊的动画控制,包括动画的智能循环、基于逻辑的动画切换等等
一个Montage可以设置若干个Slot,具体哪个slot生效,由运行时刻AnimGraph的情况决定
每个Slot中可以拖入若干个AnimSequence,顺序可以按需更改。如果AnimSequence为叠加型动画,则这个Montage也为叠加型Montage
Montage可以有若干个Section,Section把整个Montage拆分成若干块,这些块之间可以自由的衔接和跳转
常用动画节点
混合节点(Blend Nodes)
ApplyAdditive:在LocalSpace下把一个动画叠加到另一个动画上
ApplyMeshSpaceAdditive:在MeshSpace下执行叠加
Blend:把两个Pose根据Alpha参数作为权重进行混合
BlendBoneByChannel:可以指定一根骨骼与另一根骨骼进行混合(不常用)
BlendMulti:同时对多个pose进行混合,与Blend同理
BlendPosesByBool和BendPosesBylnt类似代码中的switch case,根据参数选择用哪个Pose
LayeredBlendPerBone:BlendPose可以由指定某个骨骼开始对BasePose进行覆盖,覆盖时可以选择LocalSpace或MeshSpace
. MakeDynamicAdditive:动态生成叠加型Pose,ApplyAdditive的反向操作,输出
为两个输入Pose的差
空间转换(Convert Spaces Nodes)
空间转换会把输入的Pose中存储的每个骨骼的变换信息全部按新的空间进行重新计算,所以应该尽量减少这种节点的使用
状态机(State Machine)
状态机提供了图形化的方法来控制动画的切换,比如姿势切换、武器、跳跃等等。状态之间可以设置转换条件以及转换的融合相关数据
注意:频繁的快速转换不适合设置太长的转换融合
lnertialization惯性插值
- StandBlend
- Evaluate both SourcePose and TargetPose
- lnertialization
- Evaluate only TargetPose
IK(Inverse Kinematics)
Two Bone lK
- Foot IK
FABRIK(Foward and Backward Reaching Incerse Kinematics)
资源获取
- Epic商城
- adobe mixamo
学习
- 虚幻引擎官方文档