原文链接: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引擎会为网格创建材质、物理以及骨骼文件。若选择导入动画,也会同时创建相应动画文件。
蒙皮网格在Unreal 4引擎中被称为Skeletal Mesh,其相当于Unity引擎中的Skinned Mesh,表示了带有蒙皮信息的网格。双击Content Browser中的蒙皮网格文件,即可打开蒙皮网格编辑器,如下图所示:
其中,左边区域(1区)是Skeletal Mesh的参数设置,右边区域(2区)是Morph Target(Blend Shape)以及预览场景设置。在Skeletal Mesh参数设置中,可以设置模型的材质、LOD、Clothing、骨骼、物理(Rigidbody)、Capsule Shadow等相关参数。其中,Clothing支持Nvidia的apex文件。骨骼文件即为下文中将介绍的Skeleton Asset。Capsule Shadow是Unreal 4引擎中Skeletal Mesh特有的软阴影。它使用形状不同的Capsule对Mesh进行近似表示,在渲染阴影时则使用该近似表示进行渲染,从而节省了渲染开销。右上角区域(3区)显示了与当面Skeletal Mesh相关的文件,点击即可快速打开相关文件。
二、骨骼文件
Unreal 4引擎中的骨骼文件被称为Skeleton Asset,其相当于Unity引擎中的Avatar文件。双击Content Browser中的Skeleton Asset文件即可打开该文件,如下图所示:
其中,左边区域(1区)显示了当前Skeletal Mesh的骨骼信息,可以选中其中某一骨骼进行编辑。同时,还可进行Retargeting的设置。右上角区域(2区)显示了选中骨骼的详细信息以及预览场景设置。在骨骼详细信息中可以设置其Transform和Name参数。右下角区域(3区)显示了动画事件和Animation Curve。其中,Animation Curve可以用于在动画过程中修改模型材质以及修改Morph Target曲线。Animation Curve的具体修改过程需要在动画编辑器中完成,此处只提供了预览。
在Unity引擎中,查看骨骼信息的方式是将其拖入场景,即可在左边Hierarchy页面中看到骨骼信息,如下图所示。需要注意的是,FBX模型不要开启Optimize GameObject选项。
在Unreal 4引擎中,共用Skeleton Asset的网格可以共享动画文件,即动画重定向(Animation Retargeting)。但要共享Skeleton Asset需要满足一定条件,即两个网格中的骨骼命名顺序要保持一致,如下图所示:
其中,骨骼(1,2,3)与骨骼(1,2,3,4)可以共用Skeleton Asset,但是与骨骼(1,3,2)无法共用。
在Unity引擎中,通过对Humanoid类型动画网格的骨骼进行映射也可以支持动画重定向。但是Unity中的动画重定向只能支持骨骼长度相近的网格,对于骨骼相差较大的网格会出现穿插或者分离的现象。Unreal 4引擎提供了该问题的解决方案,我们将在后续文章的动画重定向一节中进行介绍。
三、动画文件
Unreal 4引擎中的动画文件被称为Animation Sequence,其相当于Unity引擎中的Animation Clip。双击Content Browser中的Animation Sequence文件即可打开该文件,如下图所示:
其中,左边区域(1区)显示了动画文件的相关参数和骨骼结构信息。右边区域(2区)的上半部分显示了选中骨骼的参数以及预览场景设置,下半部分显示了该模型的动画文件列表。下部区域(3区)显示了动画事件、Animation Curve以及Animation Layers Track。其中,Animation Layers Track支持对动画中单个骨骼的Transform进行修改,从而生成新的动画序列。
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节点会在每帧被调用。通过该节点可以在动画播放期间每帧更新逻辑数值,如下图所示:
其中,该节点图每帧计算了两个数值:IsInAir和Speed。IsInAir用于表示角色目前是否在空中,Speed表示当前角色的速度。IsInAir可以用于在空中切换角色动画,而Speed则可用于切换角色Idle,Walk以及Run等动画。
4.2 动画状态机
Anim Graph节点图用于计算角色最后输出的动作,其本质就是动画状态机,类似于Unity引擎中的Animator Controller资源,如下图所示:
其中,该节点图包含了一个状态名字为Default的状态机,并且将状态机计算的角色Pose作为最终结果。双击State Machine节点,可查看其内容,如下图所示:
其中,该节点图包含了默认起始节点Entry以及角色的移动以及跳跃等状态,在不同状态之间根据不同的条件进行跳转。这与Unity引擎中的Animator Controller动画状态机过渡颇为相似。由上图可知从移动节点跳转到起跳状态的判定条件即为IsInAir变量值,该数值由Event Graph每帧更新。
双击Idle/Run节点可以看到其内容,如下图所示:
该节点图根据Speed变量的数值输出不同的移动动作。其最终结果是通过Blend Space将Idle、Walk和Run三个动作进行插值的计算结果。Blend Space动画融合将在本文接下来内容中进行介绍。
Unreal 4引擎动画状态机不仅提供了动画状态以及跳转的功能,也在动画跳转过程中提供了状态过渡时的动画融合的功能,其融合时间和融合方式可设置。并且,其还提供了Conduits节点作为分支节点,支持对同一类型多个状态的管理,如下图所示:
上图取自Unreal 4官方网站
其中,Killed为Conduits节点,连接了不同死亡方式的动画节点。如果同一节点有多个跳转条件可能同时满足,通过设置跳转条件的优先级解决。
4.3 动画事件
动画逻辑中一个重要的功能就是动画事件,在Unreal 4引擎中被称为Animation Notification,其相当于Unity引擎中的Animation Event。其中一种动画事件是在动画状态跳转中触发,可在转移条件的详细属性中设置,如下图所示:
其中,Custom Blueprint Event可以在Event Graph中定义。
另一种动画事件是在动画播放过程中触发,可在动画编辑器中设置。在动画编辑器的Notifies轨道上点击右键即可添加动画该种事件,如下图所示:
其中,这种动画事件支持三种类型:Play Particle Effect,Play Sound以及Custom。其中,Play Particle Effect和Play Sound分别用于在动画播放过程中触发粒子系统和音频的播放。Custom则可自定义功能。
此外,Unreal 4引擎还提供了Notify State功能。它分别在动画播放的开始、播放中、结束触发事件。在开始和结束时各触发一次,在播放中每帧触发一次。其添加方式如同Notification一样,如下图所示:
其中,Notify State包含三种类型:Timed Particle Effect、Trail和Custom。Timed Particle Effect支持在动画播放中添加粒子特效,并且粒子特效的播放时长可设置。Trail支持在蒙皮网格上实现拖尾特效。Custom类型需要通过AnimNotifyState Blueprint实现。
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引擎更为高级的进阶功能,欢迎关注!