[GUIDE] Blendshapes, morph targets and shape keys

What are blendshapes / morph targets / shape keys

Blendshapes, also known as morph targets or shape keys depending on the software used, are a technique used in computer graphics, particularly in 3D animation and modeling. They involve creating a series of predefined shapes or poses of a character’s mesh, which can then be smoothly transitioned between to create different facial expressions or deformations.

ARKit & Oculus Visemes

Ready Player Me avatars can be downloaded with blend shapes that are compatible with real-time facial tracking and animation systems like Apple’s ARKit and Oculus LipSync API.

For Apple’s ARKit, Ready Player Me avatars come with a blendshape based facial rig that supports Apple’s ARFaceAnchor.BlendShapeLocation API. This makes it possible to build applications that use real-time facial tracking with Ready Player Me avatars. You can find the full list in the Apple ARKit section of the documentation.

For Oculus LipSync, Ready Player Me avatars come with a blend shape based facial rig that supports the Oculus Lipsync API. All avatars have the viseme blend shapes required for real-time audio-based facial animation. This makes it possible to build applications that use real-time facial animation based on audio input with Ready Player Me avatars. You can find the full list in the Oculus OVR LipSync section of the documentation.

In addition to these, Ready Player Me also provides additional blend shapes like mouthOpen, mouthSmile, eyesClosed, eyesLookUp, and eyesLookDown that you can use for more detailed and personalized facial animations.

Downloading Ready Player Me Avatars with Blendshapes / Morph Targets

By default, our avatars are generated without blendshapes for the sake of performance and optimization. If you are not going to make use of blendshapes in your project, you will probably benefit from working with a lighter .glb file.

If you want to include blendshapes in your downloaded avatar, you have to make use of the Ready Player Me REST API. In the URL for the GET request, you can specify the morph targets you want to include by adding the ?morphTargets parameter.

This parameter accepts a comma-separated list of individual morph targets or morph target standard groups to include on the avatar. The expected values of the ?morphTargets parameter are “Default”, “ARKit”, “Oculus Visemes”, and/or any individual morph target within those standard groups.

Examples:

FAQ/Troubleshooting

I downloaded an avatar with blendshapes / morph targets but they don’t work.

Are you downloading the avatar with ?lod=2? Level of Detail 2 retains only 25% of the original triangle count. This particular low detail setting is meant to show the avatars in distance, not close to the camera, where the face morphs are rendered practically useless. For performance reasons, these morph targets would be empty and not expected to work.

My avatars used to come with blendshapes included and now they don’t.

At the end of 2023, based on developer feedback asking for lighter avatar files to increase performance, we took the decision to stop including blendshapes by default in our avatars. Now, you should specify in your API request which blendshapes you would like to have your avatar downloaded with, otherwise they will come with none. For more information read the section “Downloading Ready Player Me Avatars with Blend Shapes / Morph Targets” of this very same post.



We will keep this post updated with the questions you post as comments here. Please, don’t hesitate to provide feedback or suggestions, we will share them across the team!

1 Like

After this update, which morph targets of the head aren’t using sparse accessors? Is it still possible to download the old large .glb files (all targets included, no sparse accessors) using your REST API?

Hi Vincent

We have rolled back the Sparsing for now so all Avatars should work for you like they did in the past.

Thank you, Markus. We’ve made our app compatible with sparse accessors. Our users will get the update in less than a week.