制作3D数字人脸部52个ARKit形态键的标准动画教程

职场   2024-10-22 17:10   北京  
无论是用Threejs还是UE中驱动3D数字人模型的声音同步嘴形变化,目前最好的方案还是用的iPhone 脸部跟踪的ARKit 52个形态键。
前面很多文章介绍过如何快速制作这52个形态键,但很多时候因为模型的不同,制作微调的时候都无法准确完成。正好今天看到一个动画教程,应该是目前应对52个形态键最准确的一个标准。 
  1.  browInnerUp
    眉毛内侧抬起,眉毛末端不要移动
    https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928264-browinnerup
.    
解释说明:
与眉毛相关的形状键一共有4个
  • -browInnerUp
  • - browDownLeft / browDownRight
  • -  browOuterUpLeft  / browOuterUpRight
  • - noseSneerLeft / noseSneerRight
与眼睛表情相关的有3个形态键
  • - eyeBlinkLeft / eyeBlinkRight
  • - eyeSquintLeft / eyeSquintRight
  • - eyeWideLeft / eyeWideRight
三种眼型不足以涵盖眼睛周围的全方位表情。
包括眉毛和脸颊形状键中的眼球运动可以丰富变化。
同时移动多种形状的眉毛时,请注意不要将眉毛埋入面部网格中。
保持眉尾在 browInnerUp 中的位置。
当 browInnerUp 和 browOuterUpLeft/browOuterUpRight 各自以 100% 组合时,创建“自然抬起的眉毛(=惊讶眉毛)”的形状。
(browInnerUp+browOuterUp)

2. browDownLeft
降低整个左眉毛
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928223-browdownleft
     
解释说明:
将上眼睑稍微向下推,上眼睑的动作应该是这样,当它与眨眼重叠时,眼睛不会被埋没并消失。
(browDown+browInnerUp)

3.  browDownRight
降低整个右眉毛
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928254-browdownright


4. browOuterUpLeft
左眉毛外侧抬起,“眉头”位置不要移动。
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928274-browouterupleft

解释说明:
在browOuterUp中,保持眉顶部的位置,将外眼角处的上眼睑轻轻抬起。
当 browInnerUp 和 browOuterUpLeft/browOuterUpRight 各自以 创建“自然抬起的眉毛(=惊讶眉毛)”的形状。
(browInnerUp+browOuterUp)
5. browOuterUpRight
抬起右眉毛外侧,不要移动“眉头”位置。
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928255-browouterupright



6. eyeLookUpLeft
将左眼瞳孔向上转动
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928250-eyelookupleft


左上眼睑中央下方下眼睑中央下方
复合惊讶的眼睛形状关键,使变化量随着顶点向中心移动而增加。
通过聚焦在眼睛的中心,当观察眼球周围时,眼睛可以平滑地移动。

7. eyeLookUpRight
将左眼瞳孔向下转动
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928258-eyelookupright

右上眼睑中央下方下眼睑中央下方

8. eyeLookDownLeft
将左眼瞳孔向下转动
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928234-eyelookdownleft

左上眼睑中央下方下眼睑中央下方
复合惊讶的眼睛形状关键,使变化量随着顶点向中心移动而增加。
通过聚焦在眼睛的中心,当观察眼球周围时,眼睛可以平滑地移动。


9. eyeLookDownRight
将左眼瞳孔向下转动
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928272-eyelookdownright

右上眼睑中央下方下眼睑中央下方

10. eyeLookInLeft
将左眼瞳孔向内转动
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928260-eyelookinleft

仅将眼睛顶点从中心移至眼睛顶部。
合成惊讶的眼睛形状关键点,以便随着顶点向眼睛顶部移动而增加变化量。
通过在变化量上添加斜率,眼睛在观察眼球周围时可以平滑地移动。

11.  eyeLookInRight
将右眼瞳孔向内转动
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928258-eyelookupright

仅将眼睛顶点从中心移至眼睛顶部。

12. eyeLookOutLeft
将左眼瞳孔向外转动
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928269-eyelookoutleft

透过左眼角,仅从顶点中心移动外眼角。
合成惊讶的眼睛形状关键点,使变化量随着顶点向外眼角移动而增加。
通过在变化量上添加斜率,眼睛在环视眼睛时可以平滑地移动。

13.  eyeLookOutRight
将右眼瞳孔向外转动
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928265-eyelookoutright


透过右眼角,
仅从顶点中心移动外眼角。
14. eyeBlinkLeft
闭上左眼在跟踪过程中,iPhone 传感器会检测到因眼睑下降而导致的瞳孔遮挡(即瞳孔向下旋转),这可能会导致瞳孔在眨眼的同时发生弹跳运动。
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928261-eyeblinkleft

正常闭眼。如果您在此处设置“Joy Eye”关闭而不是眨眼,则可以通过面部跟踪轻松关闭笑眼(无法正常闭眼)。在跟踪动画中,即使眼睛即将闭上,瞳孔也会继续旋转,
因此,根据模型的不同,眨眼时瞳孔网格可能会突出,这可以通过在闭眼形状中添加瞳孔比例来防止。
15. eyeBlinkRight
闭上右眼
在跟踪过程中,iPhone 传感器会检测到因眼睑下降而导致的瞳孔遮挡(即瞳孔向下旋转),
这可能会导致瞳孔在眨眼的同时发生弹跳运动。
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928262-eyeblinkright



16. eyeSquintLeft
用左眼微笑
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928252-eyesquintleft

左下眼睑抬起,双目含笑。
注意,ARKit参考中的瞳孔并不是关闭的,也不是所谓的“Joy Eye”关闭,眼睛是与闭眼结合在一起的,所以如果单纯设置Joy Eyes Closed会失败。
如何仅使用面部跟踪来创建“Joy Eyes Closed”
 (1) 减去100%的“闭眼”形状。
 (2) 添加100%的“Joy eyes”闭眼形状。
  然而,由于弧形的“Joy闭着眼睛”是虚构的,所以当从正常的眼睛转换时,它在中间看起来不自然
 ,因为它是主要焦点。使用可即时切换的按键输入更安全。仅抬起下眼睑会改变大眼睛角色的脸部印象(使脸部更长)。

17. eyeSquintRight
用右眼微笑
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928237-eyesquintright

右下眼睑抬起,微笑着。

18. eyeWideLeft
睁大左眼
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928233-eyewideleft

对于大眼睛的角色,睁开眼睑可能不足以看到眼白,
缩小瞳孔并进行调整,使眼白足够可见。

19. eyeWideRight
睁大右眼
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928267-eyewideright


20. cheekPuff
脸颊鼓起来
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928232-cheekpuff

浮肿脸颊的形状关键你应该把它们鼓起来,这样从前面就能看到嘴唇。尖尖的嘴唇很可爱,小心不要把它们收得太窄,否则在移动时它们会塌陷。嘴巴撅起。
表情很容易瞄准和激活,脸部与除了嘴巴以外的其他形状不能很好地融合,因此很容易创建一个姿势脸。

21. cheekSquintLeft
拉起左脸颊
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928226-cheeksquintleft

左脸颊微笑 脸颊抬起时移动
在类似卡通的模型中,移动嘴角和下眼睑等部位的破坏性比移动整个脸颊的干扰要小。
向侧面拉伸使微笑时嘴巴张开,
如果嘴角不拉伸,则可以保持嘴部的印象。

22. cheekSquintRight
拉起右脸颊
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928238-cheeksquintright

右脸颊微笑 脸颊抬起时移动

23. noseSneerLeft
左侧鼻子和眉毛皱起。眉毛挤在脸中央的面部表情
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928263-nosesneerleft

左眉毛皱起作为鼻子皱眉的伴随动作
眉毛降低并靠拢,整个眉毛位置保持不变。
注意眉毛不要降得太低,因为它是与 browDown 结合在一起的。
(browDown+noseSneer)

24. noseSneerRight
右侧鼻子和眉毛皱起。眉毛挤在脸中央的面部表情
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928239-nosesneerright

右眉毛皱起是紧皱鼻子的伴随动作


25. jawOpen
张开嘴
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928236-jawopen

形状键影响角色脸部的印象。
设置一个大的开口,
当这个开口较小时,嘴不会移动太多。
 与“mouthClose”配对,当两者都为 100% 时,嘴巴闭合,下巴张开。当两者都为 100% 时,嘴巴闭合,下巴张开,只有下巴移动进行咀嚼。
(jawOpen+mouthClose)
基本上,只有与下巴相关的形状键才能移动牙齿。
  • ・下颌张开
  • ・下颌前移
  • ・下颌左
  • ・下颌右
 将jawOpen 和mouthUpperUp/mouthLowerDown 组合的形状是垂直张口的最大值,将
jawOpen 分别与southDimple、southStretch 等组合的形状是水平方向张口的最大值。

26. jawForward
将下巴向前移动
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928229-jawforward

整个下颌向前移动
下颌、舌头和下颌牙齿同时移动
27. jawLeft
将下巴向左移动
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928273-jawleft

整个下颌向左移动下颌、舌头和下颌牙齿同时移动。因为是平时动作不大、容易有意识控制的动作,所以可以有意地激活特定的表情。

28. jawRight
将下巴向右移动
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928248-jawright

整个下颌向右移动
 

29. mouthFunnel
嘴部说“呜”时
嘴唇微张,露出紧闭的牙齿。
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928253-mouthfunnel

像勺子一样伸出嘴唇并展开的形状
构成露出牙齿的表情
 完全不要移动牙齿
*如果您不想像角色表情那样尽可能多地显示牙齿,请添加一个动作以在此形状键中隐藏它们。
 将嘴角收窄至锐角,给人一种充满活力的嘴唇的感觉。
舌尖微微抬起(因为人做出这个嘴型时舌尖会收缩)
调整口腔内的网格,使牙齿不被填满

30. mouthPucker
缩小嘴唇的宽度
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928257-mouthpucker

缩小嘴唇的宽度
嘴唇越窄,嘴唇就会显得越丰满、越前倾,
与漏斗形结合,形成接吻嘴。
(mouthFunnel+mouthPucker)
 
与JawOpen结合时,注意不要使窄嘴太长太窄。同时收紧舌头和嘴唇(以防止渗透到嘴角)。

31. mouthLeft
将整个嘴向左移动,而不仅仅是嘴角。
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928228-mouthleft
 
 
整个嘴移至左上方,
不要移动牙齿。
 仅转动舌头以跟随口腔,让舌头自然移动
(tongueOut+mouthLeft)
32. mouthRight
将整个嘴移至右侧,而不仅仅是嘴角。
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928246-mouthright


将整个嘴移至右上方,不要移动牙齿。

33. mouthRollUpper
用牙齿夹住上唇
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928227-mouthrollupper

当纹理填充时,嘴巴本身就会消失,尤其是在卡通模型上,创建咬唇形状,同时保持上唇边缘可见。
与mouthRollLower配合使用,在嘴部周围创建蠕动的表情。
实际移动时,jawOpen会稍微混合,因此移动比创建的形状更浅。
(mouthRollUpper+mouthRollLower)

34. mouthRollLower
用牙齿夹住下唇
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928224-mouthrolllower

与mouthRollLower 配合使用,在嘴部周围创建蠕动的表情

35. mouthShrugUpper
紧紧抬起上唇

https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928276-mouthshrugupper
提升上唇的形状
与“mouthShrugLower”配合使用,形成闭合的、皱眉的嘴。
 还可以与mouthPress一起使用来创建紧闭的嘴巴表情。
(mouthShrug+mouthPress)
 向下拉嘴角的动作应该放在上唇或下唇上,因为将其均匀地分布在上唇和下唇之间会导致嘴角发出嘎嘎声。

36. mouthShrugLower
紧紧抬起下唇
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928230-mouthshruglower

提升下唇的形状
与“mouthShrugUpper”结合使用,可打造皱眉、不平衡的形状。

37. mouthClose
闭上嘴,张开下巴这种形状不能单独用于跟踪
通过在闭嘴的情况下打开和关闭下颌,就形成了咀嚼下颌的运动。

(jawOpen+mouthClose)
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928266-mouthclose
看起来像是破碎的形状,但并不是模型上的异常。
闭上嘴,同时保持下巴张开
与jawOpen 配对,当两者都为100% 时,下巴完全张开,但嘴完全闭合。
 从下巴张开的脸上,选择嘴巴周围的区域,并逐渐缩小选择范围,以便只有嘴巴闭合,从而形成“下巴完全张开,嘴巴完全闭合”的形状,
从这个状态,我们可以进一步创建嘴巴闭合的形状。减小下颌张开度。
 由于女模特的下巴张开后显得不太漂亮,因此样本模型女模特的下巴张开度被做得适中。
 将舌尖向上移动,这样伸出时舌尖不会刺入下唇。
38. mouthSmileLeft
左嘴角上扬
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928249-mouthsmileleft

左嘴角上扬的笑脸
配置微笑时的嘴部形状(例如,使嘴角呈锐角或钝角)
与张开的嘴结合时,嘴部应看起来像自然的微笑。
(jawOpen+mouthSmile)
 如果简单地将形状从中心向左和右分割,则移动
的渐变量会导致左右形状加起来为 100%。
 舌头稍微放低(因为用力伸出舌头时嘴角会上扬)
(tongueOut+mouthSmile)
 嘴角上扬可能会导致整个嘴部向上移动,从而改变脸部作为角色的印象,
通过适当降低嘴角来保持其位置来平衡。
 完全不要移动牙齿
*如果您不想像角色表情那样尽可能多地显示牙齿,请在此形状键中添加一个隐藏牙齿的动作。

39. mouthSmileRight
抬起右嘴角
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928244-mouthsmileright

右嘴角上扬的笑脸
完全不要移动牙齿*如果您不想像角色表情那样尽可能多地显示牙齿,请在此形状键中添加一个隐藏牙齿的动作。
与上面相同
40. mouthFrownLeft
降低左嘴角
主要在闭嘴时起作用
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928277-mouthfrownleft

降低左嘴角
主要在闭嘴时起作用。
与张开的下颌融合时,嘴形应自然。

(jawOpen+mouthFrown)
41. mouthFrownRight
降低右嘴角
主要在闭嘴时起作用
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928270-mouthfrownright


42. mouthDimpleLeft
将左嘴角向后拉
将嘴向一侧张得更大
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928231-mouthdimpleleft

将左嘴角横向张开
为了在与“微笑”等构图时不改变嘴角的形状,请拉伸“嘴唇的中间部分”而不是嘴角。

(jawOpen+mouthDimple)
43. mouthDimpleRight
将右嘴角向后拉
将嘴向侧面张得更大
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928259-mouthdimpleright

右嘴角横向张开
与上面相同
44. mouthUpperUpLeft
抬起左上唇并露出牙齿
牙齿在嘴里露出 漏斗位置,下巴不移动,当嘴向侧面伸展时,牙齿最明显
(mouthFunnel+mouthUpperUp
+mouthLowerDown
+mouthDimple)


https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928240-mouthupperupleft

抬起左上唇,不要移动牙齿。
与下唇相比,人的上唇角会更高一些,整个上唇会呈花生形状。
 如果简单地从中心将其分为左右,则
渐变变化量使得左右形状加起来为100%,看起来会很不自然。
jawOpen 和mouthUpperUp/mouthLowerDown 的形状是垂直张口的最大值。
45. mouthUpperUpRight
抬起右上唇并露出牙齿
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928247-mouthupperupright

抬起右上唇,
不要移动牙齿。

46. mouthLowerDownLeft
拉下左下唇并露出牙齿。
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928242-mouthlowerdownleft

拉下左下唇,不要移动牙齿。
与上唇相比,人的下唇中部向下运动更大。
如果我们简单地将其从中心向左和右分割,则渐变的变化量会导致左右形状加起来为 100%。
结合jawOpen 和mouthUpperUp/mouthLowerDown 的形状是嘴巴垂直张开的最大值。
47. mouthLowerDownRight
拉下右下唇并露出牙齿。
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928275-mouthlowerdownright

拉下右下唇,不要移动牙齿。
与上面相同
48. mouthPressLeft
闭上嘴,将左嘴角紧紧地抬起,
做成鸭子嘴。
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928241-mouthpressleft

向上推左嘴角并挤压它
仅在挤压嘴时起作用,因此很容易有意识地控制
可用于添加细微差别,例如猫嘴或鸭嘴。
(mouthShrug+mouthPress )
嘴必须是对称的,否则看起来会变形。您可以通过将预先准备好的猫嘴形状均匀地添加到左右嘴压机上来使其对称。
49. mouthPressRight
闭上嘴,将右嘴角紧紧地抬起,
做成鸭子嘴
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928245-mouthpressright

将右嘴角向上推并压扁。与上面相同
50. mouthStretchLeft
将左嘴角向下拉
与皱眉相比,嘴巴张开时的动作更多。
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928235-mouthstretchleft

向下拉左嘴角,使嘴进一步张开
当你张大嘴时,嘴角会上升,而嘴角会下降以平衡动作。
当嘴巴闭合时,很难通过降低嘴角来创造出优美的动作。
从 100% 下颌打开的形状开始,向下拉嘴角以获得理想的形状,然后将下颌打开设置为 -100% 以获得正确的运动。
(jawOpen+mouthStretch)

51. mouthStretchRight
将右嘴角向下拉
与皱眉相比,嘴巴张开时的动作更多。
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2928268-mouthstretchright

向下拉右嘴角,使嘴进一步张开
52. tongueOut
伸出舌头
https://developer.apple.com/documentation/arkit/arfaceanchor/blendshapelocation/2968190-tongueout
将舌头直接从嘴唇中伸出
 张嘴时舌头向下弯曲的变形是通过jawOpen 来完成的,
与jawOpen 合成来调整牙弓的宽度,以便当舌头弯曲时,牙弓穿过下唇。


术语表

苹果ARKit

适用于iPhoneiPadiOS设备的开发套件提供的功能之一是高级面部跟踪,需要具有 52 个相应混合形状的 3D 模型。

 

VRM

由VRM联盟开发的人形 3D 模型格式,用户可以通过使用 Clip 组合现有的表情混合形状来自由添加新表情。

 

Perfect-Synk (a.k.a.)

如何结合VRM规范使用iPhone进行面部跟踪我们在模型中添加了 52 个 Clip,并将它们视为可以在 ARKit 中跟踪的 52 个不同形状,用户可以调整表情剪辑。





参考链接:
1. https://hinzka.hatenablog.com/entry/2021/12/21/222635
2. VRoid中52个形态键的标准模型:
https://github.com/hinzka/52blendshapes-for-VRoid-face



有相同兴趣爱好的可通过加星球的方式添加作者微信。加入后查看置顶评论可加微信交流。
关于作者

做一只爬的最久的乌龟,保持学习保持好奇,即使慢一点,遇到一点困难,只要最后能到达终点,又有什么关系呢。
毕竟人生没有白走的路,每一步都算数。



前端程序设计
专注前端最前沿技术,数据可视化,web3d。偶尔插播生活和艺术。
 最新文章