# 前言
国庆将虚幻 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
- 创建 Animation->Retarging->IK Rig 资源
- 将需要修改的目标对象骨骼设置上去
- 选择需要重映射的『骨骼链』后创建重定向链
点击后会弹出几个弹窗,分别按照骨骼命名即可 (前臂、后腿之类的)
随后还需要依次设置:Spine、Neck、Head 等需要重定向的骨骼链
注意:创建的时候需要把对应的子骨骼也选中上!
效果如下:
选择对应骨骼会高亮显示。
- 选择 手、脚 创建 IK Goal 以便后续进行微调 (通常一个 FullBodyIK 就够了)
- 保持选中 IK Solver 状态,选中对应根骨骼,将其设置为 SetRootBoneFromSolver
此时就已经可以使用 IK Goal 进行调整了:
- 设置重定向动画的根 (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