Trouble with Live Link Face ARKit and Morph Targets on the ReadyPlayerMe avatar

Trouble with Live Link Face ARKit and Morph Targets on the ReadyPlayerMe avatar

Hello UE Community,

I’m currently working on a project where I’m trying to drive blend shapes (morph targets) in Unreal Engine using Live Link Face ARKit on a ReadyPlayerMe avatar. However, I’m encountering an issue where the face doesn’t change as expected despite setting up the necessary configurations.

Here’s a brief overview of the problem:

Problem Description:

  • I am using the ReadyPlayerMe avatar in my project.
  • I have set up Live Link Face ARKit to capture facial motion data from my ARKit device.
  • I’ve created a Live Link Remap Asset to specify the target morph target for each source morph from Live Link Face ARKit.
  • Despite correctly mapping the source morphs to the target morph targets in the Live Link Remap Asset, the face on my skeletal mesh does not change accordingly.

Troubleshooting Steps Taken:

If anyone knows how to troubleshoot and resolve this issue. Any insights, suggestions, or solutions would be greatly appreciated.

Thank you in advance for your help!

Best regards

PS
If anyone wants to download an RPM for their own use with ARKit viable blendshapes added, use the download link but add on: ?morphTargets=ARKit
More on this in the following link: GET - 3D avatar - Ready Player Me

@VisualisationLab Any update? I have the same problem

Hey there dacsfall!

We’ve found a workaround to drive MorphTargets on RPM using LiveLinkFace. Here’s how we do it:

  1. Mapping ARKit Blendshapes – We use a data table in Unreal Engine to map ARKit blendshapes to RPM blendshapes. You will have to create this yourself within UE, but below I will supply the mapping for an example RPM avatar.
  2. Retrieving Live Link Data – In the Event Graph (within the Animation Blueprint), we use the Evaluate Live Link Frame node to extract blendshape data from LiveLinkFace.
  3. Mapping Values – We take the data from the Live Link Frame node and use a Get Property Value node to populate a new map that pairs RPM blendshapes with their corresponding values from ARKit (RPM blendshape, value).
  4. Applying the Blendshapes – In the AnimGraph, we use a Modify Curve node to apply the mapped values, driving the RPM morph targets.

That should be all the steps to achieve driving different blendshapes with ARKit blendshapes. This is not limited to only RPM.

I hope that helps!

example data table:
glassesGuy_mesh_0_23_MorphTarget left_eyedown
glassesGuy_mesh_0_25_MorphTarget left_eyeup
glassesGuy_mesh_0_27_MorphTarget left_eyein
glassesGuy_mesh_0_29_MorphTarget left_eyeout
glassesGuy_mesh_1_24_MorphTarget right_eyedown
glassesGuy_mesh_1_26_MorphTarget right_eyeup
glassesGuy_mesh_1_28_MorphTarget right_eyein
glassesGuy_mesh_1_30_MorphTarget right_eyeout
glassesGuy_mesh_2_0_MorphTarget left_browdown
glassesGuy_mesh_2_1_MorphTarget right_browdown
glassesGuy_mesh_2_2_MorphTarget browInnerUp
glassesGuy_mesh_2_3_MorphTarget left_browOuterUp
glassesGuy_mesh_2_4_MorphTarget right_browOuterUp
glassesGuy_mesh_2_5_MorphTarget left_eyeSquint
glassesGuy_mesh_2_6_MorphTarget right_eyeSquint
glassesGuy_mesh_2_7_MorphTarget left_eyeWide
glassesGuy_mesh_2_8_MorphTarget right_eyeWide
glassesGuy_mesh_2_9_MorphTarget jawforward
glassesGuy_mesh_2_10_MorphTarget jawleft
glassesGuy_mesh_2_11_MorphTarget jawright
glassesGuy_mesh_2_12_MorphTarget mouthFrownLeft
glassesGuy_mesh_2_13_MorphTarget mouthFrownRight
glassesGuy_mesh_2_14_MorphTarget moutpucker
glassesGuy_mesh_2_15_MorphTarget mouthRollLower
glassesGuy_mesh_2_16_MorphTarget mouthShrugUpper
glassesGuy_mesh_2_17_MorphTarget noseSneerLeft
glassesGuy_mesh_2_18_MorphTarget noseSneerRight
glassesGuy_mesh_2_19_MorphTarget mouthLowerDownLeft
glassesGuy_mesh_2_20_MorphTarget mouthLowerDownRight
glassesGuy_mesh_2_21_MorphTarget mouthPressLeft
glassesGuy_mesh_2_22_MorphTarget mouthPressRight
glassesGuy_mesh_2_23_MorphTarget eyeLookDownLeft
glassesGuy_mesh_2_24_MorphTarget eyeLookDownRight
glassesGuy_mesh_2_25_MorphTarget EyeLidUpLeft
glassesGuy_mesh_2_26_MorphTarget EyeLidUpRight
glassesGuy_mesh_2_27_MorphTarget eyeLookInLeft
glassesGuy_mesh_2_28_MorphTarget eyeLookInRight
glassesGuy_mesh_2_29_MorphTarget eyeLookOutLeft
glassesGuy_mesh_2_30_MorphTarget eyeLookOutRight
glassesGuy_mesh_2_31_MorphTarget cheekPuff
glassesGuy_mesh_2_32_MorphTarget cheekSquintLeft
glassesGuy_mesh_2_33_MorphTarget cheekSquintRight
glassesGuy_mesh_2_34_MorphTarget jawOpen
glassesGuy_mesh_2_35_MorphTarget mouthClose (mouthClose 1 and jawopen 1)
glassesGuy_mesh_2_36_MorphTarget mouthFunnel
glassesGuy_mesh_2_37_MorphTarget mouthLeft
glassesGuy_mesh_2_38_MorphTarget mouthRight
glassesGuy_mesh_2_39_MorphTarget mouthStretchLeft
glassesGuy_mesh_2_40_MorphTarget mouthStretchRight
glassesGuy_mesh_2_41_MorphTarget mouthRollLower
glassesGuy_mesh_2_42_MorphTarget mouthRollUpper
glassesGuy_mesh_2_43_MorphTarget mouthPressLeft
glassesGuy_mesh_2_44_MorphTarget mouthPressRight
glassesGuy_mesh_2_45_MorphTarget mouthUpperUpLeft
glassesGuy_mesh_2_46_MorphTarget mouthUpperUpRight
glassesGuy_mesh_2_47_MorphTarget mouthSmileLeft
glassesGuy_mesh_2_48_MorphTarget mouthSmileRight
glassesGuy_mesh_2_50_MorphTarget eyeBlinkLeft
glassesGuy_mesh_2_51_MorphTarget eyeBlinkRight
glassesGuy_mesh_3_9_MorphTarget teethandtoungueforward
glassesGuy_mesh_3_10_MorphTarget TeethandtongueLeft
glassesGuy_mesh_3_11_MorphTarget TeethandtongueRight
glassesGuy_mesh_3_34_MorphTarget teethopenandtongueDown
glassesGuy_mesh_3_49_MorphTarget tongueOut

glassesGuy_mesh_3_34_MorphTarget lowerteethandtonguedown (combine with jawopen for realistic jaw opening)

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.