随着AI技术的发展,数字人应用领域也越来越广泛,除了动画电影、游戏、广告这样数字人应用的传统领域,直播带货、客服、逝去亲人数字化复活等等诸多邻域也在大量尝试使用数字人。数字人不只是要建出来,更要像真人一样有表情、有动作,有丰富的人格特征,这样才能更好的与真人互动交流。
今天就说下数字人的表情生成机制--BlendShape。
再介绍BlendShape之前,先对数字人是什么做个介绍,这样才更好理解BlendShape。
1. 数字人
数字人说起来跟简单,就是人体的数字三维模型,是由做建模小伙伴在建模软件(例如:Maya、Blender)中完成的。
图1 数字人模型
数字人从几何构成上看就是点、线、面组成的。点是世界空间中的一些点(上图的数字人包含12853个顶点),将这些顶点连成线,然后线和线就会分隔出面,上图看到的是四边形面,常见的还有三角形面。有了点、线、面,一个数字人的模型就建立出来了。建立数字人的工作主要是建模的小伙伴完成的,现在还可以通过算法自动创建,高精度的模型还是要手工创建。
数字人由很多点构成的,每个点在世界坐标系下的坐标有(x、y、z)三个分量组成,那数字人就可以用一个向量来表示了:
(公式1)
其中,n是数字人顶点数量,上图数字人n=12853,就是一个包含38559个分量的向量。是不是特别简单,一个数字人用一个向量就表示出来了。
了解了数字人,下面就要介绍BlendShape。
2. BlendShape
人的表情非常丰富,能做出上千种表情。那对数字人来说表情是什么呢?其实就是脸上某些点在空间中发生了位移,比如嘴角的一些点向斜上方移动,从视觉效果上看数字人就带有了某种情绪。
经过很多前辈的探索和总结,数字人的表情系统可以这样设计:抽取制作出一些基础微表情(BlendShape),通过基础表情线性加权生成更多的复合表情。
目前常见的基础微表情大概50个左右(苹果公司ARKit提供了52个BlendShape的权重值)。制作人员需要在数字人上制作这些基础微表情(BlendShape)。
BlendShape制作
有了这些微表情,就可以组合出各种复合表情。
图3 复合表情制作
对于制作小伙伴来说到这里就可以了,但对于算法小伙伴和开发小伙伴还需要继续了解BlendShape里的数据是如何组织的。
数字人可以用一个向量表示。中立表情是数字人没有做任何微表情的状态,这个状态被认为是所有表情的0状态(图1就是处于中立表情的数字人),中立表情用公式表达成 。
BlendShape其实就是一个delta BlendShape,即各个表情与中立表情的差值 。
复合表情对应的生成公式就是:
(公式2)
其中, 是BlendShape的权重值,
就是BlendShape,m是BlendShape的个数。
3. 综合
制作好了BlendShape,做表情识别的时候其实就是通过各种算法求解对应的 ,这样就可以用公式2得到数字人的表情了。