查看原文
其他

Facial AR Remote: Unity面部捕捉解决方案入门指南

Unity Unity官方平台 2019-05-07

去年Unity技术经理鲍健运进行了二次在线直播课程-Unity面部捕捉解决方案,经过二期的技术直播,相信不少开发者对于我们Unity官方的Facial AR Remote意犹未尽。


鲍老师通过本文对直播内容的梳理进行了梳理,藉以帮助对于该项技术有兴趣的Unity开发者、3D美术、二次元行业从业人员,乃至网络主播进行入门,赶紧来温习吧。


小提醒:直播课程的回放请拖动本文到底部访问。


什么是面部动作捕捉技术

面部动作捕捉,英文全称是Facial Motion Capture,一般也称作表情捕捉。这是一门使用相机或激光扫描仪将人脸的动作电子转换为数字数据库过程的技术。

 

转换后的数字数据库可用于产生用于电影,游戏或实时化身的CG计算机动画。因为CG角色的运动源于真实人物的运动,所以与手动创建动画相比,它产生更逼真和细微的计算机角色动画。

 

《指环王》中的格鲁是一个非常经典的电影角色,它栩栩如生深入人心,双重性格交替间疯癫、变态和欲望的复杂性格则要完全归功于安迪·瑟金斯。因为安迪·瑟金斯以一人之力,开拓了表演艺术和电影技法的一片新天地。

 

 

在此之前,动作捕捉只是一个纯技术工种,是安迪·瑟金斯通过咕噜、金刚、凯撒等一系列传神的角色演绎,将其变成了一种独特的艺术。


安迪·瑟金斯认为,表演捕捉和真人演绎一样,关键是对角色心理的揣摩,其次才是通过动作和神情去表现。因此安迪创造虚拟角色的途径,和“方法派”表演是一致的,这也许是他独步此领域的法宝。这也使得《指环王》与安迪双剑合璧,通过咕噜这个角色正式打开了面部动作捕捉的全新技术领域。



面部动作捕捉是一项跨领域软硬件高度结合的技术。上图来自于Esben Plenge在2008年的关于面部动作捕捉技术的学术论文,从图中可以知道面部动作捕捉的pipeline大致可分为这么几个阶段:

  1. 立体注释工具采集阶段:将采集到的人物面部图像做出标记,比如眉毛、眼睛、鼻子等。

  2. 2D到3D的AAM统计模型构建阶段:Active Appearance Models简称AAM,即将采集到的二维数据进行统计整理,构建三维模型。

  3. 2D到3D的AAM几何合成阶段:在数字空间中搭建完模型之后,将点与线连接起来,创建几何展现。

  4. 3D面部动画前端阶段:合成面部3D动画,准备与角色3D面部数据关联。

  5. 输出实际3D角色面部动画


安迪·瑟金斯经历动作捕捉方面的《指环王》、《金刚》、《丁丁历险记》、《猩球崛起》等电影可以看出,这些都是大成本制作的好莱坞大片,那些大厂有实力花费大量资金去进行技术积累和软硬件的开发,而这些是普通开发者或者小工作室难以企及的。



现在作为普通开发者的机会到来了,iPhone X的面部深度摄像头结合ARKit很好的解决了降低硬件成本的问题,而Unity Labs研发人员开发出一套高性价比的面部动作捕捉解决方案Facial AR Remote,通过二者的结合可以帮助开发者以比较经济的方式去实现演员表情捕捉。


Facial AR Remote简介

Facial AR Remote项目以开源形式提供在Github上,供开发者去下载使用的。Facial AR Remote让开发者通过iPhone X系列设备运行Unity直接进行面部捕捉Blendshape动画的工具。


下载Facial AR Remote:

https://github.com/Unity-Technologies/facial-ar-remote,


小提醒:第二次直播时,Facial AR Remote版本已从之前的1.0升级到1.1,在文章中的部分设置会与第一次直播的有所不同。


Facial AR Remote搭建


Facial AR Remote项目的搭建主要分为二个部分:iOS客户端搭建和PC服务器端搭建。


1

iOS客户端搭建

准备内容

  • MacOS操作系统的苹果电脑

  • Unity 2018.2及以上版本

  • Unity ARKit Plugin

  • Facial-ar-remote.unitypackage

  • Apple Developer Program

  • Xcode 10

  • iPhone X系列手机,操作系统必须为iOS 11.3及以上版本


注意事项

  • MacOS,Apple Developer Program和Xcode 10是为保证可以创建能够在iPhone X设备上正常运行App。

  • Facial-ar-remote-1.1.unitypackage已经包含Unity ARKit Plugin,如果需要单独下载Unity ARKit Plugin,请访问:

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


搭建步骤

第一步:使用Unity 2018创建新工程项目。



如果使用的是Unity 2018.2及以上版本创建,默认会内置Textmesh Pro;如果使用Unity 2018.1版本创建,则需要通过Window -> Package Manager下载Textmesh Pro。

 

第二步:通过Assets -> Import Package -> Custom Package 将Facial-ar-remote包导入。

 

第三步:打开Build Settings,设置目标平台为iOS,并点击Switch Platform切换。

 

 

第四步:进入Edit -> Project  Settings -> Player -> Other Settings设置iOS相关参数。

 

 

摄像机使用时,显示描述。

 

 

因为有启用ARKit 2.0的需求,所以要勾选ARKit支持,最小iOS版本为11.3。

 

第五步:打开Client.scene,确认Stream Settings。

 

 

因为ARKit 2.0能额外支持“舌头”,即支持52个Blendshape,所以推荐使用ARKit 2.0的配置。

 

第六步:设置Unity ARKit Plugin -> ARKitSettings。


 

第七步:在Build Settings窗口,将Client.scene构建出Xcode工程。

 

 

第八步:使用Xcode 10打开 .xcodeproject文件,设置iOS开发相关设置,Build and Run到iPhone X系列设备上。

 

这样iOS客户端部分基本就完成了。


2

PC服务器端搭建

准备内容

  • MacOS或Windows 10操作系统

  • Unity 2018.2及以上版本

  • Facial-ar-remote.unitypackage


搭建步骤

第一步:为已有项目、新项目导入Textmesh Pro,或使用Unity 2018.2创建新工程。

 

第二步:通过Assets -> Import Package -> Custom Package将facial-ar-remote包导入。

 

第三步:(测试)打开SlothBlendShapes.scene。

 

 

第四步:(测试)确认Mac/PC与iPhone X处于同一网络中。建议:Mac/PC与iPhone X使用同一无线路由的同一网段中。

 

第五步:(测试)Windows系统,建议关闭防火墙设置。

 

 

第六步:(测试)确认Network Reader的Stream Settings与iOS客户端的一致。

 

 

由于之前iOS设置的是ARKit 2.0,这里也设置为ARKit 2.0。

 

第七步:(测试)点击Play按钮,启动服务器端,Console显示可用IP地址,即服务器端地址。

 

 

第八步:(测试)启动iPhone X上的Facial AR Remote Client 应用,确保Port和IP地址与Server一致。

 

 

第九步:(测试)点击APP的Connect按钮连接测试。



运用

测试成功就可以了解如何去运用了,这里会第二期直播的韩国小姐妹为例。

 

第一步:打开已经准备好的TouchGirl_Demo场景,导入facial-ar-remote。

 

 

第二步:从facial-ar-remote > Remote > Prefabs将StreamReader添加到场景。

 

 

第三步:为TouchGirl_Demo (prefab)添加Character Rig Controller。

 

 

第四步:展开TouchGirl_Demo 设置Character Rig Controller对应的Head,Left Eye和Right Eye。

 

 

TouchGirl游戏对象中,Reference以上的全部是模型及其相关材质,Reference里面全是骨骼,在Character Rig Controller中设置的主要都是骨骼。

 

第五步:Add Component -> Blend Shapes Controller。

 

 

第六步:设置Skinned Mesh Renderer的Size为7,将face、head、L_eye、R_eye、Uppe_Teeth、Down_Teeth 和tongueOut添加进去。

 

 

因为Blendshape是保存在Skinned Mesh Renderer中,所以需要将面部、眼睛、牙齿以及舌头所有相关的Skinned Mesh Renderer都添加到这个数组中,以便于这个Controller驱动Blendshape达到动画效果。

 

第七步:将TouchGirl_Demo设置到Stream Reader -> Character。

 

 

第八步:Blend Shapes Controller Override和Character Rig Controller Override设置为TouchGirl_Demo,Head Bone Override设置为 Head,Camera Override设置为Main Camera。

  


第九步:回到TouchGirl_Demo > Blend Shapes Controller,将Overrides > Size设置为52。

 

 

观察StreamReader > Network Stream > Stream Settings,使用的是Stream Settings ARKit2-0。如果使用的是ARKit1-5,Blend Shapes Controller > Overrides会只有51,缺少“舌头” 。

 

 

第十步:点击运行,使用iPhoneX Client端,输入服务器端的地址,点击Connect连接。

 

 

启动了“白眼”模式,Why?

 

原因是角色的眼睛“在看”错误的方向。骨骼的朝向是与手机摄像头观察成镜像关系。通过TouchGirl_Demo -> Character Rig Controller -> Eye Settings当Z为负值时,校正。

 

 

重新运行服务器端,连接客户端测试。

 

 

现在,Facial AR Remote搭建工作就已经完成了。


数据流录制播放与动画烘焙

面部动作捕捉可以实时反馈到3D角色上,Facial AR Remote可以将这些捕捉数据录制为Stream Buffer,作本地播放还原,还可以将数据烘焙为Animation Clip,这样能够帮助开发者将这些动画数据放到别的项目中还原,例如合成到二次元项目视频制作。

 

依旧以韩国小姐姐项目为例,讲解如何实现数据流录制,播放与动画烘焙。

 

第一步:在Project -> Create -> Folder,创建文件夹,重命名Settings。

 

第二步:通过顶层菜单Assets -> Create -> Facial Remote -> Playback Data,重命名 PlaybackData_TouchGirl。

 

 

第三步:设置StreamReader -> Playback Stream -> Playback Data为 Playback_TouchGirl。

 

 

第四步:在Game视图取消Maxmize On Play,运行服务器端,连接客户端。

 

第五步:(录制)点击Stream Reader > Remote录制键进行动画录制。



确认面部动作捕捉完毕后,再次点击“录制”按钮,结束录制。

 

第六步:(播放)在服务器端与客户端正常连接状态,点击Play Stream选择已经录制好的数据流,点击播放按钮进行数据流的播放。

 

 

数据流动画数据都以时间戳为前缀保存在Playback_TouchGirl回放配置文件里。

 

 

第七步:在Editor非Play模式下,在Project > Create > Folder,创建文件夹,重命名Animations。

 

第八步:(烘焙)点击Play Stream选择已经录制好的流,点击Bake Animation Clip,保存到新建的Animations文件夹。

 

 

如果需要查看,可以将角色直接拖到Animation Clip的preview窗口中,点击播放观察。


Facial AR Remote注意事项

Facial AR Remote 1.1改动

  • 默认使用ARKit 2.0。

  • 使用ARKit 1.5,需要在Player Settings -> Other Settings -> Scripting Define Symbols,添加宏定义ARKIT_1_5。

  • ClientGUI.cs添加iPhoneX系列判别。



  • Client.scene的Canvas Scaler调整

 


Facial AR Remote 1.1已知问题

  • Character Rig Controller暂不支持Humanoid骨骼动画。

  • 动画烘焙功能暂不支持Humanoid骨骼动画。

  • 流源(Stream source)暂仅支持一个Stream Reader。

  • 某些PC上会出现DNS获取IP地址出错的情况。


关于Blendshape制作

Facial AR Remote面部动作捕捉技术本质上,是基于iPhone X 深度摄像头以及ARKit的技术,所以如果制作可以正常使用的面部Blendshape,请参考Apple官方的网址:

https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation  


温习直播课程

第一期

Unity面部捕捉解决方案(第一期)主要内容分成Unity技术实现和3D模型创作二个主要部分。



结语

Facial AR Remote的入门指南就先写到这里,欢迎广大开发者积极尝试这个工具,体验面部动作捕捉技术带来的乐趣。

 

更多Unity技术内容分享,尽在Unity官方中文论坛(UnityChina.cn)!


小编语:这篇文章是春节前最后一篇技术文章,祝大家:新春快乐,诸事顺意。

 

推荐阅读

官方活动

Unite Shanghai 2019暖冬特惠票最后2天销售

2019年5月10日-12日上海,Unite大会强势回归。 暖冬特惠票正式开售,购票即获指定Asset Store资源商店精品21款资源的5折优惠券。[了解详情...

购票链接:

http://UniteShanghai2019.bagevent.com


Unite 2019 | Training Day开发者训练营课程曝光

5月10日将举行二场最受开发者欢迎的Training Day开发者训练营活动,了解训练营的精彩课程。

购票地址:Unite2019.csdn.net


点击“阅读原文”访问Unity官方中文论坛

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存