Notifications
Article
Facial AR Remote: Unity面部动作捕捉解决方案入门指南
Published 2 months ago
113
2
这篇文章就是对于直播内容的梳理,藉以帮助对于该项技术有兴趣的Unity开发者、3D美术、二次元行业从业人员,乃至网络主播进行入门。

什么是面部动作捕捉技术?

面部动作捕捉,英文全称是Facial Motion Capture,一般也称作表情捕捉。这是一门使用相机或激光扫描仪将人脸的动作电子转换为数字数据库过程的技术。然后,该数据库可用于产生用于电影,游戏或实时化身的CG(计算机图形)计算机动画。因为CG角色的运动源于真实人物的运动,所以与手动创建动画相比,它产生更逼真和细微的计算机角色动画。说到这项技术就自然而然想到一个非常经典的角色,《指环王》中的格鲁,这个栩栩如生的角色深入人心,它双重性格交替间疯癫、变态和欲望的复杂性格则要完全归功于安迪·瑟金斯(Andy Serkis)。
安迪·瑟金斯以一人之力,开拓了表演艺术和电影技法的一片新天地。在他之前,动作捕捉只是个纯技术工种,是他通过咕噜、金刚、凯撒等一系列传神的角色演绎,将其变成了一种独特的艺术。瑟金斯始终认为,表演捕捉和真人演绎一样,关键是对角色心理的揣摩,其次才是通过动作和神情去表现。因此,安迪创造虚拟角色的途径,和“方法派”表演是一致的,这也许是他独步此领域的法宝。这也使得《指环王》与安迪双剑合璧,通过咕噜这个角色正式打开了面部动作捕捉的全新技术领域。
面部动作捕捉是一项跨领域软硬件高度结合的技术。这张图来自于Esben Plenge在2008年的关于面部动作捕捉技术的学术论文,从图中可以知道面部动作捕捉的pipeline大致可分为这么几个阶段:
  1. 立体注释工具采集阶段(将采集到的人物面部图像做出标记,比如眉毛、眼睛、鼻子等)
  2. 2D到3D的AAM统计模型构建阶段(AAM就是Active Appearance Models的简写,即将采集到的二维数据进行统计整理,构建三维模型)
  3. 2D到3D的AAM几何合成阶段(在数字空间中搭建完模型之后,将点与线连接起来,创建几何展现)
  4. 3D面部动画前端阶段(合成面部3D动画,准备与角色3D面部数据关联)
  5. 输出实际3D角色面部动画。
从瑟金斯经历动捕方面的《指环王》、《金刚》、《丁丁历险记》、《猩球崛起》等电影可以看出,这些都是大成本大制作的好莱坞大片,那些大厂有实力花费大量资金去进行技术积累和软硬件的开发,而这些是普通开发者或者小工作室难以企及的。
但是现在作为普通开发者的好机会来了。iPhone X的面部深度摄像头结合ARKit很好的解决了降低硬件成本的问题,而Unity Lab 研发人员开发出一套高性价比的面部动作捕捉解决方案(Facial AR Remote),通过两者的结合可以帮助开发者以比较经济的方式去实现演员表情捕捉。

Facial AR Remote搭建

Facial AR Remote项目是Unity Lab以开源形式提供在https://github.com/Unity-Technologies/facial-ar-remote,供开发者去下载使用的。正如其简述的内容,Facial AR Remote是让开发者可以通过iPhone X系列设备运行Unity直接进行面部捕捉blendshape动画的工具。(因为第二次直播时,Facial AR Remote版本已从之前的1.0升级到1.1,所以在文章中的一些设置会与第一次直播的有所不同)
(可以直接下载这个unitypackage)
项目的搭建主要分为两个部分:iOS客户端搭建和PC服务器端搭建。

iOS客户端搭建

准备内容:
  1. macOS操作系统的苹果电脑
  2. Unity 2018.2+
  3. Unity ARKit plugin
  4. facial-ar-remote.unitypackage
  5. Xcode 10
  6. iPhone X系列手机(iOS 11.3+)
  7. (可选)Apple Developer Program
注意:
  1. macOS、Apple Developer Program和Xcode 10是为保证可以创建能够在iPhone X设备上正常运行app
  2. 前面的facial-ar-remote-1.1.unitypackage已经包含Unity ARKit Plugin,如果需要单独下载Unity ARKit Plugin,可通过这个网址:https://bitbucket.org/Unity-Technologies/unity-arkit-plugin/downloads/ 或者Package Manager获取。
第一步:使用Unity 2018创建新工程项目。
如果使用的是Unity 2018.2+版本创建,默认会内置Textmesh Pro;如果使用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客户端部分基本就完成了。

PC服务器端搭建

准备内容:
  1. macOS或Windows 10操作系统
  2. Unity 2018.2+
  3. 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客户端的一致。
第七步:(测试)点击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搭建工作就已经完成了。

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 改动:
1. 默认使用 ARKit 2.0。
2. 使用 ARKit 1.5,需要在 Player Settings -> Other Settings -> Scripting Define Symbols,添加宏定义 ARKIT_1_5。
3. ClientGUI.cs 添加 iPhoneX 系列判别。
4. Client.scene 的 Canvas Scaler 调整
Facial AR Remote 1.1已知问题:
  1. Character Rig Controller 暂不支持 Humanoid 骨骼动画。
  2. 动画烘焙功能暂不支持 Humanoid 骨骼动画。
  3. 流源(Stream source)暂仅支持一个 Stream Reader。
  4. 某些 PC 上会出现 DNS 获取 IP 地址出错的情况。
关于Blendshape制作:
因为Facial AR Remote面部动作捕捉技术本质上,是基于iPhone X 深度摄像头以及ARKit的技术,所以如果制作可以正常使用的面部Blendshape,请参考Apple官方的网址:https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation
比如这个关于eyeBlinkLeft的介绍子页面:
Facial AR Remote的入门指南就先写到这里,欢迎广大开发者积极尝试这个工具,体验面部动作捕捉技术带来的乐趣。如果各位有其它疑问,欢迎发送邮件到jerrybao@unity.com,谢谢~
Jerry Bao 鲍健运
Product Evangelist - Programmer
8
Comments
杨锐
22 days ago
怎么动态录入数据导出Animation clip,静态操作有点多
0
shou
2 months ago
太棒了
0