ARKit maps your expressions to Blendshapes

Apple’s ARKit contains instructions for mapping facial expressions to blendshapes when using their face recognition technology on the iPhone X.

A Unity blog post ARKit Face Tracking on iPhone X states that Unity will be releasing a sample scene where ARKit is used to animate a 3D head, although that demo scene is not yet available.

I’ve compiled a list of ARKit’s blendshapes from the Apple Developer website:

Left Eye

  • eyeBlinkLeft
  • eyeLookDownLeft
  • eyeLookInLeft
  • eyeLookOutLeft
  • eyeLookUpLeft
  • eyeSquintLeft
  • eyeWideLeft

Right Eye

  • eyeBlinkRight
  • eyeLookDownRight
  • eyeLookInRight
  • eyeLookOutRight
  • eyeLookUpRight
  • eyeSquintRight
  • eyeWideRight

Mouth and Jaw

  • jawForward
  • jawLeft
  • jawRight
  • jawOpen
  • mouthClose
  • mouthFunnel
  • mouthPucker
  • mouthLeft
  • mouthRight
  • mouthSmileLeft
  • mouthSmileRight
  • mouthFrownLeft
  • mouthFrownRight
  • mouthDimpleLeft
  • mouthDimpleRight
  • mouthStretchLeft
  • mouthStretchRight
  • mouthRollLower
  • mouthRollUpper
  • mouthShrugLower
  • mouthShrugUpper
  • mouthPressLeft
  • mouthPressRight
  • mouthLowerDownLeft
  • mouthLowerDownRight
  • mouthUpperUpLeft
  • mouthUpperUpRight

Eyebrows, Cheeks, and Nose

  • browDownLeft
  • browDownRight
  • browInnerUp
  • browOuterUpLeft
  • browOuterUpRight
  • cheekPuff
  • cheekSquintLeft
  • cheekSquintRight
  • noseSneerLeft
  • noseSneerRight

Apple Developer: Creating Face-Based AR Experiences

Each key in this dictionary (an ARFaceAnchor.BlendShapeLocation constant) represents one of many specific facial features recognized by ARKit. The corresponding value for each key is a floating point number indicating the current position of that feature relative to its neutral configuration, ranging from 0.0 (neutral) to 1.0 (maximum movement).

You can use blend shape coefficients to animate a 2D or 3D character in ways that follow the user’s facial expressions. ARKit provides many blend shape coefficients, resulting in a detailed model of a facial expression; however, you can use as many or as few of the coefficients as you desire to create a visual effect. For example, you might animate a simple cartoon character using only the jawOpen, eyeBlinkLeft, and eyeBlinkRight coefficients. A professional 3D artist could create a detailed character model rigged for realistic animation using a larger set, or the entire set, of coefficients.

You can also use blend shape coefficients to record a specific facial expression and reuse it later. The ARFaceGeometryinit(blendShapes:) initializer creates a detailed 3D mesh from a dictionary equivalent to this property’s value; the serialized form of a blend shapes dictionary is more portable than that of the face mesh those coefficients describe.