NEXT R&D CENTER

NEWS.

Matt AI——演绎虚拟人的“喜怒哀乐”

2019-11-22

编者按:不仅从外表看起来仿若真人,而且为你笑而开心,为你哭而悲伤。虚拟人的数字世界和人类世界的鸿沟似乎正在慢慢缩小。未来,人类会和虚拟人“谈情说爱”吗?技术发展永无止境,这个问题留待未来回答。在这篇文章中NExT联合AI Lab分享虚拟人Matt AI的“情感”诞生之路。

 

11月20日,布里斯班当地时间下午4点,虚拟人Matt 和AI技术联手,亮相SIGGRAPH Asia 2019 Real-Time Live!舞台,完成了一次精彩的演绎。SIGGRAPH是计算机图形学领域最具影响力的会议,其中Real-Time Live!挑选并现场展示当年最具创意和技术实力的实时Demo,被标定为SIGGRAPH的必看环节。NExT和AI Lab的三位同学联手展示了虚拟人Matt在不同情绪下被多种语言驱动的实时Demo。

 

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可以设置全局头发段数,这会导致头发的面数超标。 

 

减面之前,Matt头发包含65万个三角面

 

为了解决这个问题,我们将头发分成不同区域,每个区域内的段数分别设置,这样就能大幅降低头发的面数,且不降低头发整体效果。

 

减面以后,只有35万个三角面

 

另外,我们采用了Hair CardsHair Curves结合分层建模的方案。

 

第一层Hair Cards(左)/ 第二层Curves(中)/ 两层模型叠加的效果(右)

 

为了不使头发看上去过于稀疏,避免头皮穿帮,头发的第一层用HairCards做基础造型,每个面片和头发的每一簇对应,保证与真实头发造型一致。第二层是头发的主要表现层,用hair curve 来制作一丝丝的头发。第二层做了三套UV ,分别是控制头发自身颜色变化的UV1 、控制头发之间颜色差异的UV2 、头发AO对应的UV3,如下图所示:

 

 

第二层头发材质opacity test,头发边缘会有锯齿状,所以最后加上一层半透的头发丝,以保证头发的边界不会产生明显的锯齿状,使头发看上去更柔和,下面是三层头发的渲染效果。

 

 

我们对Siren头发的散射效果也做了改进,实现了双边散射光照模型

 

Siren散射模型(左) / 双边散射模型(右)

 

针对皮肤渲染的性能问题,我们对SSS(Subsurface Scattering)算法做了性能优化,在不损失效果的前提下,将原来两个pass,优化到了一个。

 

2 Pass

1 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个小时、13339条语句的,包含语音、面部运动和身体运动的多模态训练数据集。输入样本为:从视频中提取的每一条音频数据和对应的情感标签,输出样本:为该音频数据对应的面部控制器运动序列和身体关节运动序列。下图是视频捕捉和驱动的示意图: 

 

演员表演的视频画面(左) / 虚拟人被驱动的结果(右)

 

下图为身体动作捕捉和驱动示意图:

 

演员表演的视频画面(左) / 虚拟人被驱动的结果(右)

 

有了数据之后,我们和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身体模型中每个关节的运动信息,具体的是每个关节的三个欧拉角数值。但这种端到端预测关节运动的方式,目前的结果还不是很理想,表现在头部运动幅度过小,手部运动和说话节奏匹配得不好。

 

我们分析目前结果不好的原因:

 

1)  在训练数据采集上。虽然我们要求演员尽量模仿新闻主播来朗读台本和做动作,但无法保证运动模式非常清晰。同时,由于retargeting到Matt的身体运动数据数量太大,我们并没有逐条进行手动清洗和修正,因此数据当中也存在噪声,这一定程度也会影响模型的训练。

2)  在模型设计上。与面部运动相关的语音特征和驱动身体运动的语音特征很大程度上并不相同,那么就需要设计新的子网络或者引入新的信息来有效提取语音数据中的特征,从而学习更加准确的声音-身体映射关系。关于这个问题,我们仍在继续探索中。

感谢腾讯AI Lab在Matt AI研发过程中的大力支持

 

 

 

CONTACT.