由于本人最近一直在研究MetaHuman的blendShape,所以想要将了解到的知识整理汇总,也是为了学习到更多的知识,特此写了这篇文章,希望大家共同进步[ps.1]。注意,阅读本文需要掌握一定的Maya基础知识。

一、什么是blendShape

“blendShape”[ps.2],在一些DCC软件中也被称为“BlendShapes”,是一个变形器,“blend”有混合、融合之意,所以可以翻译为“融合形变变形器”[ps.3]。它能够使“基础网格”通过顶点插值运算的方式变形为“目标形状”,通常用于制作表情动画、辅助骨骼制作动画,在Maya中以节点形式存在。




FACS生成blendshapes参数 制作blendshape方法_技术美术


节点编辑器中的blendShape节点

二、创建blendShape

1、使用融合变形功能创建blendShape

在Maya中通常使用融合变形功能创建blendShape,该功能需要准备“基础网格”与“目标网格”。基础网格需要且只需要一个,用于形变为“目标形状”;目标网格至少需要一个,无上限,用于读取数据信息生成“目标形状”。

我通过复制网格“pSphere_base”,再移动顶点位置的方式制作了两个新网格,这两个新网格与原网格之间只有顶点位置存在差异,其他信息完全相同,我将这两个新网格命名为“pSphere_target1”与“pSphere_target2”。



FACS生成blendshapes参数 制作blendshape方法_FACS生成blendshapes参数_02


只存在顶点位置差异的三个网格

我希望能够使“pSphere_base”变形成“pSphere_target1”与“pSphere_target2”的形状,操作步骤如下:

  1. 选择目标网格,框选、点选都可以;
  2. 选择基础网格,该功能会自动将你最后一个选中的网格作为基础网格,所以想要改变网格“pSphere_base”的形状,需要最后选中“pSphere_base”;
  3. 点击“变形>>融合变形”,使用融合变形功能创建出的blendShape会自动与基础网格链接。


FACS生成blendshapes参数 制作blendshape方法_maya_03


使用融合变形功能创建blendShape

2、在形变编辑器中创建blendShape

在形变编辑器中也可以创建blendShape,并且只需准备基础网格即可。在“窗口>>动画编辑器>>形变编辑器”中打开形变编辑器,使用的网格为“pSphere_base”。步骤如下:

  1. 选中基础网格,不选中的话点击创建融合变形按钮不会有反应;
  2. 点击形变编辑器中的创建融合变形按钮,创建blendShape;
  3. 点击形变编辑器中的添加目标按钮,为该blendShape添加目标形状;
  4. 新创建的目标形状中的编辑按钮红色高亮,此时修改基础网格的顶点位置时修改的是目标形状中记录的顶点位置信息,模型本身的数据不会被修改。
  5. 在修改好网格形状后点击编辑按钮确认编辑,此时就成功创建好了一个blendShape和一个目标形状。


FACS生成blendshapes参数 制作blendshape方法_插值_04


在形变编辑器中创建blendShape

3、通过maya python创建blendShape

第一步,创建blendShape节点,为pSphere_base创建一个名为BSName的blendShape节点

# 创建blendShape节点

baseMesh = "pSphere_base"
BSName = "pSphere_base_blendShape"
cmds.blendShape(baseMesh, n=BSName, foc=True)

FACS生成blendshapes参数 制作blendshape方法_maya_05

在python编辑器中输入并运行代码,

选中pSphere_base后,可以看到pSphere_base_blendShape节点已经在输入一栏中

FACS生成blendshapes参数 制作blendshape方法_maya_06

第二步,将目标形状添加到blendShape节点中

# 将目标形状添加到blendShape节点中
targetMesh_1 = "pSphere_target1"
# 目标形状的ID,从0开始,如果要创建多个目标形状,则依次取整数
tarId = 0
# t=(基础模型,目标形状ID,目标模型,目标值)
cmds.blendShape(BSName, edit=True, t=(baseMesh, tarId, targetMesh_1, 1.0), origin = "local")

FACS生成blendshapes参数 制作blendshape方法_maya_07

 输入代码并运行,可以看到blendShape节点中多出了一个名叫pSphere_target1的目标形状

FACS生成blendshapes参数 制作blendshape方法_技术美术_08

4、其他创建blendShape的方法

除了上述两种方法外,还有通过openMaya创建blendShape,在节点编辑器中创建blendShape等进阶方法,在这就不多做赘述。

三、blendShape的工作原理

blendShape的主要工作原理:读取“目标形状”中的顶点索引与位置信息,依据权重让“基础网格”的各个顶点向“目标形状”做插值运算,使“基础网格”变形。

假设现在blendShape中包含三个目标形状,且对应权重分别为0.2、0.5、0.8,它对顶点A1做插值运算的公式如下,其中顶点B1、C1、D1对应三个目标形状中的A1点。



FACS生成blendshapes参数 制作blendshape方法_maya_09


blendShape对顶点A1做插值运算[ps.4]

顶点根据权重值获得了一个新坐标,网格上所有的顶点都如此操作,使网格体呈现出不同形状。

blendShape的优点就在于它可以灵活控制每一个顶点,且这种位移可以控制权重、可以叠加,又不会影响网格的原始数据。但是它也有缺点,通过公式可以看出顶点的位移是线性的,每一个顶点都在往目标位置做平移运动,因此blendShape很难做到有弧度的动画效果。

四、blendShape的应用场景

1、制作表情:



FACS生成blendshapes参数 制作blendshape方法_FACS生成blendshapes参数_10


为绊爱制作表情,详见参考文献一

2、配合蒙皮骨骼制作表情

MetaHuman让blendShape配合蒙皮骨骼制作动画表情,使动画效果更上一层楼。如在闭眼时修改眼皮形状,使上下眼皮更贴合;在张嘴时修改嘴唇形状,使嘴唇更饱满立体。并且支持在面捕时启用blendShape。