Apple最新型号的iPhone都提供了强大的面部识别和运动追踪功能,可区分用户面部50多种特定肌肉的位置、拓扑结构和运动变化。如果你的iPhone搭载了深度摄像头和ARKit功能,你就能使用Epic Games提供的免费的 Live Link Face 应用程序,以便在虚幻引擎中控制复杂的3D角色面部动画,并在手机和引擎中进行实时录制。
本页将介绍如何使用Live Link Face应用程序让3D角色的面部作出实时表演动作,以及如何将基于此方案实现的面部捕捉系统用于成熟的制作拍摄环境中。
Live Link Face所依赖的ARKit功能正是 面部AR示例(Face AR Sample) 中用到的相同ARKit功能,你可以在Epic Games启动器的 学习(Learn) 选项卡中找到该示例。但是,需要为iOS编译面部AR样本,而这需要用到Mac和Apple开发人员帐户。借助Live Link Face应用程序,只要角色在虚幻引擎中设置得当,就能立即应用面部动画。
先决条件:
本页出现的知识点涉及虚幻引擎中的不同工具和不同功能。若你对以下这些知识点已经十分熟悉,那么你将会感到事半功倍:
你需要一台支持ARKit和深度API的iOS设备。
入门指南
请按照本部分中的说明设置虚幻引擎项目、连接Live Link Face应用程序,并将该应用程序记录的数据应用于3D角色。
请为项目启用以下插件:
Live Link
ARKit
ARKit面部支持(ARKit Face Support)
你需要准备一个已经设置好一组混合变形的角色,且这组混合变形需要与ARKit面部识别生成的面部混合变形相吻合。通常你需要在第三方绑定和动画工具(例如Autodesk Maya)中执行此操作,然后将角色导入虚幻引擎。
欲知角色需要支持的混合变形列表,请参见Apple ARKit文档。
若你没有现成的角色可用,你可以在Epic Games启动器的 学习(Learn) 选项卡中找到 脸部AR示例(Face AR Sample) ,然后使用该示例中提供的男孩。
角色的混合变形不必使用与ARKit混合变形完全相同的名称。可在 LiveLinkRemap 资产中创建自定义蓝图函数,将ARKit混合变形名称转译为角色使用的名称。欲知说明,请参见面部AR样本文档。但为了获得最佳效果,角色的面部混合变形须与ARKit混合变形覆盖相同的面部区域。
在虚幻引擎中使用一个包含 Live Link姿势(Live Link Pose) 节点的动画蓝图来设置角色。举例而言,在面部AR示例中,男孩所用的动画蓝图中:
之后,在收到手机发送的动画数据后,你将通过此节点将数据应用到角色上。
获取计算机的IP地址。需要IP地址才能连接Live Link Face应用程序。
你通常可以在电脑的控制面板或设置中找到IP地址。或者,在多数Windows平台上,你也可以使用 ipconfig 命令行工具来确定IP地址。
假如你的计算机已连接到因特网,并且拥有一个仅在你的网络中可见的本地IP地址和一个在因特网上公开的公共IP地址。如果是这样,则请你选择本地IP地址。本地IP地址通常以
10.
或192.168.
开头。你的计算机也可能为不同的适配器配置了多个IP地址。例如,你可能有一个有线以太网适配器和一个无线适配器,每个适配器都有自己的地址。请确保无论你的计算机使用哪个适配器,该适配器所用的IP地址都能让它与你的iPhone处于相同的网络中。
在Apple App Store上找到Epic Games发布的免费 Live Link Face 应用程序,然后安装在手机上。
将手机和计算机连接到同一无线网络;或使用以太网网线,通过Lightning以太网适配器将手机直接连接到计算机。
Live Link需要网络数据源,因此仅通过USB将手机连接到计算机并不够。
在iPhone上运行Live Link Face应用程序。你将进入主画面,并能开始新的录制。
点击查看大图。
一开始,你会看到摄像机画面被ARKit面部识别系统生成的三角形网格体覆盖。你可以关闭 预览网格体(Preview Mesh) 设置来禁用覆层,只查看你的面部,如上图所示。请参阅下面的Live Link Face应用功能按钮小节。
点击左上角的图标打开应用设置。至少需要进入 LiveLink 设置才能连接到计算机。
点击查看大图。
在LiveLink设置页面上,点击 添加目标(Add Target) ,然后输入计算机的IP地址。
如果你需要将动画广播到多个虚幻编辑器实例,你可以在这里输入多个IP地址。另请参阅下面的处理多用户小节。
如需详细了解可用于Live Link Face应用的其他所有设置,请参阅下面的小节。
在虚幻编辑器中,从主菜单选择 窗户(Window)> Live Link ,打开 Live Link 。现在你应该会看到你的设备列为主题。
在角色的动画图表中,找到 Live Link Pose 节点,将其主题设置为表示你的设备的主题。
编译(Compile) 并 保存(Save) 动画蓝图。
选择你的角色。在 细节(Details) 面板中,须启用 骨架网格体(Skeletal Mesh) 类别中的 在编辑器中更新动画(Update Animation in Editor) 设置。
返回Live Link Face,将手机的摄像头指向你的面部,直至应用识别你的面部并开始追踪你的面部移动。
此时,将看到虚幻编辑器中的角色开始移动面部,以实时匹配您的面部。
准备好录制表演时,点击Live Link Face应用中的 录制(Record) 按钮。这将开始在设备上录制表演,并在虚幻编辑器中启动镜头试拍录制器,开始在引擎中的角色上记录动画数据。
再次点击 录制(Record) 按钮可停止镜头试拍。
设置头部旋转
要使用Live Link Face应用中的数据将头部旋转应用于Actor,你首先需要在事件图表和动画图表中设置蓝图以驱动头部的关节。
头部旋转蓝图 - 事件图表
此蓝图放置在角色的动画蓝图中的事件图表中。它接受Live Link表演中的偏航角、翻滚角和俯仰角数据,并将其应用于角色的Rig中的相应骨骼。
点击查看大图。
右键点击蓝图并添加 Event Blueprint Update Animation 节点。这会确保头部位置在有移动的每帧都更新。
接下来,在"我的蓝图(My Blueprint)"面板中,创建名为 HeadRoll 、 HeadYaw 和 HeadPitch 的3个浮点变量。将每个变量拖入蓝图中并从菜单选择 设置(Set) 选项。
拖移Event Blueprint Update Animation节点并创建 Evaluate Live Link Frame 节点。这将提供来自Live Link源并将存储在你的浮点变量中的数据。
使用 主题(Subject) 下拉菜单,选择表示你的设备的主题。
打开 角色(Role) 下拉菜单并选择 LiveLinkBasicRole 。
右键点击附近的Evaluate Live Link Frame并创建三个 Get Property Value 节点。这些节点将用于从Live Link应用获取偏航角、翻滚角和俯仰角。使用每个节点上的 属性名称(Property Name) 框,将一个设置为 headYaw ,另一个设置为 headRoll ,最后一个设置为 headPitch 。
将Evaluate Live Link Frame的 有效帧(Valid Frame) 输出连接到 设置(Set) 变量,如上图所示。
最后,将每个Get Property Value节点的 值(Value) 输出连接到其对应Set variable节点上的浮点输入。
头部旋转蓝图 - 动画图表
利用从应用传入的头部和颈部旋转数据,现在可以将其应用于动画图表中的角色Rig:
点击查看大图。
上面显示的分段添加到动画图表末尾,紧接在Output Pose节点前面。
从 Output Pose 开始,拖移 结果(Result) 并创建 Component To Local 节点。
接下来,角色的骨架中将受旋转数据影响的每个头部和颈部骨骼都需要一个 Transform (Modify) Bone 节点。如果你要使用来自Face AR Sample项目的Kite Boy,就需要两个节点。
对于每个节点,在蓝图中点击它,并将"细节(Details)"面板中的"要修改的骨骼(Bone to Modify)"设置设为正确的骨骼名称。对于Kite Boy,分别是 neckRoot 和 head 。
将第一个节点的输出连接到下一个节点的 组件姿势(Component Pose) 输入,类似于上图中所看到的那样。
在每个Transform (Modify) Bone节点中,点击 平移空间(Translation Space) 选项的下拉菜单,将其更改为 骨骼空间(Bone Space) 。
在Transform (Modify) Bone节点的"细节(Details)"面板中,找到 旋转(Rotation) 分段,将 旋转模式(Rotation Mode) 更改为 添加到现有(Add to Existing) ,并将 旋转空间(Rotation Space) 选项更改为 骨骼空间(Bone Space) 。
现在采用你在事件图表中采集的偏航角、俯仰角和翻滚角数据,创建一个旋转器以更新头部和颈部骨骼的旋转。拖入之前创建的每个浮点变量的副本,并从菜单选择 获取(Get) 。
对于每个变量,拖移输出并创建 Float x Float 节点。将俯仰角乘以15,偏航角和翻滚角乘以-15。可能需要调整偏航角、俯仰角和翻滚角乘数,以实现预期结果。你可能需要尝试不同的正值和负值才能获得正确的旋转。
设置乘数后,就该创建旋转器了。右键点击蓝图面板,并创建 Make Rotator 节点。
将偏航角乘数的输出连接到Make Rotator上的 X(翻滚角)(X (Roll)) 输入。
将俯仰角乘数连接到 Z(偏航角)(Z (Yaw)) 。
最后,将翻滚角连接到"Y(俯仰角)(Y (Pitch))"。
将Make Rotator连接到每个Transform (Modify) Bone节点上的"旋转(Rotation)"输入。
创建 Live Link Pose 节点并将 Live Link主题名称(Live Link Subject Name) 设置为你的设备,完成序列。拖移输出并创建 Local to Component 节点。
将其输出连接到第一个Transform (Modify) Bone节点上的"组件姿势(Component Pose)"输入。
可能需要调整偏航角、俯仰角和翻滚角连接,以实现正确的旋转。检查旋转的最佳方式是,在序列完成后使用实时测试。角色应该随你一起移动。如果你把头向左倾斜,角色也应该向其左侧倾斜头部。
按"在编辑器中播放(Play in Editor)"并测试你的头部旋转设置。角色的头部现在应该旋转,以匹配Live Link应用所录制的内容。
Live Link Face应用功能按钮
Live Link Face应用的主屏幕提供了以下功能按钮。
点击查看大图。
1 |
打开"设置(Settings)"对话框。 |
2 |
切换是否将面部动画数据发送到所有LiveLink目标。高亮显示为绿色时,表示应用正在发送动画数据。 实时状态下,还会列出从应用程序设置中配置的时间码源读取的当前时间码值。 |
3 |
打开和关闭视频显示和面部追踪。 |
4 |
开始和停止录制新的镜头试拍。 |
5 |
打开以前由应用程序录制的镜头试拍列表。 |
6 |
显示当前场记板和镜头试拍,以及LiveLink主题名称。点击以重命名当前场记板或更改镜头试拍编号。 |
7 |
高亮显示为绿色时,表示ARKit面部捕获系统能够在当前摄像机视图中成功检测到面部。 |
Live Link Face应用设置
点击主屏幕左上方的图标,进入设置页面,可在其中配置应用程序的行为。
设置 |
说明 |
---|---|
LiveLink |
将应用程序配置为连接到运行虚幻引擎的计算机,以便其通过Live Link发送动画数据并控制录制文件。 |
时间码(Timecode) |
配置Live Link Face应用程序的时间码源。如需详细信息,请参阅下面的时间码源。 |
OSC |
配置Live Link Face应用程序和外部OSC控制器和设备之间的连接。如需详细信息,请参阅下面的通过OSC控制Live Link Face。 |
校准(Calibration) |
打开校准菜单。 |
流送头部旋转(Stream Head Rotation) |
确定应用程序是否通过Live Link连接发送来自ARKit的头部旋转(偏航角/俯仰角/翻滚角)数据。 如果你将手机安放在静止的三脚架上,并且想使用Live Link Face应用程序,随着你相对于手机上下左右移动头部,驱动虚拟头部的移动,此选项很适合。 如果你将Live Link Face应用程序与形体动作捕捉设置一起使用,你可能不需要此设置。相反,你通常会使用定制头盔将设备安装到头部,使其总是位于你面部正前方,并让形体动作捕捉系统录制你头部的上下左右移动。 |
预览网格体(Preview mesh) |
确定主屏幕是否使用ARKit面部识别系统生成的三角形网格体覆盖摄像机画面。 |
录制按钮 |
确定红色录制按钮在主屏幕上是否可见。 如果你要切换来自外部OSC设备的录制文件,你可能需要禁用此选项,以避免演员意外点击手机上的按钮。 |
Blendshape数据(Blendshape data) |
确定主屏幕是否显示ARKit面部识别系统为所有面部混合形状生成的数据值。此信息通常仅用于调试。 |
镜头试拍录制器(Take Recorder) |
确定主屏幕是否将显示当前场记板名称和镜头试拍编号或用于当前录制的文件名。 |
覆层(Overlay) |
确定Live Link Face应用程序主屏幕是始终可见,还是淡出,直至你与触摸屏交互为止。 使覆层淡出可避免演员在表演期间因看到捕捉的视频而分心。 |
视频质量(Video Quality) |
确定用于编码参考视频的JPEG压缩质量。质量越高,生成的图像越清晰,但是相应地会占用更多的设备存储空间。 |
存储(Storage) |
显示设备上的可用空间大小,以及Live Link Face正在使用的空间大小。也可使用此屏幕删除此前录制的镜头试拍。 |
重置(Reset) |
可将Live Link Face应用程序重置为出厂设置,撤消自安装该应用程序以来对上述设置所做的更改。 |
关于(About) |
显示有关该应用程序的法律信息。 |
原始面部录制文件
每当从Live Link Face应用程序启动新录制时,捕捉的内容都会以两个文件记录到设备:
.mov
文件,其中包含摄像机录制的参考视频。视频帧使用JPEG编码解码器压缩,但具有帧精度,且没有时间压缩。该文件包含音频和时间码,旨在供动画制作人员参考,他们可能需要在录制后处理动画表演。
一个
.csv
文件,其中包含录制期间ARKit捕获的原始动画数据。你可以从iOS设备导出此.csv文件,并将其导入虚幻引擎中,就像你在镜头试拍录制器中录制的一样。 阅读下方小节,了解如何从Live Link提取.csv录制文件,并用于驱动虚幻引擎中的面部动画。此文件中的原始数据也可以帮助开发人员围绕面部捕捉构建更多工具。
从iOS设备提取.CSV面部录制文件
有两种方法能够以 .csv
格式从iOS设备提取原始Live Link面部录制文件。最轻松的方法是,从Live Link应用程序本身中共享镜头试拍,但你还可以在iOS文件应用中找到 .csv
文件,并手动传输或共享。
在Live Link应用程序中
点击主屏幕左下角的 镜头试拍浏览器 图标。
点击 选择(Select) ,然后选择你想从设备提取的 镜头试拍(Takes) 。
点击 共享 图标,并使用内置的iOS共享功能之一,例如隔空投送或邮件。
隔空投送是从设备共享Live Link镜头试拍的最可靠选项。 提取大量镜头试拍或长镜头可能会对第三方服务(例如Google Drive)造成问题。 iOS共享功能对于集成的非Apple服务经常会出错。
iOS文件应用程序
iOS文件应用程序提供了多种备用方法来从iOS设备提取文件。 阅读Apple文档了解如何在iOS设备和计算机之间传输文件。
Live Link应用程序会将原始面部录制文件存储在iOS设备上的 Files > Browse 文件夹中名为 Live Link Face 的文件夹中。
打开 Live Link Face > 镜头试拍(takes) ,然后点击你想分享的镜头试拍的文件夹。原始 .csv
文件位于该文件夹中。
点击查看大图。
如需共享 .csv
文件,可以点击它,并在上下文菜单中选择共享选项之一。
在虚幻引擎中使用.CSV面部录制文件
此过程需要本文档顶部的入门小节中列出的所有三个插件,以及 LiveLinkFaceImporter 测试版插件。
转至 编辑(Edit) > 插件(Plugins) ,打开插件浏览器。搜索 LiveLinkFaceImporter 并启用该插件。重启编辑器,然后继续。
点击 内容浏览器(Content Browser) 中的 导入(Import) ,然后导入你想使用的Live Link
.csv
文件。将在内容浏览器中使用与
.csv
文件相同的名称创建新的 关卡序列(Level Sequence) 资产。双击此资产,在 Sequencer 中打开关卡序列。如果你点击轨道名称旁边的下拉插入符号,会看到来自所有不同面部混合形状的关键帧数据。
点击查看大图。
将.CSV应用于MetaHuman角色
要将关卡序列用于角色,请在Sequencer中将其打开,然后在配置了你的Live Link源的地方将其设置为主题。 关卡序列应该显示为选项。要播放MetaHuman上的动画,你可以选择MetaHuman蓝图,然后在 细节面板(Details Panel) 的 Live Link 分段中配置以下设置。
选中该框以启用 使用ARKit面部(Use ARKit Face) 。
在 ARKit面部主题(ARKit Face Subj) 下拉菜单中,选择匹配你导入的
.csv
的主题。
这些设置也可从MetaHuman蓝图的事件图表中访问。
点击查看大图。
现在,当你在Sequencer中播放关卡序列时,面部动画会绑定到你的MetaHuman角色。
校准
为了提高面部追踪质量,你可以校准Live Link Face应用,通过捕捉你的中性"静息"面部姿势的图像,更好地响应你面部的变化。
要启用校准,请在打开Live Link Face应用时打开左上角的 设置 图标,然后点击 校准(Calibration) 。现在你应该会看到校准菜单,其中你可以点击 启用(Enable) 按钮来启用该功能。
你还可以选择启用 倒计时(Countdown) 属性,这会在发起校准图像时启用三秒的定时器。
现在,当你返回到Live Link Face主屏幕时,屏幕右下角将显示新的 校准(Calibrate (+)) 按钮。点击此项将启用特殊的"校准模式",将 录制(Record) 按钮功能转换为校准捕捉。
要校准面部,请点击 校准(Calibrate) 按钮。接下来,面朝设备摄像头,确保面部中性、无表情,然后按 录制(Record) 按钮。将立即拍摄校准图像,如果在校准设置中启用了 倒计时(Countdown) ,将在三秒倒计时之后捕捉图像。
捕捉校准图像之后,你可以选择 保存(Save) 或 废弃(Discard) 以重试。如果保存,则再次点击 校准(Calibration) 按钮会显示 重新校准(Recalibrate) 的选项并捕捉新图像,或 删除(Remove) 校准。
录制模式和结果
每当从设备上的Live Link Face应用程序或通过Live Link Face应用程序的OSC界面启动录制时,表演将录制到手机,如上一小节所述。不必连接虚幻引擎实例,亦可以此方式录制。
从Live Link Face应用程序或通过OSC界面开始录制时,若通过Live Link连接到虚幻引擎的实例,则 还 将在虚幻引擎的所有连接实例上启动镜头试拍录制器。动画表演将同时记录在设备和计算机上的镜头试拍录制器中。
若通过Live Link连接到虚幻引擎的一个或多个实例,并且在虚幻编辑器界面中从镜头试拍录制器启动录制, 而不是 从设备或OSC界面启动录制,则表演 不会 保存到设备。仅记录在计算机上的镜头试拍录制器中。
处理多用户
在更复杂的现实制片中,可能有多个操作员同时在虚幻引擎中工作,使用多用户编辑在同一个虚拟世界中实时协作。在这种情况下,建议将Live Link Face应用程序配置为连接到所有操作员运行的 所有 虚幻引擎实例。该应用程序会将表演捕捉组播到所有引擎实例。这会确保所有操作员在上下文中看到传入的动画数据,同时延迟最低。
时间码源
在现实制片中,表演捕捉设置可能非常庞大,Live Link Face仅是其中一部分。可能需要同时记录其他内容:音频、实时视频、其他人体捕捉数据、摄像机跟踪数据等等。为了能够十分精确地同步这些单独的录制文件,你需要确保所有录制文件都嵌入一致的时间码值。
Live Link Face提供了时间码源的三个选项,可在设置面板中配置。
系统定时器(System Timer)
默认情况下,Live Link Face的时间码值基于设备的系统定时器。此定时器基于自上次系统重启以来的实际运算时间。这样提供的基础选项本身是精确的,但很难将此时间码与其他设备上的录制文件关联起来。
NTP服务器(NTP Server)
有一种方法可基于时间获取一致时间码,即依赖服务器通过网络时间协议(NTP)提供时间值。如果你选择此选项,默认服务器是 time.apple.com ,Apple将使用该服务器同步设备的当日时间。但是,若使用自定义NTP服务器,就像许多制片为暂存设备同步时间码的那样,可输入服务器名称和IP地址。
章鱼时码器(Tentacle Sync)
章鱼时码器是第三方硬件设备,允许设备通过蓝牙同步到舞台上的主时钟。这很可能是最专业的时间码选项;高端制片通常在拍摄期间依赖主时钟进行时间码同步。如需详细信息,请参阅章鱼时码器。
通过OSC控制Live Link Face
Live Link Face应用程序支持通过开放声音控制(OSC)协议实现双向通信。
你可以使用OSC设备远程控制Live Link Face。例如,可使用外部设备远程启动应用程序录制。
你还可以配置Live Link Face,以将其活动的通知发送到其他OSC设备。例如,只要该应用程序开始新的录制,就可以在其他设备上触发操作。
要设置OSC,请打开应用程序设置:
在 监听器(Listener) 分段中,你会看到设备的当前IP地址,以及Live Link Face应用程序正在监听传入OSC消息的端口。需OSC远程控制设备将命令发送到此IP地址和端口。
若要Live Link Face发送OSC命令控制另一个设备,请在 目标(Target) 分段中输入该设备的IP地址和端口。
Live Link Face应用程序支持以下OSC命令:
命令 |
说明 |
---|---|
|
将OSC发送目标设置为给定的IP地址和端口。该应用程序通过命令 |
|
为应用程序添加新的Live Link目标,以广播混合形状数据。 |
|
删除所有Live Link目标。 |
|
设置Live Link主题名称。 |
|
开始将数据流送到所有Live Link目标。 |
|
停止将数据流送到Live Link目标。 |
|
请求设备的电池电量。该应用程序通过 |
|
请求设备的热状态。该应用程序通过 |
|
将场记板设置为给定名称。 |
|
将镜头试拍编号设置为给定值。 |
|
打开视频和AR追踪。该应用程序通过命令 |
|
关闭视频和AR追踪。该应用程序通过命令 |
|
使用给定场记板和镜头试拍编号开始录制。该应用程序通过 |
|
停止录制。该应用程序通过 |
|
使用 |
|
打开视频显示。 |
|
关闭视频显示。追踪和录制可以并且仍将发生。 |
|
该应用程序在手机上变为活动状态时,会将此内容发送到OSC发送目标。即首次启动时,会进入前景,等等。 |
|
该应用程序在手机上变为非活动状态时,会将此内容发送到OSC发送目标。即停止时,发送到背景,等等。 |