Notifications
Article
使用Unity创建属于你自己的表情动画
Published 8 months ago
384
0
随着iPhone X的发布,苹果推广使用“Animojis”来发送动画消息,每个人都在炫耀他们新发现的卡拉OK动画技巧。少为人知的是,苹果公司已经为iPhone X发布了一个面部跟踪API,它允许你创建自己的动画表情符号。Unity已经支持了ARKit面部跟踪技术,你可以使用这个API来创建自己版本的动画消息,甚至可以运用在你游戏或者自制视频里的面部动画中。
正如在《iPhoneX上的ARKit人脸跟踪》所提到的,ARKit面部跟踪返回你脸上各种表情的系数 。在前面的例子中,我们在屏幕上输出了系数。在现在描述的新示例中,我们在场景中使用一个虚拟面部设置来模拟我们的各种表情,从而创建相应的动画表情符号。
创建Blendshape
你所要生成的内容,一开始就要考虑到将面部跟踪返回的blendshape 系数作为参数传给虚拟脸部用于制作脸部动画。在示例中,我们创建了一个风格化的树獭的头部,它的脸被操纵以符合我们所拥有的每个不同系数的形状。 然后我们在内容创建软件Maya中将所有不同的形状混合在一起。 我们给每个blendshapes命名,这样它们就可以很容易的与SDK中返回的系数进行识别和匹配。最后,我们将整个树獭头部导出为FBX文件,这样我们就可以导入到Unity中使用了。
在Mr.Sloth的例子中,我们使用了所有51个由面部跟踪提供给我们的blendshape的位置。我们可以选择较少数量的blendshapes,它们仍然能够传达我们虚拟脸部的特征。比如,我们可以使用一个更风格化的脸,它只会对“睁眼”“开下巴”“闭嘴巴”这样的形状位置做出反应,而不是更细微的动作。
对于我们使用的每个blendshape系数,我们将创建一个blendshape,它将根据ARTKit 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上建立一个虚拟人物,并控制它的面部表情动画是一件很容易的事情。你可以为朋友和家人录制动画消息和电影并与它们分享你的快乐。欢迎将你创作的作品发表在Unity Connect平台!

Unity China
315
Comments