肌肉
默认肌肉集由 Speech Graphics 团队建立,作为角色设置服务的一部分。但是,您可以在 SGX Studio 中对肌肉进行编辑。
Speech Graphics 动画由“肌肉动态”模型生成。该模型可以根据时间的推移,生成应有的肌肉激活状态。在这里,“肌肉”粗略地定义为一种可独立控制的变形模式,类似于面部动作编码系统中的“动作单元”概念。由于肌肉是基于生物学的基元,因此它们在很大程度上具有通用性和跨角色的相似性,从而可以通过一个通用的情绪模型实现。
每块肌肉都模拟了一块单独肌肉收缩的效果。肌肉可以是单方向的,也可以是双方向的;双方向的肌肉有两种相反的效果。
每块肌肉都具有以下特性:
随时间变化的收缩度,由范围为 [0, 1] 的参数表示,其中 0 表示完全放松,1 表示完全收缩。对于双方向性肌肉,范围为 [-1, 1]。
骨骼控制姿势定义了肌肉收缩对骨骼控制的变形效果。骨骼控制姿势使用骨骼控制的动画参数指定。对于双方向性肌肉,有正姿势和负姿势。
动态参数可帮助确定肌肉收缩或放松的速度。具体包括两个参数:收缩持续时间和倾向。
Speech Graphics具有肌肉动态行为算法,可以根据时间的推移,生成应有的肌肉收缩值。这些收缩值通过肌肉的变形定义转换为骨骼控制上的动画。
肌肉不是视位或表情
肌肉可用于生成语音和非嘴部情绪的动画。但请注意,肌肉不是视位或脸部表情。
视位是一组看起来相似的几个语音。例如,发音 /t/、/d/、/n/、/l/ 可组成一个视位,同样,/p/、/b/、/m/ 也可组成一个视位,因为这些发音组中的各个元素在视觉上极易混淆。在传统的脸部动画中,嘴型同步的实现方式是为每个视位使用设定一个目标姿势,并在连续的视位之间进行某种形式的插值。
Speech Graphics 不使用视位。虽然肌肉动态系统确实能产生复杂的语音姿势(与辅音和元音相对应),但这是通过独立肌肉的合作来实现发音目标。举例来说,要发出/t/的声音,不能光靠一个“影响所有解剖结构”的单一姿势,而是需要舌头肌肉、下颚肌肉和嘴唇肌肉分别做出各自的一套完整动作。
同样,非嘴部的脸部表情通常也涉及许多肌肉。例如,微笑可能由嘴角回缩加上各种脸颊和眼部动作组成,这些动作在真实的人脸上实际上是可以独立控制的。如果为这种表情或其他复杂的表情制作一块单一的肌肉,动画看起来就会不那么自然,因为从一个姿势移动到另一个姿势的方式并不符合物理上的可能性。请参阅情绪模式,了解如何通过肌肉组合构建非嘴部的脸部表情。
默认肌肉集
作为角色设置过程的一部分,您交付的角色控制文件中将包含一组已定义的默认肌肉。交付后,您可以在 SGX Studio 中进一步编辑肌肉(请参阅编辑肌肉)。
目前默认肌肉有 73 块。肌肉按解剖区域(眉毛、脸颊、下颚、嘴唇、舌头等)分组,目前解剖区域有 10 个。除了为肌肉分类提供方便的组织结构外,解剖区域的主要意义还在于它们带有默认的动态参数。例如,鉴于舌头的相对大小和移动距离,舌头的位移通常比头部的位移快得多,这些差异都反映在这两个区域的默认动态参数中。添加到每个区域的新肌肉会自动继承该区域的默认动态参数。
下面按解剖区域列出了默认肌肉。请注意,两侧肌肉中左侧和右侧版本的肌肉分别标记为 L 和 R。双方向性肌肉(具有负姿势和正姿势)标记为 [⇔]。青色的肌肉是受保护的肌肉,如下所述。
眉毛
眉毛向内 L
眉毛向内 R
眉毛下垂 L
眉毛下垂 R
眉毛上扬 L
眉毛上扬 R
眉毛向内
内眉角下垂 L
内眉角下垂 R
内眉角上扬
外眉角下垂 L
外眉角下垂 R
外眉角上扬 L
外眉角上扬 R
头皮运动 [⇔]
脸颊
脸颊上扬 L
脸颊上扬 R
脸颊上扬外侧 L
脸颊上扬外侧 R
眼球
眼球微小运动 [⇔]
眼球左右微动 [⇔]
眼球上下微动 [⇔]
眼睑
眨眼
闭眼
睁眼 L
睁眼 R
挤眼 L
挤眼 R
斜眼 L
斜眼 R
下眼睑弯曲 L
下眼睑弯曲 R
头部
头部左右微动 [⇔]
头部上下微动 [⇔]
点头 [⇔]
摇头 [⇔]
下颚
Jaw Opening
下颚紧缩
下颚横向移动 [⇔]
下颚纵向移动 [⇔]
嘴唇
Adduction
Compression
Lip Flare
Lower Lip Pull
Lower Lip Push
Lower Lip Tuck
Pinching
Retraction
Rounding
Upper Lip Pull
酒窝 L
酒窝 R
唇角下压 L
唇角下压 R
嘴唇收紧
嘴角伸展
嘴角摆动 [⇔]
Retraction L
Retraction R
Upper Lip Pull L
Upper Lip Pull R
鼻子
Nostril Flare
鼻孔张开 L
鼻孔张开 R
鼻孔压缩
喉咙
喉头降低
喉头降低抬高
颈部紧张 L
颈部紧张 R
舌头
Tongue Advance
Tongue Body Raise
Tongue Retraction
Tongue Tip Raise
您可以创造性地控制角色的肌肉定义。以默认肌肉集为起点,您可以在 SGX Studio 中删除肌肉、添加新肌肉和编辑现有肌肉。
编辑肌肉姿势
要在 SGX Studio 中设置肌肉的姿势,用户需要编辑骨骼控制的动画参数来建立姿势。用户可以使用任意数量的不同动画参数来制作一个姿势。
定义肌肉姿势时需要遵循三个关键原则:隔离、细节和极限。
隔离
第一个关键是隔离。肌肉姿势应捕捉到一次可独立控制的肌肉收缩的效果,而不掺杂其他肌肉的效果。这样可以将肌肉与通过肌肉间合作发生的更复杂 events(例如表情)区分开来。
如果创建的肌肉还结合了实际上可独立控制的动作,就会产生两种负面影响:
它破坏了角色的自由度。
它会将解剖学上的各个部分连接在一起,不尊重它们各自的动态特性,从而违背了物理上的可能性。
细节
隔离肌肉运动很重要,捕捉肌肉的整体效果也同样重要,这意味着要最大限度地展现变形细节。因此,定义肌肉姿势的第二个关键是细节。自然存在于细节中。由于肌肉是动画的基石,因此高度细节的肌肉变形对于自然逼真的动画至关重要。
充满细节的变形需要关注脸部随着特定肌肉收缩而运动的所有部位,包括细微的连带动作。例如,当一个人的上嘴唇移动时,脸颊和鼻子部位往往也会受到影响。因此,为了重建完整的自然变形,请务必包括这些连带动作。在制作骨骼装备时尤其要注意这一点,因为骨骼装备可能会发生高度局部变形,但制作者可能只关注到一块解剖结构。
极限
定义肌肉姿势的第三个关键是极限。肌肉姿势应呈现真实人体肌肉收缩的最极端程度。例如,在定义鼻孔张开 L 的姿势时,左边的姿势很好,但右边的姿势太弱。
如果肌肉的姿势太弱或不明显,就无法实现良好的运动范围。这是因为姿势呈现的是最大位移,而不是某个平均程度的位移。虽然在实际动画中,可能永远不会遇到肌肉收缩到 100% 的情况,但如果最大位移达不到真正的最大位移,那么延伸开来,所有程度较小的肌肉收缩看起来都会比应有的要弱。此外,由于肌肉无法形成强烈的姿势,因此很难实现极富表现力的脸部动画。
编辑动态参数
肌肉动态系统通过随时间变化每块肌肉的收缩程度来控制动画。这种行为由运动规划和生物力学基本模型控制。然而,不同的肌肉具有不同的解剖特性,这导致对每块肌肉运动速度的感知预期不同。而人脑非常善于发现脸上的速度不自然。
因此,我们为每块肌肉提供了可设置的参数,以确定其平均速度。我们可以区分肌肉运动的收缩和放松阶段,这些参数代表了这两个阶段的速度。这两个可用参数分别称为收缩持续时间和倾向。
设置这些参数需要手动操作,并在动画中查看估计值的效果。SGX Studio 提供了肌肉预览功能,可以演示特定肌肉从 0 到 1 再回到 0 的动画。这对于评估所估计的动态参数的自然度非常有用。在每种情况下,您可以自问:这个角色的脸部动作速度看起来自然吗?是否看起来太快或太慢?请想象成如果这个角色是活的,并在根据自己的意愿表演动作。
以下是查看肌肉预览的一些最佳做法:
在判断收缩持续时间或倾向时,确保肌肉一直处于 1.0 的状态。
如果通过默认视频播放器观看预览,请将播放器设置为循环播放,这样您就可以坐下来多次观看动作。
观看时,要避免听觉干扰,如背景音,尤其是音乐,因为这些会影响您的时间感知,从而妨碍您判断动作速度的自然程度。
同样,要移除视频播放器中的进度条或其他视觉假象来避免视觉干扰。
进行一系列小幅的调整和审查,而不要做大的改变。
收缩持续时间
肌肉收缩持续时间是指肌肉从 0 到 1 完全收缩所需的时间。在 SGX Studio 中,用户可以通过生成不同收缩持续时间值的肌肉预览来找到合适的收缩持续时间。例如,下面是酒窝 L 的肌肉预览示例,收缩持续时间分别设置为三个不同的值:200 毫秒、460 毫秒和 700 毫秒。对于收缩持续时间,请特别注意收缩阶段(从 0 到 1)。
您应该可以看到,在这张脸上 460 毫秒的收缩持续时间对于酒窝 L 最自然。
倾向
肌肉的倾向表示肌肉收缩所需的时间与再次放松所需时间(即从 1 到 0)之间的差值(如果有)。该差值以偏差比率的形式表示。数值大于 0 的正倾向表示放松所需的时间比收缩所用的时间长。数值低于 0 的负倾向表示放松所需的时间比收缩所用的时间短。数值为 0 意味着放松与收缩的持续时间相同。
例如,以下是酒窝 L 的三段视频,倾向值分别为 -0.35、-0.11 和 +0.1。
在这个示例中,-0.11 倾向值的中性回归最自然。
先设置收缩持续时间,再设置倾向。
创建新肌肉
上述有关创建姿势和设置动态参数的指导原则同样适用于新肌肉和现有肌肉:要确保新肌肉完全隔离,具有良好的变形细节,处于极限姿势,并具有逼真的速度。
对于动态参数,在添加新肌肉时,请务必将其添加到正确的解剖区域,这样它们才能继承适合肌肉的动态属性。虽然有些属性在添加后也可以进行编辑,但有一个良好的基础会很有帮助。还有一些动态属性无法编辑,因此完全取决于解剖区域。
添加新肌肉时,请务必将其添加到最匹配的解剖区域,以便新肌肉继承合适的动态属性。
特别有用的一项功能是可以添加肌肉来控制非人类解剖结构,如触角、鳃、茎上的眼球或其他非人类附肢。这些肌肉可以添加到角色的非嘴部表情中,由我们的非嘴部系统和其他肌肉一起驱动。如果要为非人类的解剖结构添加肌肉,请将它们添加到与新肌肉在身体上的位置和预期速度最相似的解剖区域。
受保护的肌肉
角色的默认肌肉集是开放式的。您可以随意添加或删除肌肉并对其进行编辑。不过,默认肌肉中有一部分是受保护的。受保护的肌肉无法在 SGX Studio 中删除,而且可编辑性也受到限制。一般来说,受保护的肌肉:
能够被我们的算法认识到其存在性;
与典型肌肉相比,需要更高的精度和对动画系统的理解;以及
由于精度的原因,可能需要定义肌肉的多个姿势,而不仅仅是一个姿势。
由于这些原因,受保护的肌肉通常由 Speech Graphics 团队中训练有素的技术美术师和动画语言学家设置,作为我们角色设置服务的一部分。
受保护的肌肉包括语音肌肉和某些眼部肌肉。下面将对此进行讨论。
语音肌肉
语音动画中使用了 16 块肌肉,所有这些肌肉都受到保护。在解剖区域方面,这些肌肉包括下颚、嘴唇、舌头和鼻子。语音肌肉集是根据发音动作分解成的各个组成部分科学推导出来。这些肌肉的设置涉及一些关键姿势,对于最佳的嘴型同步质量至关重要。语音肌肉的描述如下。
下颚 | |
Jaw Opening | |
嘴唇 | |
Adduction | |
Compression | 嘴唇紧闭,没有突出。下唇比上唇激活程度更高,中间略微弯曲,形成凹陷。嘴角两侧有凹陷。 |
Lip Flare | |
Lower Lip Pull | |
Lower Lip Push | |
Lower Lip Tuck | |
Pinching | |
Retraction | |
Rounding | |
Upper Lip Pull | |
鼻子 | |
Nostril Flare | 两个鼻孔都张开。除了鼻翼外没有任何动作。 |
舌头 | |
Tongue Advance | |
Tongue Body Raise | |
Tongue Retraction | |
Tongue Tip Raise |
在某些教学应用场景中,我们会将核心肌肉群扩展到通常不可见的器官,如上颚或软腭。下面是一个例子。
受保护的眼部肌肉
眼球和眼睑的以下肌肉受到保护。这些肌肉的存在是为了让某些算法发挥作用,包括系统防止上下眼睑重叠的保护措施。
眼球 | |
眼球微小运动 | 眼球轻微地向左(和向右)转动,就像对话者的两眼之间在观察一样。这种肌肉具有双方向性。 |
眼睑 | |
眨眼 | 上下眼睑接触。大部分动作由上眼睑完成。下眼睑向上向内绷紧。 |
闭眼 | 上下眼睑接触。可以与眨眼的姿势相同。 |
睁眼 L/R | 眼睛张大,主要是上眼睑向上运动。分为左眼和右眼。 |
挤眼 L/R | 周边挤压导致眼睛缩小。分为左眼和右眼。 |
斜眼 L/R | 通过上下眼睑紧张使眼睛缩小。分为左眼和右眼。 |
下眼睑弯曲 L/R | 下眼睑向上弯曲。分为左眼和右眼。 |
这是面部动作编码系统 (FACS) 吗?
面部的可变性受到生物力学的限制;因此,将动作参数化的一种自然方法是设置一套面部运动范围的动作函数。1970 年,Carl-Herman Hjortsjö 最早提出了用基本动作功能分析面部动作的方法之一,心理学家 Paul Ekman 和 Wallace Friesen 对其进行了扩展,他们提出的面部动作编码系统 (FACS) 能够提供对面部动作的全面分析。他们声称,虽然人脸上有 268 块肌肉,但人脸只能做出 46 个基本动作,他们称之为动作单元。每个动作单元都是一个可独立控制的肌肉群的运动,从而在面部表面产生特征性的位移模式。原则上,任何面部表情,无论是涉及语言、情感还是其他行为,都可以分解成一组一个或多个动作单元,每个单元都分别激活到一定程度。虽然面部动作编码系统最初设计为面部表情分类的描述系统,但如今已被广泛用作面部绑定的基础,其骨骼控制参数代表了相应动作单元的激活程度。
Speech Graphics 肌肉集可以与面部动作编码系统动作单元相关联(尽管并不完全匹配)。两者之间有几个主要区别。一是,我们对语音肌肉的分解更适合理解产生语音的动态。另一个区别是,我们的肌肉不仅包括面部肌肉,还包括内部声道的肌肉(包括舌头),以及在说话过程中可能移动的身体肌肉(如头部);甚至手臂、手和躯干也可以做成动画。最后,与面部动作编码系统动作单元不同,Speech Graphics 肌肉可以是双方向性的。