Comment utiliser le plugin
Ce guide vous accompagne dans le processus de configuration de 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 de 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 de l'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é
Plugin d'extension de modèle standard
Si vous prévoyez d'utiliser le Modèle Standard (Plus Rapide), vous devrez installer le plugin d'extension :
- Téléchargez le plugin d'extension Standard Lip Sync Extension depuis Google Drive
- Extrayez le dossier de l'archive téléchargée dans le dossier
Plugins
de votre projet (créez ce dossier s'il n'existe pas) - Assurez-vous que votre projet est configuré comme un projet C++ (même si vous n'avez pas de code C++)
- Recompilez votre projet
- Cette extension est uniquement requise si vous souhaitez utiliser le Modèle Standard. Si vous n'avez besoin que du Modèle Réaliste, vous pouvez ignorer cette étape.
- Pour plus d'informations sur la façon de construire des plugins manuellement, consultez le tutoriel Building Plugins
Plugins supplémentaires
- Si vous prévoyez d'utiliser la capture audio (par exemple, entrée microphone), installez le plugin Runtime Audio Importer.
- Si vous prévoyez d'utiliser la fonctionnalité de synthèse vocale avec mes plugins (vous pouvez avoir votre propre TTS personnalisé ou une autre entrée audio), alors en plus du plugin Runtime Audio Importer, installez également :
- Pour le TTS local, le plugin Runtime Text To Speech.
- Pour les fournisseurs de TTS externes (ElevenLabs, OpenAI), le plugin Runtime AI Chatbot Integrator.
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 MetaHuman Creator UE 5.6+
Vous devez modifier un Animation Blueprint qui sera utilisé pour les animations faciales de votre personnage MetaHuman. L'Animation Blueprint facial par défaut de 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", ce serait à
Content/MetaHumans/Bryan/BP_Bryan
) - Ouvrez le Blueprint du personnage et trouvez le composant Face
- Modifiez la propriété Anim Class pour 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 de MetaHuman (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, qui crée des personnages sans l'asset traditionnel Face_AnimBP
. Pour ces personnages, le plugin fournit un Animation Blueprint facial situé à :
Content/LipSyncData/LipSync_Face_AnimBP
Cette Animation Blueprint se trouve dans le dossier de contenu du plugin et sera écrasée à chaque mise à jour du plugin. Pour éviter de perdre vos personnalisations, il est fortement recommandé de :
- Copier cet asset dans le dossier Content de votre projet (par exemple, dans
VotreProjet/Content/MetaHumans/LipSync_Face_AnimBP
) - Utiliser votre version copiée dans la configuration de votre personnage
- Effectuer toutes vos modifications sur la version copiée
Cela garantit que vos configurations de lip sync persisteront à travers les mises à jour du plugin.
Utilisation de l'Animation Blueprint du visage du plugin :
- Localisez la classe Blueprint de votre personnage MetaHuman Creator
- Ouvrez la Blueprint du personnage et trouvez le composant Face
- Modifiez la propriété Anim Class pour utiliser
LipSync_Face_AnimBP
du plugin - Continuez avec les étapes 2-4 pour configurer la fonctionnalité Runtime MetaHuman Lip Sync
Options alternatives :
- Utiliser les instructions héritées : Vous pouvez toujours suivre les instructions UE 5.5 ci-dessus si vous travaillez avec des MetaHumans hérités ou préférez le workflow traditionnel
- Créer une Animation Blueprint personnalisée : Créez votre propre Animation Blueprint qui fonctionne avec la structure du squelette MetaHuman Creator
Note : Si vous utilisez UE 5.6+ mais travaillez avec des MetaHumans hérités (non créés via MetaHuman Creator), utilisez plutôt les instructions de l'onglet "UE 5.5 et versions antérieures".
Important : Le blend de Runtime MetaHuman Lip Sync peut être implémenté dans n'importe quel asset Animation Blueprint qui a 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 ne sont que des approches d'implémentation courantes.
Étape 2 : Configuration du graphe d'événements
Ouvrez votre Animation Blueprint du visage et passez au Event Graph
. Vous devrez créer un générateur qui traitera les données audio et générera l'animation de lip sync.
- Modèle standard (plus rapide)
- Modèle réaliste (qualité supérieure)
- 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 en tant que variable (par exemple "VisemeGenerator") pour l'utiliser dans d'autres parties du graphe
- Ajoutez le nœud
Event Blueprint Begin Play
s'il n'existe pas déjà - Ajoutez le nœud
Create Realistic MetaHuman Lip Sync Generator
et connectez-le à l'événement Begin Play - Sauvegardez la sortie en tant que variable (par exemple "RealisticLipSyncGenerator") pour l'utiliser dans d'autres parties du graphe
- (Optionnel) Configurez les paramètres du générateur en utilisant le paramètre Configuration
- (Optionnel) Définissez la taille du chunk de traitement sur l'objet Realistic MetaHuman Lip Sync Generator

Note : Le modèle réaliste est optimisé spécifiquement pour les personnages MetaHuman et n'est pas compatible avec les types de personnages personnalisés.
Options de configuration
Le nœud Create Realistic MetaHuman Lip Sync Generator
accepte un paramètre Configuration facultatif qui vous permet de personnaliser le comportement du générateur :
Type de modèle
Le paramètre Model Type détermine quelle version du modèle réaliste utiliser :
Type de modèle | Performance | Qualité visuelle | Gestion du bruit | Cas d'utilisation recommandés |
---|---|---|---|---|
Highly Optimized (Par défaut) | Performance la plus élevée, utilisation CPU la plus faible | Bonne qualité | Peut montrer des mouvements de bouche notables avec du bruit de fond ou des sons non vocaux | Environnements audio propres, scénarios critiques pour les performances |
Optimized | Bonnes performances, utilisation modérée du CPU | Haute qualité | Meilleure stabilité avec un audio bruyant | Performance et qualité équilibrées, conditions audio mixtes |
Original Unoptimized | Adapté à une utilisation en temps réel sur les CPU modernes | Qualité la plus élevée | Plus stable avec le bruit de fond et les sons non vocaux | Productions de haute qualité, environnements audio bruyants, lorsque la précision maximale est nécessaire |
Paramètres de performance
Intra Op Threads : Contrôle le nombre de threads utilisés pour les opérations de traitement internes du modèle.
- 0 (Par défaut/Automatique) : Utilise la détection automatique (généralement 1/4 des cœurs de CPU disponibles, maximum 4)
- 1-16 : Spécifiez manuellement le nombre de threads. Des valeurs plus élevées peuvent améliorer les performances sur les systèmes multi-cœurs mais utilisent plus de CPU
Inter Op Threads : Contrôle le nombre de threads utilisés pour l'exécution parallèle des différentes opérations du modèle.
- 0 (Par défaut/Automatique) : Utilise la détection automatique (généralement 1/8 des cœurs de CPU disponibles, maximum 2)
- 1-8 : Spécifiez manuellement le nombre de threads. Généralement gardé faible pour le traitement en temps réel
Utilisation de la configuration
Pour configurer le générateur :
- Dans le nœud
Create Realistic MetaHuman Lip Sync Generator
, développez le paramètre Configuration - Définissez Model Type sur votre option préférée :
- Utilisez Highly Optimized pour les meilleures performances (recommandé pour la plupart des utilisateurs)
- Utilisez Optimized pour une performance et une qualité équilibrées
- Utilisez Original Unoptimized uniquement lorsque la qualité maximale est essentielle
- Ajustez Intra Op Threads et Inter Op Threads si nécessaire (laissez à 0 pour une détection automatique dans la plupart des cas) Recommandations de performances :
- Pour la plupart des projets avec un audio propre, utilisez Hautement Optimisé pour les meilleures performances
- Si vous travaillez avec un audio contenant du bruit de fond, de la musique ou des sons non vocaux, envisagez d'utiliser les modèles Optimisé ou Original Non Optimisé pour une meilleure stabilité
- Le modèle Hautement Optimisé peut afficher des mouvements de bouche subtils lors du traitement d'audio non vocal en raison des techniques d'optimisation appliquées lors de la création du modèle
- Le modèle Original Non Optimisé, bien qu'il nécessite plus de ressources CPU, reste adapté aux applications en temps réel sur du matériel moderne et fournit les résultats les plus précis dans des conditions audio difficiles
- Ajustez le nombre de threads uniquement si vous rencontrez des problèmes de performances ou si vous avez des exigences d'optimisation spécifiques
- Un nombre de threads plus élevé ne signifie pas toujours de meilleures performances - les valeurs optimales dépendent de votre matériel spécifique et des exigences de votre projet
Configuration de la taille des blocs de traitement : La Taille des blocs de traitement détermine le nombre d'échantillons traités à chaque étape d'inférence. La valeur par défaut est 160 échantillons, ce qui correspond à 10 ms d'audio à 16 kHz (la fréquence d'échantillonnage de traitement interne). Vous pouvez ajuster cette valeur pour équilibrer la fréquence de mise à jour et l'utilisation du CPU :
- Des valeurs plus petites fournissent des mises à jour plus fréquentes mais augmentent l'utilisation du CPU
- Des valeurs plus grandes réduisent la charge CPU mais peuvent diminuer la réactivité de la synchronisation labiale
Pour définir la Taille des blocs de traitement :
- Accédez à votre objet
Realistic MetaHuman Lip Sync Generator
- Localisez la propriété
Processing Chunk Size
- Définissez votre valeur souhaitée
Il est recommandé d'utiliser des valeurs qui sont des multiples de 160. Cela s'aligne sur la structure de traitement interne du modèle. Les valeurs recommandées incluent :
160
(par défaut, minimum recommandé)320
480
640
- etc.
La Taille des blocs de traitement par défaut de 160
échantillons correspond à 10 ms d'audio à 16 kHz. L'utilisation de multiples de 160 maintient l'alignement avec cette unité de base, ce qui peut aider à optimiser l'efficacité du traitement et à maintenir un comportement cohérent entre différentes tailles de blocs.
Pour un fonctionnement fiable et cohérent avec le Modèle Réaliste, il est nécessaire de recréer le Realistic MetaHuman Lip Sync Generator chaque fois que vous souhaitez fournir de nouvelles données audio après une période d'inactivité. Cela est dû au comportement du runtime ONNX qui peut entraîner l'arrêt du fonctionnement de la synchronisation labiale lors de la réutilisation des générateurs après des périodes de silence.
Exemple de scénario : Si vous avez effectué une synchronisation labiale TTS puis arrêté, et que vous souhaitez plus tard effectuer à nouveau une synchronisation labiale avec un nouvel audio, créez un nouveau Realistic MetaHuman Lip Sync Generator au lieu de réutiliser celui existant.
Étape 3 : Configurer le traitement de l'entrée audio
Vous devez configurer une méthode pour traiter l'entrée audio. Il existe plusieurs façons de procéder selon votre source audio.
- Microphone (Temps réel)
- Microphone (Lecture)
- Text-to-Speech (Local)
- Text-to-Speech (APIs Externes)
- Depuis un fichier/tampon audio
- Tampon Audio en Flux
Cette approche effectue la synchronisation labiale en temps réel pendant la prise de parole au microphone :
- Modèle Standard (Plus Rapide)
- Modèle Réaliste (Meilleure Qualité)
- Créez une 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 - Démarrez la capture audio depuis le microphone
Le Modèle Réaliste utilise le même flux de travail de traitement audio que le Modèle Standard, mais avec la variable RealisticLipSyncGenerator
au lieu de VisemeGenerator
.
Dans chacun des exemples montrés pour le Modèle Standard, remplacez simplement :
VisemeGenerator
par votre variableRealisticLipSyncGenerator
- Les noms de fonctions et paramètres restent identiques entre les deux modèles
Cette approche capture l'audio d'un microphone, puis le lit avec synchronisation labiale :
- Modèle Standard (Plus Rapide)
- Realistic (Higher Quality) Model
- Créez une Capturable Sound Wave en utilisant Runtime Audio Importer
- Démarrez la capture audio depuis le microphone
- Avant de lire la capturable sound wave, liez-vous à son délégué
OnGeneratePCMData
- Dans la fonction liée, appelez
ProcessAudioData
depuis votre Runtime Viseme Generator
Le modèle réaliste utilise le même flux de traitement audio que le modèle standard, mais avec la variable RealisticLipSyncGenerator
au lieu de VisemeGenerator
.
Dans chacun des exemples montrés pour le modèle standard, remplacez simplement :
VisemeGenerator
par votre variableRealisticLipSyncGenerator
- Les noms de fonctions et paramètres restent identiques entre les deux modèles
Note : Si vous souhaitez traiter les données audio en morceaux plus petits pour une synchronisation labiale plus réactive, ajustez le calcul dans la fonction SetNumSamplesPerChunk
. Par exemple, diviser le taux d'échantillonnage par 150 (streaming toutes les ~6,67 ms) au lieu de 100 (streaming toutes les 10 ms) fournira des mises à jour de synchronisation labiale plus fréquentes.
- Regular
- Streaming
Cette approche synthétise la parole à partir de texte et effectue la synchronisation labiale :
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Utilisez Runtime Text To Speech pour générer la parole à partir de texte
- Utilisez Runtime Audio Importer pour importer l'audio synthétisé
- Avant de lire l'onde sonore importée, liez-vous à son délégué
OnGeneratePCMData
- Dans la fonction liée, appelez
ProcessAudioData
depuis votre Runtime Viseme Generator
Le TTS local fourni par le plugin Runtime Text To Speech n'est actuellement pas pris en charge avec le modèle réaliste en raison de conflits du runtime ONNX. Pour la synthèse vocale avec le modèle réaliste, envisagez d'utiliser des services TTS externes (tels qu'OpenAI ou ElevenLabs via Runtime AI Chatbot Integrator) ou utilisez plutôt le modèle standard.
Note : Si vous souhaitez traiter les données audio en morceaux plus petits pour une synchronisation labiale plus réactive, ajustez le calcul dans la fonction SetNumSamplesPerChunk
. Par exemple, diviser le taux d'échantillonnage par 150 (streaming toutes les ~6,67 ms) au lieu de 100 (streaming toutes les 10 ms) fournira des mises à jour de synchronisation labiale plus fréquentes.
Cette approche utilise la synthèse vocale en streaming avec la synchronisation labiale en temps réel :
- Standard (Modèle Plus Rapide)
- Réaliste (Modèle de Meilleure Qualité)
- Utilisez Runtime Text To Speech pour générer de la parole en streaming à partir de texte
- Utilisez Runtime Audio Importer pour importer l'audio synthétisé
- Avant de lire la forme d'onde sonore en streaming, liez-vous à son délégué
OnGeneratePCMData
- Dans la fonction liée, appelez
ProcessAudioData
depuis votre Runtime Viseme Generator
Le TTS local fourni par le plugin Runtime Text To Speech n'est actuellement pas pris en charge avec le modèle Réaliste en raison de conflits du runtime ONNX. Pour la synthèse vocale avec le modèle Réaliste, envisagez d'utiliser des services TTS externes (tels qu'OpenAI ou ElevenLabs via Runtime AI Chatbot Integrator) ou utilisez plutôt le modèle Standard.
Remarque : Si vous souhaitez traiter les données audio en plus petits morceaux pour une synchronisation labiale plus réactive, ajustez le calcul dans la fonction SetNumSamplesPerChunk
. Par exemple, diviser la fréquence d'échantillonnage par 150 (streaming toutes les ~6,67 ms) au lieu de 100 (streaming toutes les 10 ms) fournira des mises à jour de synchronisation labiale plus fréquentes.
- Régulier
- Streaming
Cette approche utilise le plugin Runtime AI Chatbot Integrator pour générer de la parole synthétisée à partir de services d'IA (OpenAI ou ElevenLabs) et effectuer la synchronisation labiale :
- Standard (Modèle Plus Rapide)
- Realistic (Higher Quality) Model
- Utilisez Runtime AI Chatbot Integrator pour générer de la parole à partir de 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 la forme d'onde sonore importée, liez-vous à son délégué
OnGeneratePCMData
- Dans la fonction liée, appelez
ProcessAudioData
depuis votre Runtime Viseme Generator

Le modèle réaliste utilise le même flux de travail de traitement audio que le modèle standard, mais avec la variable RealisticLipSyncGenerator
au lieu de VisemeGenerator
.
Dans chacun des exemples montrés pour le modèle standard, remplacez simplement :
VisemeGenerator
par votre variableRealisticLipSyncGenerator
- Les noms de fonctions et paramètres restent identiques entre les deux modèles
Note : Si vous souhaitez traiter les données audio en morceaux plus petits pour une synchronisation labiale plus réactive, ajustez le calcul dans la fonction SetNumSamplesPerChunk
. Par exemple, diviser la fréquence d'échantillonnage par 150 (streaming toutes les ~6,67 ms) au lieu de 100 (streaming toutes les 10 ms) fournira des mises à jour de synchronisation labiale plus fréquentes.
Cette approche utilise le plugin Runtime AI Chatbot Integrator pour générer une parole synthétisée en streaming à partir de services d'IA (OpenAI ou ElevenLabs) et effectuer la synchronisation labiale :
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Utilisez Runtime AI Chatbot Integrator pour vous connecter aux API TTS en streaming (comme ElevenLabs Streaming API)
- Utilisez Runtime Audio Importer pour importer les données audio synthétisées
- Avant de lire la forme d'onde sonore en streaming, liez-vous à son délégué
OnGeneratePCMData
- Dans la fonction liée, appelez
ProcessAudioData
depuis votre Runtime Viseme Generator
Le modèle réaliste utilise le même flux de travail de traitement audio que le modèle standard, mais avec la variable RealisticLipSyncGenerator
au lieu de VisemeGenerator
.
Dans chacun des exemples montrés pour le modèle standard, remplacez simplement :
VisemeGenerator
par votre variableRealisticLipSyncGenerator
- Les noms de fonctions et paramètres restent identiques entre les deux modèles
Remarque : Si vous souhaitez traiter les données audio en segments plus petits pour une synchronisation labiale plus réactive, ajustez le calcul dans la fonction SetNumSamplesPerChunk
. Par exemple, diviser la fréquence d'échantillonnage par 150 (diffusion toutes les ~6,67 ms) au lieu de 100 (diffusion toutes les 10 ms) fournira des mises à jour de synchronisation labiale plus fréquentes.
Cette approche utilise des fichiers audio préenregistrés ou des tampons audio pour la synchronisation labiale :
- Modèle Standard (Plus Rapide)
- Modèle Réaliste (Qualité Supérieure)
- Utilisez Runtime Audio Importer pour importer un fichier audio depuis le disque ou la mémoire
- Avant de lire la onde sonore importée, liez-vous à son délégué
OnGeneratePCMData
- Dans la fonction liée, appelez
ProcessAudioData
depuis votre Runtime Viseme Generator - Jouez la onde sonore importée et observez l'animation de synchronisation labiale
Le Modèle Réaliste utilise le même flux de travail de traitement audio que le Modèle Standard, mais avec la variable RealisticLipSyncGenerator
au lieu de VisemeGenerator
.
Dans chacun des exemples montrés pour le Modèle Standard, remplacez simplement :
VisemeGenerator
par votre variableRealisticLipSyncGenerator
- Les noms de fonctions et paramètres restent identiques entre les deux modèles
Remarque : Si vous souhaitez traiter les données audio en segments plus petits pour une synchronisation labiale plus réactive, ajustez le calcul dans la fonction SetNumSamplesPerChunk
. Par exemple, diviser la fréquence d'échantillonnage par 150 (diffusion toutes les ~6,67 ms) au lieu de 100 (diffusion toutes les 10 ms) fournira des mises à jour de synchronisation labiale plus fréquentes.
Pour diffuser des données audio à partir d'un tampon, vous avez besoin de :
- Modèle Standard (Plus Rapide)
- Modèle Réaliste (Qualité Supérieure)
- Des données audio au format PCM float (un tableau d'échantillons en virgule flottante) disponibles depuis votre source de streaming
- Le taux d'échantillonnage et le nombre de canaux
- Appelez
ProcessAudioData
depuis votre Runtime Viseme Generator avec ces paramètres au fur et à mesure que les fragments audio deviennent disponibles
Voici un exemple de traitement de la synchronisation labiale à partir de données audio en streaming :
Note : Lorsque vous utilisez des sources audio en streaming, assurez-vous de gérer le timing de la lecture audio de manière appropriée pour éviter une lecture déformée. Consultez la documentation Streaming Sound Wave pour plus d'informations sur la gestion correcte de l'audio en streaming.
Le Modèle Réaliste utilise le même flux de travail de traitement audio que le Modèle Standard, mais avec la variable RealisticLipSyncGenerator
au lieu de VisemeGenerator
.
Dans chacun des exemples montrés pour le Modèle Standard, remplacez simplement :
VisemeGenerator
par votre variableRealisticLipSyncGenerator
- Les noms de fonctions et paramètres restent identiques entre les deux modèles
Note : Lorsque vous utilisez des sources audio en streaming, assurez-vous de gérer le timing de la lecture audio de manière appropriée pour éviter une lecture déformée. Consultez la documentation Streaming Sound Wave pour plus d'informations sur la gestion correcte de l'audio en streaming.
Note : Si vous souhaitez traiter les données audio en fragments plus petits pour une synchronisation labiale plus réactive, ajustez le calcul dans la fonction SetNumSamplesPerChunk
. Par exemple, diviser le taux d'échantillonnage par 150 (streaming toutes les ~6,67 ms) au lieu de 100 (streaming toutes les 10 ms) fournira des mises à jour de synchronisation labiale plus fréquentes.
Étape 4 : Configuration du Anim Graph
Après avoir configuré le Event Graph, passez au Anim Graph
pour connecter le générateur à l'animation du personnage :
Synchronisation Labiale
- Modèle Standard (Plus Rapide)
- Modèle Réaliste (Qualité Supérieure)
- Localisez la pose qui contient le visage MetaHuman (généralement à partir de
Use cached pose 'Body Pose'
) - Ajoutez le nœud
Blend Runtime MetaHuman Lip Sync
- Connectez la pose à la
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
de l'Output Pose
Lorsqu'une synchronisation labiale est détectée dans l'audio, votre personnage s'animera dynamiquement en conséquence :
- Localisez la pose qui contient le visage MetaHuman (généralement à partir de
Use cached pose 'Body Pose'
) - Ajoutez le nœud
Blend Realistic MetaHuman Lip Sync
- Connectez la pose à la
Source Pose
du nœudBlend Realistic MetaHuman Lip Sync
- Connectez votre variable
RealisticLipSyncGenerator
à la brocheLip Sync Generator
- Connectez la sortie du nœud
Blend Realistic MetaHuman Lip Sync
à la brocheResult
de l'Output Pose
Le Modèle Réaliste offre une qualité visuelle améliorée avec des mouvements de bouche plus naturels :
Note : Le Modèle Réaliste est conçu exclusivement pour les personnages MetaHuman et n'est pas compatible avec les types de personnages personnalisés.
Animation de Rire
Vous pouvez également ajouter des animations de rire qui répondront dynamiquement au rire détecté dans l'audio :
- Ajoutez le nœud
Blend Runtime MetaHuman Laughter
- Connectez votre variable
RuntimeVisemeGenerator
à la brocheViseme Generator
- Si vous utilisez déjà la synchronisation labiale :
- Connectez la sortie du nœud
Blend Runtime MetaHuman Lip Sync
à laSource Pose
du nœudBlend Runtime MetaHuman Laughter
- Connectez la sortie du nœud
Blend Runtime MetaHuman Laughter
à la brocheResult
de l'Output Pose
- Connectez la sortie du nœud
- Si vous utilisez uniquement le rire sans synchronisation labiale :
- Connectez votre pose source directement à la
Source Pose
du nœudBlend Runtime MetaHuman Laughter
- Connectez la sortie à la broche
Result
- Connectez votre pose source directement à la
Lorsqu'un rire est détecté dans l'audio, votre personnage s'animera dynamiquement en conséquence :
Combinaison avec les Animations Faciales et Corporelles
Pour appliquer la synchronisation labiale et le rire parallèlement aux animations corporelles existantes et aux animations faciales personnalisées (telles que les expressions, les émotions ou tout autre mouvement facial) 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 vrai. - Configurez la structure des couches :
- Ajoutez 1 élément au tableau
Layer Setup
- Ajoutez 3 éléments aux
Branch Filters
pour la couche, avec lesBone Name
suivants :FACIAL_C_FacialRoot
FACIAL_C_Neck2Root
FACIAL_C_Neck1Root
- Ajoutez 1 élément au tableau
- Important pour les animations faciales personnalisées : Dans
Curve Blend Option
, sélectionnez "Use Max Value". Cela permet aux animations faciales personnalisées (expressions, émotions, etc.) d'être correctement superposées à la synchronisation labiale. - Effectuez les connexions :
- Animations existantes (comme
BodyPose
) → entréeBase Pose
- Sortie d'animation faciale (des nœuds de synchronisation labiale et/ou de rire) → entrée
Blend Poses 0
- Nœud de mélange en couches → pose
Result
finale
- Animations existantes (comme
Pourquoi cela fonctionne : Les filtres de branche isolent les os d'animation faciale, permettant à la synchronisation labiale et au rire de se mélanger exclusivement avec les mouvements faciaux tout en préservant les animations corporelles originales. L'option de mélange de courbes "Use Max Value" prend la valeur maximale de chaque courbe plutôt que de les mélanger de manière additive, permettant aux animations faciales personnalisées (comme les expressions et les émotions) d'être correctement combinées avec la synchronisation labiale sans conflits. Cela correspond à la structure du rig facial MetaHuman pour une intégration naturelle.
Note : Les fonctionnalités de synchronisation labiale et de rire sont conçues pour fonctionner de manière non destructive avec votre configuration d'animation existante. Elles n'affectent que les os faciaux spécifiques nécessaires au mouvement de la 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 la synchronisation labiale/le rire) soit après elles (laissant la synchronisation labiale/le rire se mélanger par-dessus vos animations existantes). Cette flexibilité vous permet de combiner la synchronisation labiale et le rire avec le clignement des yeux, les mouvements des sourcils, les expressions émotionnelles et d'autres animations faciales sans conflits.
Ajustement fin du comportement de la synchronisation labiale
Après avoir configuré la fonctionnalité de base de la synchronisation labiale, vous pouvez vouloir affiner des aspects spécifiques du mouvement de la bouche pour mieux correspondre aux exigences de votre projet.
Contrôle de la protrusion de la langue
Dans le modèle standard de synchronisation labiale, vous pouvez remarquer un mouvement excessif de la langue vers l'avant pendant certains phonèmes. Pour contrôler la protrusion de la langue :
- Après votre nœud
Blend Runtime MetaHuman Lip Sync
ouBlend Realistic MetaHuman Lip Sync
, ajoutez un nœudModify Curve
- Faites un clic droit sur le nœud
Modify Curve
et sélectionnez Add Curve Pin - Ajoutez une broche de courbe avec le nom
CTRL_expressions_tongueOut
- Définissez la propriété Apply Mode du nœud sur Scale
- Ajustez le paramètre Value pour contrôler l'extension de la langue (par exemple, 0.8 pour réduire la protrusion de 20%)
Contrôle de l'Ouverture de la Mâchoire
La synchronisation labiale réaliste peut produire des mouvements de mâchoire trop réactifs selon votre contenu audio et vos exigences visuelles. Pour ajuster l'intensité de l'ouverture de la mâchoire :
- Après votre nœud de fusion de synchronisation labiale, ajoutez un nœud
Modify Curve
- Faites un clic droit sur le nœud
Modify Curve
et sélectionnez Add Curve Pin - Ajoutez une broche de courbe avec le nom
CTRL_expressions_jawOpen
- Définissez la propriété Apply Mode du nœud sur Scale
- Ajustez le paramètre Value pour contrôler l'amplitude d'ouverture de la mâchoire (par exemple, 0.9 pour réduire le mouvement de la mâchoire de 10%)
Configuration
Configuration de la Synchronisation Labiale
- Standard (Faster) Model
- Realistic (Higher Quality) Model
Le nœud Blend Runtime MetaHuman Lip Sync
a des options de configuration dans son panneau de propriétés :
Propriété | Par défaut | Description |
---|---|---|
Interpolation Speed | 25 | Contrôle la rapidité avec laquelle les mouvements labiaux transitent entre les visèmes. Des valeurs plus élevées entraînent des transitions plus rapides et plus abruptes. |
Reset Time | 0.2 | La durée en secondes après laquelle la synchronisation labiale est réinitialisée. Ceci est utile pour empêcher la synchronisation labiale de continuer après l'arrêt de l'audio. |
Le nœud Blend Realistic MetaHuman Lip Sync
a des options de configuration dans son panneau de propriétés :
Propriété | Par défaut | Description |
---|---|---|
Interpolation Speed | 30 | Contrôle la rapidité avec laquelle les mouvements labiaux transitent entre les positions. Des valeurs plus élevées entraînent des transitions plus rapides et plus abruptes. |
Reset Time | 0.2 | La durée en secondes après laquelle la synchronisation labiale est réinitialisée. Ceci est utile pour empêcher la synchronisation labiale de continuer après l'arrêt de l'audio. |
Configuration du Rire
Le nœud Blend Runtime MetaHuman Laughter
a ses propres options de configuration :
Propriété | Par défaut | Description |
---|---|---|
Interpolation Speed | 25 | Contrôle la rapidité avec laquelle les mouvements labiaux transitent entre les animations de rire. Des valeurs plus élevées entraînent des transitions plus rapides et plus abruptes. |
Reset Time | 0.2 | La durée en secondes après laquelle le rire est réinitialisé. Ceci est utile pour empêcher le rire de continuer après l'arrêt de l'audio. |
Max Laughter Weight | 0.7 | Échelle l'intensité maximale de l'animation du rire (0.0 - 1.0). |
Choix Entre les Modèles de Synchronisation Labiale
Lorsque vous décidez quel modèle de lip sync utiliser pour votre projet, prenez en compte ces facteurs :
Considération | Modèle Standard | Modèle Réaliste |
---|---|---|
Compatibilité des Personnages | MetaHumans et tous les types de personnages personnalisés | MetaHumans uniquement |
Qualité Visuelle | Bon lip sync avec des performances efficaces | Réalisme amélioré avec des mouvements de bouche plus naturels |
Performances | Optimisé pour toutes les plateformes, y compris mobile/VR | Besoins en ressources légèrement plus élevés |
Cas d'Utilisation | Applications générales, jeux, VR/AR, mobile | Expériences cinématiques, interactions rapprochées avec les personnages |
Compatibilité des Versions du Moteur
Si vous utilisez Unreal Engine 5.2, le Modèle Réaliste pourrait ne pas fonctionner correctement en raison d'un bogue dans la bibliothèque de rééchantillonnage d'UE. Pour les utilisateurs d'UE 5.2 qui ont besoin d'une fonctionnalité de lip sync fiable, veuillez utiliser le Modèle Standard à la place.
Ce problème est spécifique à UE 5.2 et n'affecte pas les autres versions du moteur.
Pour la plupart des projets, le Modèle Standard offre un excellent équilibre entre qualité et performances tout en prenant en charge la plus large gamme de types de personnages. Le Modèle Réaliste est idéal lorsque vous avez besoin de la plus haute fidélité visuelle spécifiquement pour les personnages MetaHuman dans des contextes où la surcharge de performance est moins critique.