Matt AI——演绎虚拟人的“喜怒哀乐”
编者按:不仅从外表看起来仿若真人,而且为你笑而开心,为你哭而悲伤。虚拟人的数字世界和人类世界的鸿沟似乎正在慢慢缩小。未来,人类会和虚拟人“谈情说爱”吗?技术发展永无止境,这个问题留待未来回答。在这篇文章中NExT联合AI Lab分享虚拟人Matt AI的“情感”诞生之路。
Matt AI在SIGGRAPH现场(向右滑动)
在2018年GDC游戏开发者大会现场,NExT联合Epic,3Lateral等公司推出高保真虚拟人Siren,这成为当时实时虚拟人的行业标杆。随后我们尝试给Siren插上AI的“大脑”,亮相当年的SIGGRAPH Asia。今年,更进一步,NExT内部工作室(in-house)自主制作了男性虚拟人Matt,结合AI技术,将语音驱动的虚拟人推进到“情感表达”的新阶段。
在Siren AI项目中,我们试图为高保真虚拟人Siren加上AI的“大脑”,与人进行自然的交互。但试验过程中发现,我们虽然能够训练出精确的口型驱动模型,且在训练数据中含了虚拟人全脸的控制器,Siren的表情依然很“木讷”,在交互中,远没有动捕演员那么自然。
所以,今年我们为Matt AI项目设立了两个目标:
一、首先in-house自主完成一套高保真虚拟人的研发,品质不输Siren;
二、同时,让这个虚拟人能够在语音驱动时,具备“情感”表达的能力。
为了完成第一个目标,我们要在3Lateral扫描数据的基础上,独立进行LookDev的全流程开发;为了让虚拟人具备“情感”表达能力,我们需要建立一套精确的面部动捕流程,完成不同情感下的动作捕捉,用以训练不同情感下的语音驱动模型。下面分别介绍这两部分的工作。
渲染和动画是虚拟人制作的两项关键技术。首先要让静态人脸模型在虚拟LightStage不同的光照下和真实LightStage里拍摄的照片尽可能一致,然后通过迭代优化Rig逻辑,训练动捕跟踪和解算器,实现接近真实的表情动画。
渲染方面,我们的首要目标就是要使虚拟人和真人视觉上一模一样,电影行业里的LookDev就是实现这一目标的制作流程。下图对比展示的就是LookDev的结果。
虚拟人Matt(左边脸)
Matt本人(右边脸)
在3Lateral塞尔维亚的工作室,我们扫描了模特Matt本人,通过Photogrammetry,生成了Matt的几何模型。同时,通过不同表情下扫描的照片,我们得到各种贴图,比如:漫反射贴图、高光贴图、法线贴图等。尽管有了这些“物理正确”的数据,在UE里重现照片级真实的(Photorealistic)渲染效果依然是个挑战。大家都知道,Siren项目结束后,Epic将虚拟人的材质开放出来,但这并不能让新做一个虚拟人轻松达到Siren品质,原因在于扫描数据来自真实的相机和灯光,对于不同的皮肤,会有不同的视觉效果,而在渲染引擎中,针对不同的虚拟人,模拟真实的相机,光照以及皮肤不是一件一劳永逸的事。
为了减少变量,我们基本延用了Siren项目中的相机和灯光,以真实照片为标准,大胆地修改了3Lateral提供的原始贴图,使最终渲染效果逼近真人的照片。做出这个决定是一个纠结的过程,我们在项目早期认为扫描获得“物理正确”的贴图,但是在LookDev过程中无论怎么调节相机和灯光,也做不到和照片一样的结果。我们对比分析了原始照片和贴图,发现3L在贴图处理过程中有不少问题,于是决定自己修正贴图。下面有几个贴图修改的例子,基于法线贴图,我们修正的贴图增加了皮肤细节。
修改后
头发制作是另外一个挑战。Siren是黑色头发,马尾辫,相对好做,而Matt是棕色的短发,要做到照片级真实,相对困难。在电影行业,普遍使用XGen生成头发细丝,但随之也带来一个问题:面数太高。为了能实时渲染我们的角色,我们在确保头发效果尽可能不变的情况下,做了发丝的减面。XGen可以设置全局头发段数,这会导致头发的面数超标。
为了解决这个问题,我们将头发分成不同区域,每个区域内的段数分别设置,这样就能大幅降低头发的面数,且不降低头发整体效果。
减面以后,只有35万个三角面
第二层使用Curves
两层模型叠加的效果
为了不使头发看上去过于稀疏,避免头皮穿帮,头发的第一层用HairCards做基础造型,每个面片和头发的每一簇对应,保证与真实头发造型一致。第二层是头发的主要表现层,用hair curve 来制作一丝丝的头发。第二层做了三套UV ,分别是控制头发自身颜色变化的UV1 、控制头发之间颜色差异的UV2 、头发AO对应的UV3,如下图所示:
第二层头发材质opacity test,头发边缘会有锯齿状,所以最后加上一层半透的头发丝,以保证头发的边界不会产生明显的锯齿状,使头发看上去更柔和,下面是三层头发的渲染效果。
我们对Siren头发的散射效果也做了改进,实现了双边散射光照模型,并且做到实时。
针对皮肤渲染的性能问题,我们对SSS(Subsurface Scattering)算法做了性能优化,在不损失效果的前提下,将原来两个pass,优化到了一个。
2 Pass
Matt的动画绑定主要分为三个部分:脸部绑定,头发绑定和身体绑定。脸部绑定和Siren类似, 3Lateral基于表情扫描数据提供了一套Rig,但我们发现这套绑定不是想象中的那么完美,需要我们的绑定师和3Lateral经过多轮反馈迭代,一起把Rig提升到最终质量。
对于头发绑定,由于头发面数很高,按照传统的逐顶点去刷权重是不现实的,因此我们首先把骨骼权重刷在一个低模的多边形上,然后通过工具把权重自动映射到头发的顶点。实时驱动的时候,从动捕中获取控制器的值,转换成3Lateral API能接受的控制器的值,然后通过Rig Logic翻译成底层的blend shape的权重,以及骨骼的旋转和位移,最终驱动虚拟人脸,生成丰富的表情动画。在Matt AI Demo中,语音驱动的动画不涉及眼睛,因此眼睛部分我们用了Procedural Look-at,使虚拟人在说话头动时,眼睛始终看着Camera,看上去更真实。
在Siren AI项目中,我们实现了用声音实时驱动虚拟人,虽然我们可以准确的驱动口型,但是面部表情还是不够自然,虚拟人只是保持中立情绪说话,缺少了多样化的情绪,整体缺乏真实度和感染力。因此,我们想在Matt AI项目中联合AI Lab,进一步探索,是否可以在实时语音驱动的基础上,让虚拟人能表达出不同的“情感”。
第一步,我们需要构造高质量训练数据集,这是训练语音驱动模型的基础。和训练Siren AI类似,有了Matt的面部Rig之后,我们就可以通过改变这些控制器来驱动虚拟人的脸部。具体来说,Rig面板包括100多个控制器,每个控制器对应0-1范围的浮点数,100多个浮点数构成了动画帧。和Siren AI不同的是:Matt AI驱动模型的输入端加了情感标签,用于控制情感表达。
Matt AI训练过程的示意图
为了采集情绪数据,我们准备了不同类型的台本,要求演员用不同情绪准确、自然地去朗读这些台本。这些情绪包括高兴、难过、生气和中立等。在朗读过程中,我们同时使用面部捕捉和身体捕捉去采集数据。具体的,面捕方面,我们使用动捕头盔录制演员的面部运动视频(60fps),然后Rigger会使用这些数据,为该演员的每种情绪制作特定的解算器,将不同情绪的面部运动视频解算为虚拟人Matt对应的面部Rig控制器。这些控制器的数值,也就是后续语音驱动模型想要处理的目标。身体动捕方面,我们使用光学动捕设备,记录下演员头部、身体在内的全身动作,并将动捕数据重定向到虚拟人Matt上。
在保证了音频和视频数据在时间轴上严格对齐之后,我们构造了一个长约20个小时、13,339条语句的,包含语音、面部运动和身体运动的多模态训练数据集。输入样本为:从视频中提取的每一条音频数据和对应的情感标签,输出样本:为该音频数据对应的面部控制器运动序列和身体关节运动序列。下图是视频捕捉和驱动的示意图:
演员表演的视频画面(左)
虚拟人被驱动的结果(右)
下图为身体动作捕捉和驱动示意图:
有了数据之后,我们和AI Lab开始合作训练驱动模型。Matt AI的驱动目标是自动生成不同情绪的面部动画。为了让模型能够学习到语音和不同情绪面部动画的映射关系,不同于去年的Siren AI语音驱动模型,我们的Matt AI模型在输入上增加了一个情感标签来增强模型的处理能力,输入空间的维度增加可以使得一个模型能够处理多组映射关系。此外,因为我们的虚拟人Matt仍然有着很高的保真度,并且以60fps进行实时渲染,为了匹配这样精度的虚拟人,我们的语音驱动模型也必须具有较高的准确性和鲁棒性,否则语音驱动的Matt很容易陷入“恐怖谷”。
为了准确地学习语音和面部动画控制器之间的映射关系,Matt的驱动模型考虑了以下几方面:
1) 基于多人带噪声的语音数据集合语音识别模型提取了PPG(phonetic posterior grams)语音特征,该特征在一定程度上满足了说话者无关的特性,从而增加了语音驱动模型的鲁棒性,并使得任何人的声音都可以高质量驱动Matt;又由于我们的模型基于语义识别提取了因素级别的语音特征,因此除了中文之外,我们的语音驱动模型允许使用英语、日语、法语等不同语言来驱动虚拟人Matt,这大大增加了Matt AI的应用场景。
2) 采用双向LSTM模型,在进行控制器数值预测时考虑了输入语音的上下文环境,一定程度上解决了语音的Co-articulation效应,也让Matt的口型动画更加接近真人。
除了带情绪的面部运动,相比Siren AI,Matt AI的另外一个探索是尝试用语音驱动虚拟人的身体运动,包括头部和上下半身的关节。虽然身体的运动不如面部运动和声音有着很强的相关性,但我们认为在某些场景下,身体运动仍然存在和说话内容的相关性,比如播报新闻时抑扬顿挫的说话节奏和头部、手的运动模式。因此,我们模型在预测面部运动控制器的同时,也尝试了预测头部和上半身运动。处理目标为Matt身体模型中每个关节的运动信息,具体的是每个关节的三个欧拉角数值。但这种端到端预测关节运动的方式,目前的结果还不是很理想,表现在头部运动幅度过小,手部运动和说话节奏匹配得不好。
我们分析目前结果不好的原因:
感谢腾讯AI Lab在Matt AI研发过程中的大力支持