Appendix C: 3DMM Versions#

The SDK includes a default face model that is used by the face fitting feature. This model is a modification of the ICT Face Model from the ICT-FaceKit repository. The modified version of the face model, face_model2.nvf, is optimized for real-time face fitting applications and has a lower resolution. In addition to the blendshapes provided by the ICT Model, the model uses linear blendshapes for eye gaze expressions, which enables the model to be used in implicit gaze tracking.

Accompanying face_model2.nvf is a face_model2.mtl file, which is associated with the Wavefront OBJ file format and describes the photometric materials that are used only when rendering face_model2.nvf in the ExpressionApp sample application. The face_model2.mtl text file can be edited to change the appearance and is not used for mesh or expression fitting.

"Original ICT face model topology, as seen from front"

"Modified face model topology of face_model2.nvf, as seen from front"

The original ICT face model topology

The modified face model topology of face_model2.nvf

Face Expression List#

The following images show all expression blendshapes that are used in the face expression estimation feature.

"BrowDown_L"

"BrowDown_R"

"BrowInnerUp_L"

"BrowInnerUp_R"

"BrowOuterUp_L"

"BrowOuterUp_R"

"cheekPuff_L"

"cheekPuff_R"

"cheekSquint_L"

"cheekSquint_R"

"eyeBlink_L"

"eyeBlink_R"

"eyeLookDown_L"

"eyeLookDown_R"

"eyeLookIn_L"

"eyeLookIn_R"

"eyeLookOut_L"

"eyeLookOut_R"

"eyeLookUp_L"

"eyeLookUp_R"

"eyeSquint_L"

"eyeSquint_R"

"eyeWide_L"

"eyeWide_R"

"jawForward"

"jawLeft"

"jawOpen"

"jawRight"

"jawOpen_+_mouthClose"

"mouthDimple_L"

"mouthDimple_R"

"mouthFrown_L"

"mouthFrown_R"

"mouthFunnel"

"mouthLeft"

"mouthLowerDown_L"

"mouthLowerDown_R"

"mouthPress_L"

"mouthPress_R"

"mouthPucker"

"mouthRight"

"mouthRollLower"

"mouthRollUpper"

"mouthShrugLower"

"mouthShrugUpper"

"mouthSmile_L"

"mouthSmile_R"

"mouthStretch_L"

"mouthStretch_R"

"mouthUpperUp_L"

"mouthUpperUp_R"

"noseSneer_L"

"noseSneer_R"

Here is the face blendshape expression list that is used in the Face 3D Mesh feature and the Facial Expression Estimation feature:

  • 0: BrowDown_L

  • 1: BrowDown_R

  • 2: BrowInnerUp_L

  • 3: BrowInnerUp_R

  • 4: BrowOuterUp_L

  • 5: BrowOuterUp_R

  • 6: cheekPuff_L

  • 7: cheekPuff_R

  • 8: cheekSquint_L

  • 9: cheekSquint_R

  • 10: eyeBlink_L

  • 11: eyeBlink_R

  • 12: eyeLookDown_L

  • 13: eyeLookDown_R

  • 14: eyeLookIn_L

  • 15: eyeLookIn_R

  • 16: eyeLookOut_L

  • 17: eyeLookOut_R

  • 18: eyeLookUp_L

  • 19: eyeLookUp_R

  • 20: eyeSquint_L

  • 21: eyeSquint_R

  • 22: eyeWide_L

  • 23: eyeWide_R

  • 24: jawForward

  • 25: jawLeft

  • 26: jawOpen

  • 27: jawRight

  • 28: mouthClose

  • 29: mouthDimple_L

  • 30: mouthDimple_R

  • 31: mouthFrown_L

  • 32: mouthFrown_R

  • 33: mouthFunnel

  • 34: mouthLeft

  • 35: mouthLowerDown_L

  • 36: mouthLowerDown_R

  • 37: mouthPress_L

  • 38: mouthPress_R

  • 39: mouthPucker

  • 40: mouthRight

  • 41: mouthRollLower

  • 42: mouthRollUpper

  • 43: mouthShrugLower

  • 44: mouthShrugUpper

  • 45: mouthSmile_L

  • 46: mouthSmile_R

  • 47: mouthStretch_L

  • 48: mouthStretch_R

  • 49: mouthUpperUp_L

  • 50: mouthUpperUp_R

  • 51: noseSneer_L

  • 52: noseSneer_R

The items in the preceding list can be mapped to the ARKit blendshapes by using the following options:

  • A01_Brow_Inner_Up = 0.5 * (browInnerUp_L + browInnerUp_R)

  • A02_Brow_Down_Left = browDown_L

  • A03_Brow_Down_Right = browDown_R

  • A04_Brow_Outer_Up_Left = browOuterUp_L

  • A05_Brow_Outer_Up_Right = browOuterUp_R

  • A06_Eye_Look_Up_Left = eyeLookUp_L

  • A07_Eye_Look_Up_Right = eyeLookUp_R

  • A08_Eye_Look_Down_Left = eyeLookDown_L

  • A09_Eye_Look_Down_Right = eyeLookDown_R

  • A10_Eye_Look_Out_Left = eyeLookOut_L

  • A11_Eye_Look_In_Left = eyeLookIn_L

  • A12_Eye_Look_In_Right = eyeLookIn_R

  • A13_Eye_Look_Out_Right = eyeLookOut_R

  • A14_Eye_Blink_Left = eyeBlink_L

  • A15_Eye_Blink_Right = eyeBlink_R

  • A16_Eye_Squint_Left = eyeSquint_L

  • A17_Eye_Squint_Right = eyeSquint_R

  • A18_Eye_Wide_Left = eyeWide_L

  • A19_Eye_Wide_Right = eyeWide_R

  • A20_Cheek_Puff = 0.5 * (cheekPuff_L + cheekPuff_R)

  • A21_Cheek_Squint_Left = cheekSquint_L

  • A22_Cheek_Squint_Right = cheekSquint_R

  • A23_Nose_Sneer_Left = noseSneer_L

  • A24_Nose_Sneer_Right = noseSneer_R

  • A25_Jaw_Open = jawOpen

  • A26_Jaw_Forward = jawForward

  • A27_Jaw_Left = jawLeft

  • A28_Jaw_Right = jawRight

  • A29_Mouth_Funnel = mouthFunnel

  • A30_Mouth_Pucker = mouthPucker

  • A31_Mouth_Left = mouthLeft

  • A32_Mouth_Right = mouthRight

  • A33_Mouth_Roll_Upper = mouthRollUpper

  • A34_Mouth_Roll_Lower = mouthRollLower

  • A35_Mouth_Shrug_Upper = mouthShrugUpper

  • A36_Mouth_Shrug_Lower = mouthShrugLower

  • A37_Mouth_Close = mouthClose

  • A38_Mouth_Smile_Left = mouthSmile_L

  • A39_Mouth_Smile_Right = mouthSmile_R

  • A40_Mouth_Frown_Left = mouthFrown_L

  • A41_Mouth_Frown_Right = mouthFrown_R

  • A42_Mouth_Dimple_Left = mouthDimple_L

  • A43_Mouth_Dimple_Right = mouthDimple_R

  • A44_Mouth_Upper_Up_Left = mouthUpperUp_L

  • A45_Mouth_Upper_Up_Right = mouthUpperUp_R

  • A46_Mouth_Lower_Down_Left = mouthLowerDown_L

  • A47_Mouth_Lower_Down_Right = mouthLowerDown_R

  • A48_Mouth_Press_Left = mouthPress_L

  • A49_Mouth_Press_Right = mouthPress_R

  • A50_Mouth_Stretch_Left = mouthStretch_L

  • A51_Mouth_Stretch_Right = mouthStretch_R

  • A52_Tongue_Out = 0