使用Unity创建属于你自己的表情动画

发表于2017-12-12
评论0 5.9k浏览

随着iPhone X的发布,苹果推广使用“Animojis”来发送动画消息。少为人所知的是,苹果公司已经为iPhone X发布了一个面部跟踪API,它允许你创建自己的动画表情符号。Unity已经支持了ARKit 面部跟踪技术,你可以使用这个API来创建属于你自己的表情动画,并且可以应用在游戏或自制视频中。



正如我们在《iPhoneX上的ARKit人脸跟踪》所提到的,ARKit面部跟踪返回你脸上各种表情的系数 。在前面的例子中,我们在屏幕上输出了系数。在现在描述的新示例中,我们在场景中使用一个虚拟面部设置来模拟我们的各种表情,从而创建相应的动画表情符号。


创建Blendshape

你所要创作的内容,一开始就要考虑到将面部跟踪返回的blendshape 系数作为参数传给虚拟脸部用于制作脸部动画。在示例中,我们创建了一个风格化的树獭的头部,它的脸被操纵以符合我们所拥有的每个不同系数的形状。然后我们在内容创建软件Maya中将所有不同的形状混合在一起。我们给每个blendshapes命名,这样它们就可以很容易的与SDK中返回的系数进行识别和匹配。最后我们将整个树獭头部导出为FBX文件,这样我们就可以导入到Unity中使用了。


在Mr.Sloth的例子中,使用了所有51个由面部跟踪提供给我们的blendshape的位置。我们可以选择较少数量的blendshapes,它们仍然能够传达我们虚拟脸部的特征。比如我们可以使用一个更风格化的脸,它只会对“睁眼”“开下巴”“闭嘴巴”这样的形状位置做出反应,而不是更细微的动作。

 

对于使用的每个blendshape系数,我们将创建一个blendshape,它将根据ARKit SDK中提供的参考形状来表达脸部的特殊部位的表情。

 

举个例子,对于“开下巴”,ARKit SDK为我们提供了参考图像。对于我们的树獭脸,我们创建了一个叫jawOpend的blendshape。如下图所示:左图是基础网格,右图是完全张开的下巴网格。


在Unity中进行设置

在Unity中,我们将上面描述的FBX文件拖拽到Assets资源文件夹中,导入并制作Unity网格,它有一个包含blendshapes列表的SkinnedMeshRenderer渲染器。然后我们在类似“FaceBlendshapeSloth”的场景中使用这个网格,这是Unity ARKit插件代码中的一个新的示例场景。

 

我们需要在场景中的ARFaceAnchorManager游戏对象上对树獭网格设置一个引用,它会跟踪你的脸,无论你如何移动头部,树獭的脸会跟着移动和旋转。

 

然后在有SkinnedMeshRenderer渲染器组件的游戏对象上,我们添加“BlendshapeDriver.cs”脚本文件,它会用脸部跟踪中获取的Blendshape系数,将每个值(乘以100将ARKit分数转换成Unity百分比)作为blenshape因子应用到SkinnedMeshRenderer渲染器的blendshapes列表上拥有相同名字的 blendshape上。

 

现在编译这个场景并安装到iPhone X上,你就能够看到树懒先生的头部随着你的头部移动,并且它的脸上会有与你相同的表情。你可以用iOS视频记录向你的朋友发送一个动画的树懒表情,或者在Unity游戏中使用树獭脸与你的对手慢慢的说话。


本文资源

  • ARKit插件及示例下载

    https://bitbucket.org/Unity-Technologies/unity-arkit-plugin 

  • ARKit面部跟踪返回情系数https://developer.apple.com/documentation/arkit/arfaceanchor.blendshapelocation


 小结

学习完本文,相信你已经了解使用Unity在iPhone X上建立一个虚拟人物,并控制它的面部表情动画是一件很容易的事情。你可以为朋友和家人录制动画消息和电影并与他们分享你的快乐。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引