原文链接:https://blog.uwa4d.com/archives/Study_Unreal4_Animation_1.html
在之前的微信文章推送中,我们陆续为大家详细介绍了Unreal 4引擎的渲染模块(包括光照系统、材质系统、相机后处理和全局光照明),接下来我们将讲解动画模块的基础功能,并且将在后续文章中陆续推出该模块中进阶功能和特殊用途的介绍。
在此,特别感谢Unreal中国团队对于本篇文章中Unreal引擎相关内容的审核,并在UWA团队学习其引擎的道路上提供的大力支持。
动画模块是游戏引擎中的重要部分,是驱动游戏中场景、角色能够活灵活现地做出动作的基础。UWA将分三块内容介绍Unreal 4引擎中的动画模块功能,其中包括:基础功能、进阶功能以及特殊功能。在介绍基础和进阶功能时,UWA不仅会对其功能进行重点讲解,同时也将结合Unity引擎中的相似功能进行类比,以求让大家可以更明晰地掌握Unreal引擎动画模块的功能使用。在特殊功能中,UWA将对Unreal 4引擎中针对特殊用途提供的功能进行重点解读。
本节主要介绍Unreal 4引擎动画模块中提供的基础功能。其中主要包括以下几个部分:
Unreal 4引擎的动画模块提供了四个编辑器:蒙皮网格编辑器、骨骼编辑器、动画文件编辑器和动画蓝图编辑器。上述基础功能可以分别在这四个编辑器中完成。在接下来的内容中,本文将在介绍基础功能的同时对相应编辑器的使用进行介绍。
Unreal 4引擎支持从外部FBX文件中导入蒙皮网格和动画。导入操作可通过Content Browser->Import按钮完成。导入界面如下图所示:
蒙皮网格在Unreal 4引擎中被称为Skeletal Mesh,其相当于Unity引擎中的Skinned Mesh,表示了带有蒙皮信息的网格。双击Content Browser中的蒙皮网格文件,即可打开蒙皮网格编辑器,如下图所示:
Unreal 4引擎中的骨骼文件被称为Skeleton Asset,其相当于Unity引擎中的Avatar文件。双击Content Browser中的Skeleton Asset文件即可打开该文件,如下图所示:
在Unity引擎中,查看骨骼信息的方式是将其拖入场景,即可在左边Hierarchy页面中看到骨骼信息,如下图所示。需要注意的是,FBX模型不要开启Optimize GameObject选项。
在Unity引擎中,通过对Humanoid类型动画网格的骨骼进行映射也可以支持动画重定向。但是Unity中的动画重定向只能支持骨骼长度相近的网格,对于骨骼相差较大的网格会出现穿插或者分离的现象。Unreal 4引擎提供了该问题的解决方案,我们将在后续文章的动画重定向一节中进行介绍。
Unreal 4引擎中的动画文件被称为Animation Sequence,其相当于Unity引擎中的Animation Clip。双击Content Browser中的Animation Sequence文件即可打开该文件,如下图所示:
Animation Curve以及Animation Layers Track的功能类似于Unity中创建Animation Clip的功能。在Unity中也可以通过对蒙皮网格创建Animation Clip来修改其材质以及单个骨骼的Transform,如下图所示:
在引擎中播放动画需要处理动画逻辑。Unreal 4引擎提供了动画专用的蓝图资源:Animation Blueprint。在Animation Blueprint中包含两种节点图:Event Graph和Anim Graph。两者分别用于提供动画数值计算逻辑以及动画状态机的功能。本节将介绍Unreal 4引擎中动画逻辑的功能,主要包括:动画数值计算,动画状态机,动画事件以及动画逻辑重用。
4.1 动画数值计算
Event Graph节点图用于计算播放动画的逻辑中所需要的数值变量,并提供给后续状态机使用。其中,Event Blueprint Update Animation节点会在每帧被调用。通过该节点可以在动画播放期间每帧更新逻辑数值,如下图所示:
4.2 动画状态机
Anim Graph节点图用于计算角色最后输出的动作,其本质就是动画状态机,类似于Unity引擎中的Animator Controller资源,如下图所示:
双击Idle/Run节点可以看到其内容,如下图所示:
该节点图根据Speed变量的数值输出不同的移动动作。其最终结果是通过Blend Space将Idle、Walk和Run三个动作进行插值的计算结果。Blend Space动画融合将在本文接下来内容中进行介绍。
Unreal 4引擎动画状态机不仅提供了动画状态以及跳转的功能,也在动画跳转过程中提供了状态过渡时的动画融合的功能,其融合时间和融合方式可设置。并且,其还提供了Conduits节点作为分支节点,支持对同一类型多个状态的管理,如下图所示:
其中,Killed为Conduits节点,连接了不同死亡方式的动画节点。如果同一节点有多个跳转条件可能同时满足,通过设置跳转条件的优先级解决。
4.3 动画事件
动画逻辑中一个重要的功能就是动画事件,在Unreal 4引擎中被称为Animation Notification,其相当于Unity引擎中的Animation Event。其中一种动画事件是在动画状态跳转中触发,可在转移条件的详细属性中设置,如下图所示:
另一种动画事件是在动画播放过程中触发,可在动画编辑器中设置。在动画编辑器的Notifies轨道上点击右键即可添加动画该种事件,如下图所示:
此外,Unreal 4引擎还提供了Notify State功能。它分别在动画播放的开始、播放中、结束触发事件。在开始和结束时各触发一次,在播放中每帧触发一次。其添加方式如同Notification一样,如下图所示:
4.4 动画逻辑重用
对于行为相似的角色,有的时候只需要更换不同的动画文件,而不需要重新制作类似的逻辑,或者可重用部分逻辑。Unreal 4引擎提供了动画逻辑重用功能提高开发效率。接下来,本节将介绍两种动画逻辑重用的方式:Child Animation Blueprint和Sub Animation Blueprint Instance。
- Child Animation Blueprint 主要用于重用所有动画逻辑,仅替换不同的动画文件。其使用方式是通过原始Animation Blueprint创建Child Animation Blueprint,如下图所示:
然后,双击打开Child Animation Blueprint,并打开Asset Override Editor窗口,即可在Asset一列对应原动画位置的下拉菜单中选择新的动画文件,下图则显示了用BS_Jog替换原始Jog动画文件的设置过程。
- Sub Animation Blueprint Instance 主要用于将动画逻辑分解成模块,然后方便重用。其使用方式是:首先将通用功能动画逻辑编辑保存成Animation Blueprint,然后在需要引用的节点图中添加Sub Anim Instance节点,并指向通用功能Animation Blueprint,如下图所示:
其中,上图显示了在Animation Blueprint中引用Sub Anim Instance的过程。Sub Anim Instance的内部参数可以通过设置暴露给外部Animation Blueprint作为输入,如上图中的Effect Alpha参数。其设置在Sub Anim Instance节点的详细信息页面,如下图所示:
外部的Pose数据可通过在Sub Anim Instance节点图中添加Sub-Graph Input节点传入,如上图中的In Pose参数。其设置如下图所示:
其中,上图为上述例子中Sub Anim Instance的节点图。Sub Graph Input节点为其提供了外部输入Pose数据。
以上则为Unreal 4引擎动画模块的基础篇介绍,我们重点讲解了动画模块的主要编辑和视图模块,希望通过上述内容,可以让您对Unreal引擎的动画模块产生明晰的感性认识。下周,UWA将为您带来Unreal 4引擎更为高级的进阶功能,欢迎关注!