虚幻引擎学习之路:动画模块进阶篇(二)

虚幻引擎学习之路:动画模块进阶篇(二)

上周UWA介绍了Unreal 4引擎动画模块中的动画融合功能,今天我们将继续介绍Unreal 4引擎动画模块中的其他进阶功能,其中主要包括:动画重定向、逆向运动学和顶点动画。

在此,特别感谢Unreal中国团队对于本篇文章中Unreal引擎相关内容的审核,并在UWA团队学习其引擎的道路上提供的大力支持。


一、动画重定向

游戏引擎动画模块中的动画重定向(Animation Retargeting)可用于在不同模型上重用动画文件,该功能类似于Unity引擎中Humanoid模式下的Retargeting功能。Unreal 4引擎对使用相同Skeleton Asset的Skeletal Mesh支持动画重定向,并且支持不同尺寸角色动画的重定向,其细节把握非常到位,具体如下图所示:
请输入图片描述
请输入图片描述
上图显示了高、中、低三个不同的模型,并以骨骼长度中等模型的动画做重定向。在不做骨骼缩放处理的情况下直接做重定向使得较矮的模型被拉伸,较高的模型出现了穿插。

Unreal 4引擎对该问题提供了解决方案。打开两个Skeletal Mesh共用的Skeleton Asset,并勾选Show Retargeting Options,即可看到骨骼结构图右边显示骨骼Retargeting设置,如下图所示:
请输入图片描述
点开向下箭头会显示四个选项:Animation、Skeleton、Animation Scaled以及Animation Relative,如下图所示:
请输入图片描述
该选项表示了骨骼的Transform数据来源。其中,Animation选项表示Transform来自动画文件,Skeleton选项表示Transform来自骨骼文件(即静态骨骼),Animation Scaled表示Transform来自动画文件,但根据原始Skeletal Mesh中的骨骼长度进行缩放。对于一般情况,只需要将Root、IK和Weapon骨骼设置成Animation,Pelvis骨骼(一般为根节点)设置成Animation Scaled,其他骨骼均设置成Skeleton即可。设置完成后即可输出经过骨骼缩放后的动画重定向结果,如下图所示:
请输入图片描述
其中,黄色线表示动画文件原始模型的骨骼,白色线表示进行动画重定向的模型骨骼。

对于使用不同Skeleton Asset的Skeletal Mesh,Unreal 4引擎支持使用Rig文件将两者的骨骼进行映射,过程类似于Unity引擎中对Humanoid类型骨骼的模型进行标准人形骨骼映射。然后,即可支持动画重定向功能。有兴趣的读者可参考Unreal 4官方网站动画重定向教程【1】,进一步了解。


二、逆向运动学

游戏引擎中逆向运动学(Inverse Kinematics)可以弥补普通动画中不精确的情况,从而生成更加真实的角色动画。IK在游戏角色动画中有多种应用,其中比较常用的情况是使得角色双脚能贴合在高低不平的地面或是当角色触碰某些物品时能精确地碰到物品的位置,如下图所示:
请输入图片描述
其中,左图是没有使用IK的情况,在楼梯上由于角色两脚地面高低不一致,导致右脚穿插入楼梯。右图是使用了IK的情况,角色的右脚被抬起到与楼梯相同的高度。

Unreal 4和Unity引擎都支持IK,本节主要介绍Unreal 4引擎中IK的使用和设置。Unreal 4引擎中设置IK通常需要设置两个地方:Character的Blueprint和Animation Blueprint。在Character Blueprint中,需要处理获取Socket节点的位移信息,用于在Animation Blueprint中使用。Socket节点即为IK中需要触碰到指定位置的节点,例如:在本节例子中角色脚底可以设置成Socket节点,如下图所示:
请输入图片描述
请输入图片描述

其中,上图的Character Blueprint中,红框表示了每一帧Tick函数,蓝框表示计算角色右脚的Socket节点与地面的高度并记录在IKOffsetRightFoot变量中,绿框表示计算角色左脚的Socket节点与地面的高度并记录在IKOffsetLeftFoot变量中。然后,在Animation Blueprint的Event Graph中获取该变量值并设置为Effector Location,如下图所示:
请输入图片描述

其中,红色框表示利用IKOffsetRightFoot变量的值计算右脚Effector Location(脚底位置),蓝色框表示利用IKOffsetLeftFoot变量的值计算左脚Effector Location。

最后,在Animation Blueprint的Anim Graph中,使用Two Bone IK节点设置IK节点,如下图所示:
请输入图片描述
其中,红色框表示用Two Bone IK节点计算右脚的IK解,蓝色框表示Two Bone IK节点计算左脚的IK解。其中,Joint Target Location参数是为了限定膝盖节点的弯曲方向。

由此,IK的设置已完成。其中,主要步骤分为三步:
(1)计算获取Socket节点的位移;
(2)在Event Graph中设置该值为Effector Location;
(3)在Anim Graph中使用Two Bone IK节点设置IK骨骼。


三、顶点动画

Unreal 4与Unity引擎都支持顶点动画,它常被用于制作面部表情以及布料等无法用骨骼驱动的动画。在Unreal 4引擎中被称为Morph Target,在Unity引擎中被称为Blend Shape。在Unreal 4引擎中,Morph Target可以被叠加到Skeletal Mesh上,形成顶点动画。其使用通常需要在Maya等3D建模工具中把顶点动画制作完成,并导入Unreal 4编辑器。然后,通过Event Graph中的Set Morph Target节点进行设置,如下图所示:
请输入图片描述

其中,Target表示Skeletal Mesh,Morph Target Name表示该网格中的某一个Morph Target,Value表示Morph Target与 Skeletal Mesh的插值系数,其取值为[0, 1]。当取值为0时,显示原始网格形状,当取值为1时显示Morph Target形状,取值0~1显示插值结果。其形变效果如下图所示:
请输入图片描述
上图显示了角色左边眉头被挤压的Morph Target叠加到Skeletal Mesh上的结果。


四、Aim Offset

Aim Offset在Unreal 4引擎中是动画模块中的一个特殊功能,其主要用于制作射击游戏的瞄准动画。本节UWA将重点介绍其使用方法。

Aim Offset本质上是一个动画融合的工具,它的操作方式类似Blend Space。不同的是Aim Offset用于融合的是角色在不同方向瞄准的Pose,Blend Space则是将不同的动画进行融合。在使用Aim Offset之前需要先创建角色在不同方向的瞄准动作,如下图所示:
请输入图片描述

然后,基于角色骨骼创建Aim Offset资源,如下图所示:
请输入图片描述

双击Aim Offset资源并设置好Yaw和Pitch坐标轴,即可将之前创建好的瞄准Pose拖入其中对应的位置,如下图所示:
请输入图片描述
请输入图片描述

其中,上图显示了设置好上下左右各方向的瞄准Pose后的坐标轴。使用Aim Offset时可以直接将其拖入Anim Graph中并与Locomotion输出Pose融合,如下图所示:
请输入图片描述

转动角色到不同方向即可融合出不同的瞄准动画,如下图所示:
请输入图片描述


五、动画模块小结

Unreal 4引擎提供了丰富的动画融合、重定向、IK以及顶点动画等工具,方便制作出逼真的动画效果。同时,其提供的功能同样非常强大,且在细节处足见其深厚的技术功力。其中,Animation Montage提供了将动画自由切分、组合、循环以及跳转的功能;Blend Space以及Aim Offset提供了根据二维参数以及动画样本进行动画融合的功能;Post Process Animation Blueprint提供了对动画骨骼信息进行访问和使用的功能,并且配合AnimDymanic可以支持角色身上配件基于物体的动画;IK和Morph Target功能则添加了角色动画的精准度和细节。


参考文献

【1】 https://docs.unrealengine.com/latest/INT/Engine/Animation/AnimHowTo/Retargeting/index.html#retargetingusingthesameskeleton