前段时间研究3D智能语音助手的时候,顺路研究了Unity中的角色表情,现在把实现方式分享给大家。

软件准备

本人当时做研究的时候使用的是以下软件:

FaceGen Modeller:用来制作角色头部模型的小工具,并且可以捏脸、制作各种表情,使用起来也很简单。


FaceGen Modellerfacegen.com

位移动画 android 位移动画表情图片_unity 角色 动画脚本


Maya:这个大家都很熟,就不用介绍了,主要用来制作Blend Shape(下面会讲)。

Unity:这个也不用多说了,最后就是在Unity中实现的效果。

实现逻辑

上边说到使用Maya主要用于制作Blend Shape,那么什么是Blend Shape呢?

Blend Shape是通过一个模型驱动另外一个模型,使顶点产生线性插值位移的动画,在其他游戏引擎中也被称为Morph Target。比如角色的表情动画是通过一系列不同表情的模型来驱动一个正常状态的模型,从而产生了表情动画,逻辑结构如下图:


位移动画 android 位移动画表情图片_弹出菜单_02


需要注意的是:所有的表情模型一定要基于同一个模型进行的制作。

模型制作流程

首先,在FaceGen Modeller中导出一个正常状态的头部模型,然后再导出一系列其它表情的头部模型(注意命好名字,不然会乱)。

模型准备好之后全部导入Maya,下面是我使用到的一部分模型(为了方便查看,特意将模型排开了),大家可以看到各种表情的模型都有。


位移动画 android 位移动画表情图片_unity 角色 动画脚本_03

表情模型

然后就是制作Blend Shape,先选中所有带表情的模型,最后选择正常状态的模型,点击菜单变形 > 融合变形 后的设置按钮弹出菜单。


位移动画 android 位移动画表情图片_anime.js 图片位移动画_04


在弹窗中设置好名称,其他设置默认就好。


位移动画 android 位移动画表情图片_unity 角色 动画脚本_05

设置弹窗

创建完Blend Shape之后,还可以继续查看这些表情,点击窗口 > 动画编辑器 > 形变编辑器,打开弹窗。


位移动画 android 位移动画表情图片_位移动画 android_06


在弹出的窗口中可以看到我们设置的所有表情模型,显示的名称就是模型在大纲中的名称,如果名称很乱,还可以在这个弹窗中继续修改。

拖动不同表情的权重/驱动者,就可以预览到模型的表情效果了。


位移动画 android 位移动画表情图片_弹出菜单_07

Blend Shape弹窗

检查过效果没有问题之后,就可以导出模型了。模型记住要导出fbx格式,并且导出的时候要确认Blend Shape对勾是选中状态。

导入Unity

导入Unity之后,如果模型中有Blend Shape信息,模型设置里会自动勾选Import Blend Shape。


位移动画 android 位移动画表情图片_Blend_08


把模型拖到场景中,在属性设置面板会看到多出来一栏Skinned Mesh Rendered,下面Blend Shape中的设置都是我们的表情。


位移动画 android 位移动画表情图片_unity 角色 动画脚本_09

表情设置

我们可以手动拖动滑动条测试效果,后续就需要写脚本控制这些表情动画了。

测试效果


位移动画 android 位移动画表情图片_Blend_10