Comment utiliser le plugin
Ce guide vous explique comment configurer Runtime MetaHuman Lip Sync pour vos personnages MetaHuman.
Note : Runtime MetaHuman Lip Sync fonctionne avec les MetaHuman et les personnages personnalisés. Le plugin prend en charge divers types de personnages, notamment :
- Les personnages commerciaux populaires (Daz Genesis 8/9, Reallusion CC3/CC4, Mixamo, ReadyPlayerMe, etc.)
- Les personnages avec des blendshapes basés sur FACS
- Les modèles utilisant les standards de blendshape ARKit
- Les personnages avec des ensembles de phonèmes Preston Blair
- Les systèmes de phonèmes 3ds Max
- Tout personnage avec des morph targets personnalisés pour les expressions faciales
Pour des instructions détaillées sur la configuration des personnages personnalisés, y compris les références de mappage des visèmes pour tous les standards ci-dessus, consultez le Guide de configuration des personnages personnalisés.
Prérequis
Avant de commencer, assurez-vous que :
- Le plugin MetaHuman est activé dans votre projet (Remarque : À partir d'UE 5.6, cette étape n'est plus nécessaire car la fonctionnalité MetaHuman est intégrée directement dans le moteur)
- Vous avez au moins un personnage MetaHuman téléchargé et disponible dans votre projet
- Le plugin Runtime MetaHuman Lip Sync est installé
Plugins supplémentaires :
- Si vous prévoyez d'utiliser la capture audio (par exemple, l'entrée microphone), installez le plugin Runtime Audio Importer.
- Si vous prévoyez d'utiliser la fonctionnalité synthèse vocale, installez le plugin Runtime Text To Speech.
Configuration spécifique à la plateforme
Configuration Android / Meta Quest
Si vous ciblez les plateformes Android ou Meta Quest et rencontrez des erreurs de compilation avec ce plugin, vous devrez désactiver l'architecture Android x86_64 (x64) dans les paramètres de votre projet :
- Allez dans Edit > Project Settings
- Naviguez vers Platforms > Android
- Sous Platforms - Android, section Build, trouvez Support x86_64 [aka x64] et assurez-vous qu'il est désactivé, comme indiqué ci-dessous
En effet, le plugin ne prend actuellement en charge que les architectures arm64-v8a et armeabi-v7a pour les plateformes Android / Meta Quest.
Processus de configuration
Étape 1 : Localiser et modifier le Blueprint d'animation faciale
- UE 5.5 et versions antérieures (ou MetaHumans Legacy dans UE 5.6+)
- Personnages du MetaHuman Creator UE 5.6+
Vous devez modifier un Animation Blueprint qui sera utilisé pour les animations faciales de votre personnage MetaHuman. Le Animation Blueprint facial par défaut des MetaHuman se trouve à l'emplacement :
Content/MetaHumans/Common/Face/Face_AnimBP
Vous avez plusieurs options pour implémenter la fonctionnalité de lip sync :
- Modifier l'Asset par Défaut (Option la Plus Simple)
- Créer un Duplicata
- Utiliser un Animation Blueprint Personnalisé
Ouvrez directement le Face_AnimBP
par défaut et effectuez vos modifications. Tous les changements affecteront tous les personnages MetaHuman utilisant ce Animation Blueprint.
Note : Cette approche est pratique mais impactera tous les personnages utilisant le Animation Blueprint par défaut.
- Dupliquez
Face_AnimBP
et donnez-lui un nom descriptif - Localisez la classe Blueprint de votre personnage (par exemple, pour le personnage "Bryan", elle se trouverait à
Content/MetaHumans/Bryan/BP_Bryan
) - Ouvrez le Blueprint du personnage et trouvez le composant Face
- Modifiez la propriété Anim Class pour utiliser votre nouveau Animation Blueprint dupliqué
Note : Cette approche vous permet de personnaliser le lip sync pour des personnages spécifiques tout en laissant les autres inchangés.
Vous pouvez implémenter le mélange de lip sync dans n'importe quel Animation Blueprint ayant accès aux os faciaux requis :
- Créez ou utilisez un Animation Blueprint personnalisé existant
- Assurez-vous que votre Animation Blueprint fonctionne avec un squelette contenant les mêmes os faciaux que le
Face_Archetype_Skeleton
par défaut des MetaHumans (qui est le squelette standard utilisé pour tout personnage MetaHuman)
Note : Cette approche vous offre une flexibilité maximale pour l'intégration avec des systèmes d'animation personnalisés.
À partir d'UE 5.6, le nouveau système MetaHuman Creator a été introduit, créant des personnages sans l'asset traditionnel Face_AnimBP
. Pour ces personnages, le plugin fournit un Animation Blueprint facial situé à :
Content/LipSyncData/LipSync_Face_AnimBP
Utilisation du Blueprint d'Animation Faciale du Plugin :
- Localisez la classe Blueprint de votre personnage MetaHuman Creator
- Ouvrez le Blueprint du personnage et trouvez le composant Face
- Modifiez la propriété Anim Class pour utiliser le
LipSync_Face_AnimBP
du plugin - Poursuivez avec les Étapes 2-4 pour configurer la fonctionnalité Runtime MetaHuman Lip Sync
Options Alternatives :
- Utiliser les Instructions Legacy : Vous pouvez toujours suivre les instructions UE 5.5 ci-dessus si vous travaillez avec des MetaHumans legacy ou préférez le workflow traditionnel
- Créer un Animation Blueprint Personnalisé : Créez votre propre Animation Blueprint compatible avec la structure du squelette MetaHuman Creator
Note : Si vous utilisez UE 5.6+ mais travaillez avec des MetaHumans legacy (non créés via MetaHuman Creator), utilisez plutôt les instructions de l'onglet "UE 5.5 and Earlier".
Important : Le blending Runtime MetaHuman Lip Sync peut être implémenté dans n'importe quel asset Animation Blueprint ayant accès à une pose contenant les os faciaux présents dans le Face_Archetype_Skeleton
par défaut des MetaHumans. Vous n'êtes pas limité aux options ci-dessus - ce sont simplement des approches d'implémentation courantes.
Étape 2 : Configuration du Event Graph
Ouvrez votre Face Animation Blueprint et basculez vers le Event Graph
. Vous devrez créer un Runtime Viseme Generator qui traitera les données audio et générera des visèmes.
- Ajoutez le nœud
Event Blueprint Begin Play
s'il n'existe pas déjà - Ajoutez le nœud
Create Runtime Viseme Generator
et connectez-le à l'événement Begin Play - Sauvegardez la sortie dans une variable (ex: "VisemeGenerator") pour utilisation ailleurs dans le graphe
Étape 3 : Configuration du traitement de l'entrée audio
Vous devez configurer une méthode pour traiter l'entrée audio. Il existe plusieurs approches selon votre source audio.
- Microphone (Temps réel)
- Microphone (Playback)
- Text-to-Speech (Local)
- Text-to-Speech (APIs Externes)
- Depuis Fichier/Buffer Audio
- Source Audio Personnalisée
Cette approche effectue le lip sync en temps réel pendant la prise de parole via microphone :
- Créez un Capturable Sound Wave en utilisant Runtime Audio Importer
- Avant de commencer la capture audio, liez-vous au délégué
OnPopulateAudioData
- Dans la fonction liée, appelez
ProcessAudioData
depuis votre Runtime Viseme Generator - Lancez la capture audio depuis le microphone
Cette approche capture l'audio depuis un microphone, puis le lit avec lip sync :
- Créez un Capturable Sound Wave en utilisant Runtime Audio Importer
- Lancez la capture audio depuis le microphone
- Avant de lire le capturable sound wave, liez-vous à son délégué
OnGeneratePCMData
- Dans la fonction liée, appelez
ProcessAudioData
depuis votre Runtime Viseme Generator
Note : Si vous souhaitez traiter les données audio par plus petits chunks pour un lip sync plus réactif, ajustez le calcul dans la fonction SetNumSamplesPerChunk
. Par exemple, diviser le sample rate par 150 (streaming toutes les ~6.67 ms) au lieu de 100 (streaming toutes les 10 ms) fournira des mises à jour de lip sync plus fréquentes.
- Standard
- Streaming
Cette approche synthétise la parole depuis du texte et effectue le lip sync :
- Utilisez Runtime Text To Speech pour générer la parole depuis du texte
- Utilisez Runtime Audio Importer pour importer l'audio synthétisé
- Avant de lire le sound wave importé, liez-vous à son délégué
OnGeneratePCMData
- Dans la fonction liée, appelez
ProcessAudioData
depuis votre Runtime Viseme Generator
Note : Si vous souhaitez traiter les données audio par plus petits chunks pour un lip sync plus réactif, ajustez le calcul dans la fonction SetNumSamplesPerChunk
. Par exemple, diviser le sample rate par 150 (streaming toutes les ~6.67 ms) au lieu de 100 (streaming toutes les 10 ms) fournira des mises à jour de lip sync plus fréquentes.
Cette approche utilise la synthèse text-to-speech en streaming avec lip sync en temps réel :
- Utilisez Runtime Text To Speech pour générer de la parole en streaming depuis du texte
- Utilisez Runtime Audio Importer pour importer l'audio synthétisé
- Avant de lire le sound wave en streaming, liez-vous à son délégué
OnGeneratePCMData
- Dans la fonction liée, appelez
ProcessAudioData
depuis votre Runtime Viseme Generator
Note : Si vous souhaitez traiter les données audio par plus petits chunks pour un lip sync plus réactif, ajustez le calcul dans la fonction SetNumSamplesPerChunk
. Par exemple, diviser le sample rate par 150 (streaming toutes les ~6.67 ms) au lieu de 100 (streaming toutes les 10 ms) fournira des mises à jour de lip sync plus fréquentes.
- Standard
- Streaming
Cette approche utilise le plugin Runtime AI Chatbot Integrator pour générer de la parole synthétisée depuis des services AI et effectuer le lip sync :
- Utilisez Runtime AI Chatbot Integrator pour générer de la parole depuis du texte en utilisant des APIs externes (OpenAI, ElevenLabs, etc.)
- Utilisez Runtime Audio Importer pour importer les données audio synthétisées
- Avant de lire le sound wave importé, liez-vous à son délégué
OnGeneratePCMData
- Dans la fonction liée, appelez
ProcessAudioData
depuis votre Runtime Viseme Generator
Note : Si vous souhaitez traiter les données audio par plus petits chunks pour un lip sync plus réactif, ajustez le calcul dans la fonction SetNumSamplesPerChunk
. Par exemple, diviser le sample rate par 150 (streaming toutes les ~6.67 ms) au lieu de 100 (streaming toutes les 10 ms) fournira des mises à jour de lip sync plus fréquentes.
Cette approche utilise le plugin Runtime AI Chatbot Integrator pour générer de la parole synthétisée en streaming depuis des services AI et effectuer le lip sync :
- Utilisez Runtime AI Chatbot Integrator pour vous connecter à des APIs TTS en streaming (comme ElevenLabs Streaming API)
- Utilisez Runtime Audio Importer pour importer les données audio synthétisées
- Avant de lire le sound wave en streaming, liez-vous à son délégué
OnGeneratePCMData
- Dans la fonction liée, appelez
ProcessAudioData
depuis votre Runtime Viseme Generator
Note : Si vous souhaitez traiter les données audio par plus petits chunks pour un lip sync plus réactif, ajustez le calcul dans la fonction SetNumSamplesPerChunk
. Par exemple, diviser le sample rate par 150 (streaming toutes les ~6.67 ms) au lieu de 100 (streaming toutes les 10 ms) fournira des mises à jour de lip sync plus fréquentes.
Cette approche utilise des fichiers audio pré-enregistrés ou des buffers audio pour le lip sync :
- Utilisez Runtime Audio Importer pour importer un fichier audio depuis le disque ou la mémoire
- Avant de lire le sound wave importé, liez-vous à son délégué
OnGeneratePCMData
- Dans la fonction liée, appelez
ProcessAudioData
depuis votre Runtime Viseme Generator - Jouez le sound wave importé et observez l'animation de lip sync
Note : Si vous souhaitez traiter les données audio par plus petits chunks pour un lip sync plus réactif, ajustez le calcul dans la fonction SetNumSamplesPerChunk
. Par exemple, diviser le sample rate par 150 (streaming toutes les ~6.67 ms) au lieu de 100 (streaming toutes les 10 ms) fournira des mises à jour de lip sync plus fréquentes.
Pour une source audio personnalisée, vous avez besoin :
- De données audio au format PCM float (un tableau d'échantillons en virgule flottante)
- Du sample rate et du nombre de canaux
- D'appeler
ProcessAudioData
depuis votre Runtime Viseme Generator avec ces paramètres
Voici un exemple de streaming audio depuis une source personnalisée :
Note : Si vous souhaitez traiter les données audio par plus petits chunks pour un lip sync plus réactif, ajustez le calcul dans la fonction SetNumSamplesPerChunk
. Par exemple, diviser le sample rate par 150 (streaming toutes les ~6.67 ms) au lieu de 100 (streaming toutes les 10 ms) fournira des mises à jour de lip sync plus fréquentes.
Étape 4 : Configuration de l'Anim Graph
Après avoir configuré le Event Graph, basculez vers l'Anim Graph
pour connecter le viseme generator à l'animation du personnage :
Lip Sync
- Localisez la pose contenant le visage MetaHuman (typiquement depuis
Use cached pose 'Body Pose'
) - Ajoutez le nœud
Blend Runtime MetaHuman Lip Sync
- Connectez la pose au
Source Pose
du nœudBlend Runtime MetaHuman Lip Sync
- Connectez votre variable
RuntimeVisemeGenerator
à la brocheViseme Generator
- Connectez la sortie du nœud
Blend Runtime MetaHuman Lip Sync
à la brocheResult
duOutput Pose
Lorsque du lip sync est détecté dans l'audio, votre personnage s'animera dynamiquement en conséquence :
Animation de Rire
Vous pouvez aussi ajouter des animations de rire qui répondront dynamiquement aux rires détectés dans l'audio :
- Ajoutez le nœud
Blend Runtime MetaHuman Laughter
- Connectez votre variable
RuntimeVisemeGenerator
à la brocheViseme Generator
- Si vous utilisez déjà le lip sync :
- Connectez la sortie du nœud
Blend Runtime MetaHuman Lip Sync
auSource Pose
du nœudBlend Runtime MetaHuman Laughter
- Connectez la sortie du nœud
Blend Runtime MetaHuman Laughter
à la brocheResult
duOutput Pose
- Connectez la sortie du nœud
- Si vous utilisez uniquement le rire sans lip sync :
- Connectez votre source pose directement au
Source Pose
du nœudBlend Runtime MetaHuman Laughter
- Connectez la sortie à la broche
Result
- Connectez votre source pose directement au
Lorsqu'un rire est détecté dans l'audio, votre personnage s'animera dynamiquement en conséquence :
Combinaison avec les Animations Corporelles
Pour appliquer le lip sync et le rire parallèlement aux animations corporelles existantes sans les écraser :
- Ajoutez un nœud
Layered blend per bone
entre vos animations corporelles et la sortie finale. Assurez-vous queUse Attached Parent
est activé. - Configurez le layer setup :
- Ajoutez 1 item au tableau
Layer Setup
- Ajoutez 3 items aux
Branch Filters
pour le layer, avec lesBone Name
suivants :FACIAL_C_FacialRoot
FACIAL_C_Neck2Root
FACIAL_C_Neck1Root
- Ajoutez 1 item au tableau
- Faites les connexions :
- Animations existantes (comme
BodyPose
) → entréeBase Pose
- Sortie d'animation faciale (depuis les nœuds lip sync et/ou rire) → entrée
Blend Poses 0
- Nœud layered blend → pose
Result
finale
- Animations existantes (comme
Pourquoi cela fonctionne : Les branch filters isolent les os d'animation faciale, permettant au lip sync et au rire de se blender exclusivement avec les mouvements faciaux tout en préservant les animations corporelles originales. Cela correspond à la structure du rig facial MetaHuman, assurant une intégration naturelle.
Note : Les fonctionnalités lip sync et rire sont conçues pour fonctionner de manière non destructive avec votre setup d'animation existant. Elles n'affectent que les os faciaux spécifiques nécessaires aux mouvements de bouche, laissant intactes les autres animations faciales. Cela signifie que vous pouvez les intégrer en toute sécurité à n'importe quel point de votre chaîne d'animation - soit avant d'autres animations faciales (permettant à ces animations d'écraser le lip sync/rire) soit après elles (laissant le lip sync/rire se blender par-dessus vos animations existantes). Cette flexibilité vous permet de combiner lip sync et rire avec des clignements d'yeux, mouvements de sourcils, expressions émotionnelles et autres animations faciales sans conflits.
Configuration
Configuration du Lip Sync
Le nœud Blend Runtime MetaHuman Lip Sync
possède des options de configuration dans son panneau de propriétés :
Propriété | Défaut | Description |
---|---|---|
Interpolation Speed | 25 | Contrôle la vitesse de transition entre les visèmes. Des valeurs plus élevées donnent des transitions plus rapides et abruptes. |
Reset Time | 0.2 | Durée en secondes après laquelle le lip sync est réinitialisé. Utile pour éviter que le lip sync ne continue après l'arrêt de l'audio. |
Configuration du Rire
Le nœud Blend Runtime MetaHuman Laughter
possède ses propres options de configuration :
Propriété | Défaut | Description |
---|---|---|
Interpolation Speed | 25 | Contrôle la vitesse de transition entre les animations de rire. Des valeurs plus élevées donnent des transitions plus rapides et abruptes. |
Reset Time | 0.2 | Durée en secondes après laquelle le rire est réinitialisé. Utile pour éviter que le rire ne continue après l'arrêt de l'audio. |
Max Laughter Weight | 0.7 | Échelle l'intensité maximale de l'animation de rire (0.0 - 1.0). |