# 前言

国庆将虚幻 5 C++ 基础又研究了一通,今天是最后一天了。
本来是想找找 Lyra C++ 相关东西看看有没有比较好的教程的,结果搜到一个虚幻官方很早以前就发的一个 Lyra 动画系统的直播介绍视频,看了下介绍似乎还不错。
特别是提到适用于不同情况下的动画 Retarging 操作,感觉正缺点这方面的知识。
于是今天就花了一天跟着看了一遍,操作了一遍,在此记录一下。

# 情况一

  • 同样的骨架资源
  • 同样的参考姿势 (基础骨骼和层级)
  • 同样的比例参数:例如角色高矮相同

不需要重定向,可直接应用动画播放

# 情况二

  • 同样的骨架资源
  • 同样的参考姿势 (基础骨骼和层级)
  • 不同的比例参数:例如角色高矮不同、肩宽、腿长 等有差异

需要一些简单的重定向,确保动画播放不至于拉伸、挤压:

# 情况三

  • 不同的骨架资源
  • 同样的参考姿势 (基础骨骼和层级)
  • (可能) 额外的骨骼

这应该是最常见的情况,操作方式主要有两种:

  • 从网格体复制姿势 (Copy Pose From Mesh)
  • 使用兼容骨骼 (UE5 新功能)

# Copy Pose From Mesh

  • 模块化角色的基础,适合具有额外骨骼角色,导入资源时,它们被导入自身独有的骨骼资源中
  • 该选项位于动画蓝图 (ABP) 中,属于一个节点

# 原理

  • 其中源骨骼运行正常基础动画:走路、奔跑、跳跃 等
  • 额外骨骼 (马尾辫、背包、装饰品 等) 则由分离后作为子级驱动

# 兼容骨架

  • 原理与 Copy Pose From Mesh 类似,都是首先得有相同的骨架,但可能具有额外的骨骼
  • 即:虽然骨架资源不同,但它们拥有同样的基础骨骼和层级

从 Window->AssetDetail 打开:

在没设置兼容骨架之前,下方 AssetBrwser 是空的,设置之后重新打开,就会发现会显示出兼容骨骼的动画。
注:兼容骨架是个数组,因此可以放置多个骨架,以适配多个骨架的动画资源

# 情况四

最复杂的情况是:

  • 不同的骨架资源
  • 不同的骨骼层级
  • 不同的参考姿势
  • 有额外的骨骼 / 缺失的骨骼

为了尽可能复用动画资源
操作方式:

  • IK 重定向 (IK Retarging),也是属于 UE5 新功能

# Retarget Pose From Mesh

  • 该选项位于动画蓝图 (ABP) 中,属于一个节点
  • 设计的与 Copy Pose From Mesh 使用方式类似,而原理也类似,都是从源骨骼复制数据
  • 不同之处在于,这个选项不会对源骨骼作任何假设,因此需要我们告诉引擎如何将源骨骼与目标骨骼进行相互关联,该节点通过关联信息使用 IK Retarging 进行重定向

始终涉及三个资源:

  • 目标
  • 关联两者的 IK Retarging 资源

注:绑定完成后,除运行时动态进行计算,还可以离线生成新的动画以进行进一步优化

# 创建 IK Rig

  1. 创建 Animation->Retarging->IK Rig 资源
  2. 将需要修改的目标对象骨骼设置上去
  3. 选择需要重映射的『骨骼链』后创建重定向链


点击后会弹出几个弹窗,分别按照骨骼命名即可 (前臂、后腿之类的)
随后还需要依次设置:Spine、Neck、Head 等需要重定向的骨骼链
注意:创建的时候需要把对应的子骨骼也选中上!
效果如下:

选择对应骨骼会高亮显示。

  1. 选择 手、脚 创建 IK Goal 以便后续进行微调 (通常一个 FullBodyIK 就够了)
  2. 保持选中 IK Solver 状态,选中对应根骨骼,将其设置为 SetRootBoneFromSolver


此时就已经可以使用 IK Goal 进行调整了:

  1. 设置重定向动画的根 (Set Retarget Root),右键对应的根骨骼选择设置即可,随后可在 IK Retargeting 界面看到:

# 创建 IK Retargeter

创建 IK Retargeter

  • 然后 Source 指定为 UE5 的 Mannequin
  • Target 指定为刚才我们创建的 IK_Dog

此时在 ChainMapping 窗口可以看见,引擎已经自动应用了重映射 (字符串模糊匹配算法,所以结果不一定准确):

随后,编译默认的 T-Pose,确保两者尽量一致
选择一个动画后,即可预览效果:

注:虚线连接的圆圈是 IK 位置,设置 BlendToSource 可使其混合,设置到源动画同样的位置 (高度),还有静态偏移设置,用于调整步幅、匹配握抢姿势什么的。

# 应用

确认无误,就可以创建一个新的动画蓝图,添加 Retarget Pose From Mesh 节点,IK RetargeterAsset 选择刚才创建的 IK Retargeter 即可:

实际效果:

# BlueprintThreadSafeUpdateAnimation

  • 多线程执行

# 动态适配

动画节点:

  • OrientationWraping:方向适配
    • 调整脊椎、双脚,使角色动画匹配移动方向 (不旋转),避免滑步等,主要用于移动过程,Idle 时没什么用
    • 可以只在需要的状态中启用,且可以通过 Alpha 控制权重
    • 控制台命令:a.AnimNode.OrientationWraping.Enable
  • StrideWraping:步幅匹配
    • 使角色移动动画与其移动速度匹配 (有多种方式,例如调整播放速率,步幅撇配也 是一种)
    • 控制台命令:a.AnimNode.StrideWraping.Enable
  • DistanceMatchToTarget:距离匹配
    • 如果角色移动了 100 个单位,希望动画也移动 100 个单位
    • 例如角色坠落:距离地面 100 个单位,可以在动画中找到距离地面 100 个单位的关键帧并从此播放
    • 以角色实际移动距离为准,不管动画的时间跨度多少,通过调整动画播放速率使其一定匹配对应移动距离 (可能使改变动画播放速度比较大,可对最高播放速率做限制)
  • AdvanceTimeByDistanceMatching:距离匹配推动时间
  • SetPlayrateSpeed:设置播放速率匹配速度
  • MotionWraping:运动扭曲

情境动画系统

# 总结

各种尝试了下,总的来说,还是情况四提供的 IK Retarging 最靠谱,前三种情况都更适合有专门的动画师,以及能做到按照标准的素体骨骼制作动画才行。
而且要是新的动画要求或骨骼层级发生了改变,那么也没法兼容:个人尝试使用兼容骨架功能将商城一个 UE4 的人形资源适配到 UE5 的官方骨架上,直接就变形了
补正:简单动画重定向选项可以与兼容骨架配合使用,一定程度避免变形。
(可能这也是为什么虚幻会增加 IK Retarging 功能的原因之一,试用一下就知道,跟其它方式相比灵活性太强了!)

# 参考文档

  • [英文直播] 分析 Lyra 中的动画 (官方字幕)_哔哩哔哩_bilibili