用3dMax给lol人物模型制作表情动画并导入Unity
参考链接:Blend Shapes / Morph Targets for Facial Animation (Autodesk 3ds Max)
今天逛Youtube的时候Get到了一个新技能:那就是给人物制作表情动画,感觉超简单!(如果人物模型已经有骨骼绑定好面部蒙皮的话,打开auto再调整骨骼位置就行了)
制作Unity中可用的人物表情动画流程大致是:在3dMax中制作表情动画->导出成FBX文件->导入Unity
下面以制作微笑和眨眼睛的动画为例进行讲解
在3dMax中制作表情动画
首先导入人物模型,这里以亚索为例:
按住Shift,选择移动工具将当前选中的亚索模型向右拖拽生成一个新的模型用于制作左嘴角上扬的动画,取名为“Smile_L”:
按下F4显示出模型网格,选择修改->可编辑网络->顶点 选项,勾选“使用软选择”,不勾选“边距离”。选中左嘴角的一个顶点,调整“衰减”数值,使红蓝热度图的效果差不多如图所示。(“边距离”的值限制了最多可以影响到周围几个顶点,这里暂时用不到,所以不勾选;红蓝热度图显示了当前变形的区域,颜色越红表示影响越大)
然后将顶点向上拖拽,接着微调使上扬的嘴角形状看上去顺眼,也可以结合其它操作或修改其它部位的顶点使嘴型看上去正常
这样左边嘴角上扬的形状就准备好了,接着用类似的方式制作右边嘴角上扬的形状,取名为“Smile_R”。注意这里不能直接把左嘴角上扬的形状直接镜像当做右嘴角上扬的形状,因为网格上每个顶点都是有自己的编号的,顶点之间一一对应,所以需要复制一份原始模型再手工一步一步调整做出右嘴角上扬的形状(你可以将左嘴角上扬的形状镜像一份作为制作右嘴角上扬形状的参考,但不能直接当做右嘴角上扬的形状)
有了左嘴角上扬和右嘴角上扬的形状后我们就能制作微笑的表情动画了。选中原始模型为其添加变形器,方法为点击 修改->修改器列表->变形器。可以看到变形器的通道列表全为空,此时点击“加载多个目标”(也可以右键指定通道,然后从场景中拾取),选择制作出来的那两个形状的名字即可(注意原来的模型如果是可编辑网络,则新制作的模型也得是可编辑网络,是可编辑多边形的话同理)。然后通道列表里就新增加了“Smile_L”和“Smile_R”两个通道,将它们的数值都设置为100(最大值)就可以看到朝你微笑的亚索了。
觉得左右不对称,想要再修改的话就直接在对应的形状(Smile_L,Smile_R)上修改,然后在变形器中点击“重新加载所有变形目标”即可。
接下来制作眨眼表情动画。再复制一份原始形状,命名为“Close_L”用于制作左眼闭合的形状,这里得把新模型里的变形器给删掉。制作眼睛闭合的形状主要拖拽上眼皮的顶点,有眉毛的话还得修改眉毛的形状,为了拖拽的精确可控我把“边距离”给勾选上了,一直拖拽调整至顺眼为止。然后同理制作右眼闭合的形状,命名为“Close_R”。制作好后再原修改器里再次加载这两个新的形状就能完成闭眼动作了。
想要同时控制两边嘴角上扬,就将修改器通道列表里Smile_L和Smile_R的数值设置为100,其它通道值设置为0,然后按住“Shift”拖拽该对象,重命名为“Smile”,然后将其“转换为可编辑网格”(原模型为“可编辑多边形”则选择“转换为可编辑多边形”),再加载到变形器的通道列表里即可。(同时控制双眼闭合同理)
接下来就可以用原始模型制作动画了(注意,制作完动画后再修改表情形状,动画是不会自动更新的,就算重新加载所有变形目标也没有用,所以做动画前需测试形状是否OK)
将初始动画帧调至第0帧,选中动画帧下的“自动”按钮,开始自动记录关键帧。向右拖拽到某个空白帧,修改变形器通道列表的数值,自动模式就会自动在这个地方生成一个关键帧,与前一帧之间的空白帧会通过插值的方式生成连续动画。
在合理的位置设置睁眼闭眼,微笑不微笑关键帧
然后人物微笑并眨眼的动画就完成了!
导出成FBX文件
选中model对象,文件->导出->导出选定对象,类型选择FBX,然后保存即可
导入Unity
将FBX模型文件和贴图文件拖拽到Assets文件夹中(自己在Assets文件夹中新建文件夹也可以),选择导入的模型,将Inspector->Model->Geometry下的Blend shape Normals设置为 Import(unity默认是calculate,然而显示时会有鬼畜的光照问题)
再选择Inspector->Animation 将Loop Time勾上,这样动画就能循环播放了。
将模型拖拽至场景,觉得太暗的话可以Window->rendering->light settings,调高Environment lighting中的intensity multiple的值,使环境光更亮。
为模型添加一个animator组件,在Assets文件夹里新建一个AnimatorController并绑定到那个组件上。双击AnimatorController,将模型下的动画(这里是Take001)拖拽到Animation下。然后播放就能看到表情动画了:
可以看到skinned mesh renderer下有blendShapes,和3dMax我们在修改器中定义的通道名称一样,可以通过脚本调整blendShapes的数值
大功告成~
(变形器要放到蒙皮的上面,不然Unity中很可能没有blendShapes)