VPA在HMI中属于一个画龙点睛的板块,往往能给人眼前一亮的感觉。本篇内容将从VPA相关的动画制作展开,介绍VPA动画在Unreal引擎中的制作方法。
在了解骨骼动画的时候,总是免不了会听到“骨骼”、“蒙皮”、“权重”、“绑定”这几个词,那么他们分别是什么,之间有何联系,在生物动画的制作中分别起到什么作用?
骨骼的定义:骨骼是一组相互连接的刚性结构,用于模拟生物体的骨骼系统。骨骼通常由多个骨头组成,这些骨头之间通过关节相连。所有的骨骼动画都是通过关节的旋转来实现的。
蒙皮的定义:蒙皮是将3D模型的网格与骨骼绑定的过程。模型的网格顶点被分配给一个或多个骨骼,并且每个顶点会有一个权重值,这个权重值决定了该顶点在骨骼运动时受到的影响程度。如图1.1.2所示,图中黑白亮度表示各个顶点在人物右大臂骨骼上的权重,也就是右大臂在运动时对模型顶点的影响程度。
在了解完骨骼“骨骼”、“蒙皮”、“权重”、“绑定”四者的关系之后,我们也对生物动画制作的过程有了大概的认知:制作骨骼——绑定模型——整理权重——制作动画。
本篇以Maya的操作为例。其他软件的制作思路也是相同的,具体操作细节不同软件会有些许差异。
首先导入准备好的VPA模型到场景中。进入骨骼系统,找到骨骼创建工具,进入正视视图或者侧视视图开始制作骨骼。切记,不能在透视视图直接创建骨骼,不然骨骼会严重错位,如图1.2.3.
制作好手臂和脊椎的骨骼之后,需要将手臂的骨骼作为子集放置到第三节脊椎骨骼关节之下,这样才能正确的联动脊椎与骨骼之间的关系。
在创建好骨骼之后,需要将骨骼命好名,以便后续刷权重和蒙皮做区分。一般的命名规则都是以关节的部位名称加上编号做区分,如spine_01(脊椎第一部分)、head(头部)。当有左右之分时,使用前缀进行处理,如L_upArm(左上臂)。
我们可以通过dispaly—Animation—Joint Size调用关节尺寸设置,来调节关节的大小。
选择好骨骼与模型,再选择Skin—Bind Skin,即可将骨骼与模型绑定。
这个时候我们尝试给骨骼制作一组简单的动画,测试蒙皮后的动画效果如何。
我们可以看到模型跟着骨骼的动画产生了形变,说明骨骼与模型绑定成功了。但模型的形变很明显并不是我们想要的控制效果,所以接下来我们需要通过调整蒙皮的信息修改控制效果。
接下来选择Skin—Paint Skin Weights开始绘制蒙皮权重。
选择一个模型,我们可以看到在Tool Settings上有相应的骨骼名称,这些骨骼都是受到该网格体分配权重的,也就是骨骼的动画会影响到该网格体的形变。同时下面还有一个渐变色的颜色调节,从红色到蓝色渐变,对应的权重值为从1到0渐变。通过颜色的分布,可以快速识别哪些区域的权重分配不合理,方便调整权重的分配。
接下来我们需要做的就是整理模型的权重。先分析模型的各个部位分别需要受到哪些骨骼的影响,而哪些不用。分清楚之后我们先将不需要的模型全部涂黑,也就是权重归零。顶点上的权重在所有骨骼上的分配值加起来为1,所以我们优先将不需要的部分去零,如果有一些骨骼需要完全控制整个模型的,则直接涂满为1,比如例子中的头部模型就完全由骨骼Spine_03控制。
有时候处理好权重之后,如果没有将权重分配完,系统就会随机分配。比如头部的模型只接受一个骨骼控制0.7的权重,而其他的全部分配为0,那么系统就会自动将剩余0.3的权重随机分配。
一边处理权重可以一边通过1.3制作的动画来检查蒙皮的权重分配是否合理。处理权重并没有什么技巧,只需要耐心的对每一个模型单独分配,并多次通过动画检查即可。
在处理好蒙皮的权重之后,我们就可以直接在骨骼上制作动画。结合骨骼的旋转和动画曲线的调整,制作完整的VPA动画。
需要注意的是骨骼动画本质上是关节的旋转,虽然我们是制作VPA,但是关节的动画也要合理,同时避免一些穿模或者关节过度旋转的情况,如图1.5.2就是反面案例。
首先我们需要先将当前的工程文件另存一份,做备份处理方便后续调整动画。
然后将VPA的动画烘焙到每一个关键帧上。切换到动画板块,选中骨骼之后选择Key—Bake Simulation烘焙好每一帧的骨骼动画。
在烘焙完骨骼动画之后,选中骨骼可以看到每一帧都是关键帧,如图2.1.2所示,这表明已经烘焙成功了。
接下来选择骨骼动画与VPA模型,导出成fbx文件即可。切记在导出的时候一定要勾选上包括动画信息。
打开Unreal引擎,创建好文件夹后,直接将模型拖入Unreal引擎中,此时会弹出弹窗,我们需要勾选上骨骼网格体、导入网格体、导入骨骼层级中的网格体,同时导入内容类型选择几何体和蒙皮权重。
往下滚动,我们还需要勾选导入动画、导入骨骼层级中的网格体、导入骨骼轨道,在动画长度一项选择导出的时间即可。
可以看到我们导入的模型包含骨骼网格体、动画序列、物理资产以及骨骼信息。
我们打开动画序列,可以看到动画会自动循环播放,并且与Maya绑定的动画是一致的,说明动画导入成功。
动画导入成功后,我们需要借助关卡序列帧并结合UMG调用动画。
创建关卡序列,将VPA的骨骼网格体和关卡序列放入场景中,然后将VPA加入到关卡序列中去。
此时我们会发现关卡序列中并没有动画,需要在关卡序列中调用动画信息。我们在关卡序列中点击VPA轨道下的动画一行右侧的“+”,这时候就会跳出对应的动画序列,如图2.3.2所示。选中动画序列之后,动画就成功添加到关卡序列中去。
到这一步为止,我们就完成了将VPA添加到关卡序列的过程。接下来还需要结合之前所学的知识,在UMG中调用VPA的动画,也就是调用这个带有VPA动画的关卡序列。
在UMG中新建一个变量,类型为关卡序列actor,同时勾选【可编辑实例】、【生成时公开】,编译。
最后打开关卡蓝图,将场景中的关卡序列直接拖入到关卡蓝图中,将关卡序列连接到创建新控件节点,也就是调用UNG的节点,如图2.3.5所示,此时便完成了对关卡序列帧的调用。
本篇笔记详细的介绍了VPA的骨骼动画制作,并演示了在Unreal引擎中调用的方法。VPA的制作难度并不大,但需要有耐心去雕琢蒙皮的权重分配与动画细节。如果想了解更多关于Unreal HMI 3D解决方案的信息,欢迎邮件联系我们(mkt@eptcom.com)。