在UE4项目制作中,有时候我们会需要将多个角色共享面部表情动画,下面为大家介绍UE4中共享面部动画的方法。
导入基础骨架网格体,并创建被视为主骨架的骨架资源。导入的任何其他网格体应当拥有相同的骨骼层级和命名约定,以便共享骨骼资源。
接下来在DCC内部,烘焙姿势到FBX序列,并将该FBX导入到UE4中。这样将产生一个动画序列,其中包含处于最小/最大混合值的每一个曲线。
上图中,导入的动画序列包含所有曲线以及给定帧处的最大值。
导入了包含所有曲线数据的序列后,可以从该动画序列创建姿势资源 ,继而用来将动画曲线数据转换为角色的实际面部动画。
可以右键单击动画序列,并用快捷菜单根据它创建姿势资源。
在姿势资源内部,需要手动输入每个名称,或者复制粘贴剪贴板中存储的数据来定义姿势名称。
以下是58帧动画序列中识别的所有姿势列表,这个序列包含了我们导入的所有姿势:
然后将它们作为姿势资源中的姿势名称应用:
这时候你会在随着骨架资源一起存储的 动画曲线(Anim Curves) 窗口中看到这些曲线。
每一个使用主骨架的角色都会访问这些曲线,并用每个曲线中表示的不同值驱动自己的面部表情,同时姿势资源将所有曲线数据转换为角色采用的实际动画姿势。
将jaw_open_pose的默认值从0更改为1,这样让角色张开了嘴。
在姿势资源中输入姿势名称时,最好从动画曲线(Anim Curves) 窗口中删除不使用的曲线,以尽量减少要显示的不使用的曲线数量。
在下面的姿势资源中,可以看到所有的姿势名称,同时它们也会出现在动画曲线(Anim Curves)窗口中:
当我们将 Pose_0 更改为 l_eye 时,Pose_0 保持为动画曲线(Anim Curves)中的一条曲线,单击右键并选择 删除曲线(Delete Curve) 可以将它删除。
有了姿势资源后,需要为该角色创建动画蓝图来利用曲线驱动的动画,最后创建姿势资源(Pose Asset) 节点将曲线数据转换为角色可以使用的姿势。
如果将曲线驱动的动画直接插入到最终动画姿势,动画姿势就不会知道如何将曲线转换为姿势数据。这时就轮到姿势资源发挥作用了,它负责拦截动画,正确地将曲线转换为角色可以使用的实际姿势数据。
当有其他角色时,如果从该主动画蓝图为它们创建并分配子动画蓝图,可以使用每个角色的特有姿势资源数据覆盖此姿势资源。这样就可以实现角色的特定差量,确保比如尖叫等效果能够在各种比例上都看起来正确。
上图中我们有另一个角色在使用基于主蓝图的子动画蓝图。
在子动画蓝图中,我们覆盖了姿势资源以使用特定于该角色的资源,让我们可以使用差量来驱动特定于该角色的面部姿势,并且显示的动画来自于父代。
开始为角色引入面部动画时,除了曲线驱动的面部动画之外,通常需要一些由角色骨骼驱动的肢体动画。为了共享肢体动画,而不是通过曲线驱动面部动画,需要从面部动画移除任何骨骼轨道,仅留下曲线,或者使用动画修饰符来移除指定的骨骼轨道,并驱动面部曲线。
我们以下面的动画序列为例:
我们的动画序列包含所有曲线和这些曲线的键值,它们表示不同的面部姿势。但问题是曲线也是基于任何骨骼驱动的动画播放的,这样就会导致双重变形和不正确的结果。在这种情况下,需要移除这些骨骼变形,仅留下曲线。
可以从"资源(Asset)"菜单中的动画下面移除所有骨骼轨道:
还可以使用动画修饰符移除特定骨骼,但前提是您只想共享肢体动画,而不是面部的驱动曲线。需要有骨骼驱动的肢体动画,而不是曲线驱动的面部表情,此时我们可以选择使用动画修饰符。
这里,动画序列和指定的要移除的骨骼轨道(包括其子代)在应用修饰符后就完成了。
将父类设置为动画修饰符来创建蓝图,从而创建动画修饰符。
在导入的任何动画上,可以前往动画修饰符部分,应用您创建的动画修饰符来移除骨骼变形。
添加动画修饰符后,可以单击以应用修饰符。
对于仅保留曲线,您可以通过动画蓝图中的姿势资源运行动画,这样就会获得可以共享的曲线驱动姿势。将曲线驱动动画直接连接到最终动画姿势,但是没有使用这个姿势,因为它不知道如何处理曲线。然后我们将它连接到姿势资源以驱动这些曲线,让角色执行面部表情。
每个角色都使用子动画蓝图和它们分配到的姿势资源,因此现在可以使用相对差量来共享面部表情。由于我们没有骨骼变形,动画完全是由曲线驱动的,因此我们看不到双重变形,可以将它与任何其他骨骼驱动的动画数据(例如全身动画)相混合。