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

学习

  • 虚幻引擎官方文档

05 骨骼动画
https://enlight3n.github.io/2025/04/29/UE_TOC/05-骨骼动画/
作者
Enlight3n
发布于
2025年4月29日
许可协议