Wie man das Plugin verwendet
Diese Anleitung führt Sie durch den Prozess der Einrichtung von Runtime MetaHuman Lip Sync für Ihre MetaHuman-Charaktere.
Hinweis: Runtime MetaHuman Lip Sync funktioniert sowohl mit MetaHuman- als auch mit benutzerdefinierten Charakteren. Das Plugin unterstützt verschiedene Charaktertypen, darunter:
- Beliebte kommerzielle Charaktere (Daz Genesis 8/9, Reallusion CC3/CC4, Mixamo, ReadyPlayerMe, etc.)
- Charaktere mit FACS-basierten Blendshapes
- Modelle, die ARKit-Blendshape-Standards verwenden
- Charaktere mit Preston Blair-Phonemsätzen
- 3ds Max-Phonemsysteme
- Jeder Charakter mit benutzerdefinierten Morph Targets für Gesichtsausdrücke
Detaillierte Anleitungen zur Einrichtung benutzerdefinierter Charaktere, einschließlich Visem-Mapping-Referenzen für alle oben genannten Standards, finden Sie im Leitfaden zur Einrichtung benutzerdefinierter Charaktere.
Voraussetzungen
Bevor Sie beginnen, stellen Sie sicher:
- Das MetaHuman-Plugin ist in Ihrem Projekt aktiviert (Hinweis: Ab UE 5.6 ist dieser Schritt nicht mehr erforderlich, da die MetaHuman-Funktionalität direkt in die Engine integriert ist)
- Sie haben mindestens einen MetaHuman-Charakter heruntergeladen und in Ihrem Projekt verfügbar
- Das Runtime MetaHuman Lip Sync-Plugin ist installiert
Zusätzliche Plugins:
- Wenn Sie Audioaufnahme (z.B. Mikrofoneingang) verwenden möchten, installieren Sie das Runtime Audio Importer-Plugin.
- Wenn Sie Text-zu-Sprache-Funktionalität nutzen möchten, installieren Sie das Runtime Text To Speech-Plugin.
Plattformspezifische Konfiguration
Android / Meta Quest Konfiguration
Wenn Sie Android- oder Meta Quest-Plattformen anvisieren und Build-Fehler mit diesem Plugin auftreten, müssen Sie die x86_64 (x64)-Android-Architektur in Ihren Projekteinstellungen deaktivieren:
- Gehen Sie zu Bearbeiten > Projekteinstellungen
- Navigieren Sie zu Plattformen > Android
- Unter Plattformen - Android, Build-Abschnitt, finden Sie Support x86_64 [aka x64] und stellen Sie sicher, dass es deaktiviert ist, wie unten gezeigt
Dies liegt daran, dass das Plugin derzeit nur arm64-v8a- und armeabi-v7a-Architekturen für Android-/Meta Quest-Plattformen unterstützt.
Einrichtungsprozess
Schritt 1: Suchen und modifizieren Sie das Face Animation Blueprint
- UE 5.5 und früher (oder Legacy MetaHumans in UE 5.6+)
- UE 5.6+ MetaHuman Creator Charaktere
Sie müssen ein Animation Blueprint modifizieren, das für die Gesichtsanimationen Ihres MetaHuman-Charakters verwendet wird. Das standardmäßige MetaHuman Face Animation Blueprint befindet sich unter:
Content/MetaHumans/Common/Face/Face_AnimBP
Sie haben mehrere Möglichkeiten, die Lip-Sync-Funktionalität zu implementieren:
- Standard-Asset direkt bearbeiten (einfachste Option)
- Duplikat erstellen
- Benutzerdefiniertes Animation Blueprint verwenden
Öffnen Sie die standardmäßige Face_AnimBP
direkt und nehmen Sie Ihre Änderungen vor. Alle Änderungen wirken sich auf alle MetaHuman-Charaktere aus, die dieses Animation Blueprint verwenden.
Hinweis: Dieser Ansatz ist bequem, betrifft jedoch alle Charaktere, die das standardmäßige Animation Blueprint verwenden.
- Duplizieren Sie
Face_AnimBP
und geben Sie ihm einen beschreibenden Namen - Suchen Sie die Blueprint-Klasse Ihres Charakters (z.B. für den Charakter "Bryan" unter
Content/MetaHumans/Bryan/BP_Bryan
) - Öffnen Sie die Charakter-Blueprint und suchen Sie die Face-Komponente
- Ändern Sie die Anim Class-Eigenschaft auf Ihr neu erstelltes, dupliziertes Animation Blueprint
Hinweis: Dieser Ansatz ermöglicht die Anpassung des Lip-Syncs für bestimmte Charaktere, während andere unverändert bleiben.
Sie können die Lip-Sync-Einbindung in jedem Animation Blueprint implementieren, der Zugriff auf die erforderlichen Gesichtsknochen hat:
- Erstellen Sie oder verwenden Sie ein bestehendes, benutzerdefiniertes Animation Blueprint
- Stellen Sie sicher, dass Ihr Animation Blueprint mit einem Skelett funktioniert, das dieselben Gesichtsknochen enthält wie das standardmäßige
Face_Archetype_Skeleton
der MetaHumans (das Standardskelett, das für jeden MetaHuman-Charakter verwendet wird)
Hinweis: Dieser Ansatz bietet maximale Flexibilität für die Integration in benutzerdefinierte Animationssysteme.
Ab UE 5.6 wurde das neue MetaHuman Creator-System eingeführt, das Charaktere ohne das traditionelle Face_AnimBP
-Asset erstellt. Für diese Charaktere stellt das Plugin ein Face Animation Blueprint bereit, das sich unter folgendem Pfad befindet:
Content/LipSyncData/LipSync_Face_AnimBP
Verwendung des Face Animation Blueprints des Plugins:
- Suchen Sie die Blueprint-Klasse Ihres MetaHuman Creator-Charakters
- Öffnen Sie die Charakter-Blueprint und finden Sie die Face-Komponente
- Ändern Sie die Anim Class-Eigenschaft in den
LipSync_Face_AnimBP
des Plugins - Fahren Sie mit den Schritten 2-4 fort, um die Runtime MetaHuman Lip Sync-Funktionalität zu konfigurieren
Alternative Optionen:
- Verwenden Sie Legacy-Anleitungen: Sie können weiterhin die oben genannten UE 5.5-Anleitungen befolgen, wenn Sie mit Legacy-MetaHumans arbeiten oder den traditionellen Workflow bevorzugen
- Erstellen Sie einen Custom Animation Blueprint: Erstellen Sie Ihren eigenen Animation Blueprint, der mit der Skelettstruktur des MetaHuman Creators funktioniert
Hinweis: Wenn Sie UE 5.6+ verwenden, aber mit Legacy-MetaHumans arbeiten (nicht über den MetaHuman Creator erstellt), verwenden Sie stattdessen die Anleitungen unter dem Tab "UE 5.5 and Earlier".
Wichtig: Das Runtime MetaHuman Lip Sync-Blending kann in jedem Animation Blueprint-Asset implementiert werden, das Zugriff auf eine Pose mit den Gesichtsknochen des standardmäßigen Face_Archetype_Skeleton
des MetaHumans hat. Sie sind nicht auf die oben genannten Optionen beschränkt - dies sind nur gängige Implementierungsansätze.
Schritt 2: Event Graph-Einrichtung
Öffnen Sie Ihren Face Animation Blueprint und wechseln Sie zum Event Graph
. Sie müssen einen Runtime Viseme Generator erstellen, der Audiodaten verarbeitet und Viseme generiert.
- Fügen Sie den
Event Blueprint Begin Play
-Knoten hinzu, falls er noch nicht vorhanden ist - Fügen Sie den
Create Runtime Viseme Generator
-Knoten hinzu und verbinden Sie ihn mit dem Begin Play-Event - Speichern Sie die Ausgabe als Variable (z.B. "VisemeGenerator") für die Verwendung in anderen Teilen des Graphs
Schritt 3: Einrichtung der Audioeingabeverarbeitung
Sie müssen eine Methode zur Verarbeitung der Audioeingabe einrichten. Es gibt mehrere Möglichkeiten, je nach Ihrer Audioquelle.
- Mikrofon (Echtzeit)
- Mikrofon (Wiedergabe)
- Text-zu-Sprache (Lokal)
- Text-zu-Sprache (Externe APIs)
- Von Audio-Datei/Puffer
- Benutzerdefinierte Audioquelle
Dieser Ansatz führt die Lippenbewegung in Echtzeit durch, während Sie in das Mikrofon sprechen:
- Erstellen Sie eine Capturable Sound Wave mit Runtime Audio Importer
- Binden Sie sich vor dem Start der Audioaufnahme an das
OnPopulateAudioData
-Delegate - Rufen Sie in der gebundenen Funktion
ProcessAudioData
von Ihrem Runtime Viseme Generator auf - Starten Sie die Audioaufnahme vom Mikrofon
Dieser Ansatz nimmt Audio vom Mikrofon auf und spielt es dann mit Lippensynchronisation ab:
- Erstellen Sie eine Capturable Sound Wave mit Runtime Audio Importer
- Starten Sie die Audioaufnahme vom Mikrofon
- Binden Sie sich vor der Wiedergabe der aufgenommenen Sound Wave an deren
OnGeneratePCMData
-Delegate - Rufen Sie in der gebundenen Funktion
ProcessAudioData
von Ihrem Runtime Viseme Generator auf
Hinweis: Wenn Sie Audiodaten in kleineren Chunks für responsivere Lippensynchronisation verarbeiten möchten, passen Sie die Berechnung in der SetNumSamplesPerChunk
-Funktion an. Beispielsweise liefert eine Division der Abtastrate durch 150 (Streaming alle ~6,67 ms) statt 100 (Streaming alle 10 ms) häufigere Updates der Lippensynchronisation.
- Regulär
- Streaming
Dieser Ansatz synthetisiert Sprache aus Text und führt Lippensynchronisation durch:
- Verwenden Sie Runtime Text To Speech zur Sprachsynthese aus Text
- Verwenden Sie Runtime Audio Importer zum Import des synthetisierten Audios
- Binden Sie sich vor der Wiedergabe der importierten Sound Wave an deren
OnGeneratePCMData
-Delegate - Rufen Sie in der gebundenen Funktion
ProcessAudioData
von Ihrem Runtime Viseme Generator auf
Hinweis: Wenn Sie Audiodaten in kleineren Chunks für responsivere Lippensynchronisation verarbeiten möchten, passen Sie die Berechnung in der SetNumSamplesPerChunk
-Funktion an. Beispielsweise liefert eine Division der Abtastrate durch 150 (Streaming alle ~6,67 ms) statt 100 (Streaming alle 10 ms) häufigere Updates der Lippensynchronisation.
Dieser Ansatz verwendet Streaming-Text-zu-Sprache-Synthese mit Echtzeit-Lippensynchronisation:
- Verwenden Sie Runtime Text To Speech zur Streaming-Sprachsynthese aus Text
- Verwenden Sie Runtime Audio Importer zum Import des synthetisierten Audios
- Binden Sie sich vor der Wiedergabe der Streaming-Sound Wave an deren
OnGeneratePCMData
-Delegate - Rufen Sie in der gebundenen Funktion
ProcessAudioData
von Ihrem Runtime Viseme Generator auf
Hinweis: Wenn Sie Audiodaten in kleineren Chunks für responsivere Lippensynchronisation verarbeiten möchten, passen Sie die Berechnung in der SetNumSamplesPerChunk
-Funktion an. Beispielsweise liefert eine Division der Abtastrate durch 150 (Streaming alle ~6,67 ms) statt 100 (Streaming alle 10 ms) häufigere Updates der Lippensynchronisation.
- Regulär
- Streaming
Dieser Ansatz verwendet das Runtime AI Chatbot Integrator-Plugin zur Sprachsynthese aus AI-Diensten und Lippensynchronisation:
- Verwenden Sie Runtime AI Chatbot Integrator zur Sprachsynthese aus Text mit externen APIs (OpenAI, ElevenLabs, etc.)
- Verwenden Sie Runtime Audio Importer zum Import der synthetisierten Audiodaten
- Binden Sie sich vor der Wiedergabe der importierten Sound Wave an deren
OnGeneratePCMData
-Delegate - Rufen Sie in der gebundenen Funktion
ProcessAudioData
von Ihrem Runtime Viseme Generator auf
Hinweis: Wenn Sie Audiodaten in kleineren Chunks für responsivere Lippensynchronisation verarbeiten möchten, passen Sie die Berechnung in der SetNumSamplesPerChunk
-Funktion an. Beispielsweise liefert eine Division der Abtastrate durch 150 (Streaming alle ~6,67 ms) statt 100 (Streaming alle 10 ms) häufigere Updates der Lippensynchronisation.
Dieser Ansatz verwendet das Runtime AI Chatbot Integrator-Plugin zur Streaming-Sprachsynthese aus AI-Diensten und Lippensynchronisation:
- Verwenden Sie Runtime AI Chatbot Integrator zur Verbindung mit Streaming-TTS-APIs (wie ElevenLabs Streaming API)
- Verwenden Sie Runtime Audio Importer zum Import der synthetisierten Audiodaten
- Binden Sie sich vor der Wiedergabe der Streaming-Sound Wave an deren
OnGeneratePCMData
-Delegate - Rufen Sie in der gebundenen Funktion
ProcessAudioData
von Ihrem Runtime Viseme Generator auf
Hinweis: Wenn Sie Audiodaten in kleineren Chunks für responsivere Lippensynchronisation verarbeiten möchten, passen Sie die Berechnung in der SetNumSamplesPerChunk
-Funktion an. Beispielsweise liefert eine Division der Abtastrate durch 150 (Streaming alle ~6,67 ms) statt 100 (Streaming alle 10 ms) häufigere Updates der Lippensynchronisation.
Dieser Ansatz verwendet voraufgenommene Audiodateien oder Audio-Puffer für die Lippensynchronisation:
- Verwenden Sie Runtime Audio Importer zum Import einer Audiodatei von der Festplatte oder aus dem Speicher
- Binden Sie sich vor der Wiedergabe der importierten Sound Wave an deren
OnGeneratePCMData
-Delegate - Rufen Sie in der gebundenen Funktion
ProcessAudioData
von Ihrem Runtime Viseme Generator auf - Spielen Sie die importierte Sound Wave ab und beobachten Sie die Lippensynchronisations-Animation
Hinweis: Wenn Sie Audiodaten in kleineren Chunks für responsivere Lippensynchronisation verarbeiten möchten, passen Sie die Berechnung in der SetNumSamplesPerChunk
-Funktion an. Beispielsweise liefert eine Division der Abtastrate durch 150 (Streaming alle ~6,67 ms) statt 100 (Streaming alle 10 ms) häufigere Updates der Lippensynchronisation.
Für eine benutzerdefinierte Audioquelle benötigen Sie:
- Audiodaten im Float-PCM-Format (ein Array von Fließkomma-Samples)
- Die Abtastrate und Anzahl der Kanäle
- Rufen Sie
ProcessAudioData
von Ihrem Runtime Viseme Generator mit diesen Parametern auf
Hier ist ein Beispiel für das Streaming von Audio aus einer benutzerdefinierten Quelle:
Hinweis: Wenn Sie Audiodaten in kleineren Chunks für responsivere Lippensynchronisation verarbeiten möchten, passen Sie die Berechnung in der SetNumSamplesPerChunk
-Funktion an. Beispielsweise liefert eine Division der Abtastrate durch 150 (Streaming alle ~6,67 ms) statt 100 (Streaming alle 10 ms) häufigere Updates der Lippensynchronisation.
Schritt 4: Anim Graph-Einrichtung
Nach der Einrichtung des Event Graphs wechseln Sie zum Anim Graph
, um den Viseme-Generator mit der Animation des Charakters zu verbinden:
Lippensynchronisation
- Suchen Sie die Pose, die das MetaHuman-Gesicht enthält (typischerweise von
Use cached pose 'Body Pose'
) - Fügen Sie den
Blend Runtime MetaHuman Lip Sync
-Knoten hinzu - Verbinden Sie die Pose mit dem
Source Pose
desBlend Runtime MetaHuman Lip Sync
-Knotens - Verbinden Sie Ihre
RuntimeVisemeGenerator
-Variable mit demViseme Generator
-Pin - Verbinden Sie die Ausgabe des
Blend Runtime MetaHuman Lip Sync
-Knotens mit demResult
-Pin desOutput Pose
-Knotens
Wenn Lippensynchronisation im Audio erkannt wird, animiert sich Ihr Charakter entsprechend:
Lachen-Animation
Sie können auch Lachen-Animationen hinzufügen, die dynamisch auf im Audio erkanntes Lachen reagieren:
- Fügen Sie den
Blend Runtime MetaHuman Laughter
-Knoten hinzu - Verbinden Sie Ihre
RuntimeVisemeGenerator
-Variable mit demViseme Generator
-Pin - Wenn Sie bereits Lippensynchronisation verwenden:
- Verbinden Sie die Ausgabe des
Blend Runtime MetaHuman Lip Sync
-Knotens mit demSource Pose
desBlend Runtime MetaHuman Laughter
-Knotens - Verbinden Sie die Ausgabe des
Blend Runtime MetaHuman Laughter
-Knotens mit demResult
-Pin desOutput Pose
-Knotens
- Verbinden Sie die Ausgabe des
- Wenn Sie nur Lachen ohne Lippensynchronisation verwenden:
- Verbinden Sie Ihre Quellpose direkt mit dem
Source Pose
desBlend Runtime MetaHuman Laughter
-Knotens - Verbinden Sie die Ausgabe mit dem
Result
-Pin
- Verbinden Sie Ihre Quellpose direkt mit dem
Wenn Lachen im Audio erkannt wird, animiert sich Ihr Charakter entsprechend:
Kombination mit Körperanimationen
Um Lippensynchronisation und Lachen neben bestehenden Körperanimationen anzuwenden, ohne sie zu überschreiben:
- Fügen Sie einen
Layered blend per bone
-Knoten zwischen Ihren Körperanimationen und der finalen Ausgabe hinzu. Stellen Sie sicher, dassUse Attached Parent
aktiviert ist. - Konfigurieren Sie das Layer-Setup:
- Fügen Sie 1 Item zum
Layer Setup
-Array hinzu - Fügen Sie 3 Items zu den
Branch Filters
für das Layer hinzu, mit folgendenBone Name
s:FACIAL_C_FacialRoot
FACIAL_C_Neck2Root
FACIAL_C_Neck1Root
- Fügen Sie 1 Item zum
- Stellen Sie die Verbindungen her:
- Bestehende Animationen (wie
BodyPose
) →Base Pose
-Eingang - Gesichtsanimation-Ausgabe (von Lippensynchronisations- und/oder Lachen-Knoten) →
Blend Poses 0
-Eingang - Layered blend-Knoten → Finale
Result
-Pose
- Bestehende Animationen (wie
Warum dies funktioniert: Die Branch-Filter isolieren Gesichtsanimationsknochen, sodass Lippensynchronisation und Lachen ausschließlich mit Gesichtsbewegungen geblendet werden, während die ursprünglichen Körperanimationen erhalten bleiben. Dies entspricht der MetaHuman-Gesichtsrig-Struktur und gewährleistet eine natürliche Integration.
Hinweis: Die Lippensynchronisations- und Lachen-Funktionen sind so konzipiert, dass sie nicht-destruktiv mit Ihrer bestehenden Animationseinrichtung arbeiten. Sie beeinflussen nur die spezifischen Gesichtsknochen, die für Mundbewegungen benötigt werden, und lassen andere Gesichtsanimationen unberührt. Dies bedeutet, dass Sie sie sicher an jedem Punkt in Ihrer Animationskette integrieren können - entweder vor anderen Gesichtsanimationen (ermöglicht diesen Animationen, die Lippensynchronisation/das Lachen zu überschreiben) oder nach ihnen (lässt Lippensynchronisation/Lachen über Ihren bestehenden Animationen blenden). Diese Flexibilität ermöglicht es Ihnen, Lippensynchronisation und Lachen mit Augenblinzeln, Augenbrauenbewegungen, emotionalen Ausdrücken und anderen Gesichtsanimationen zu kombinieren, ohne Konflikte zu verursachen.
Konfiguration
Lippensynchronisations-Konfiguration
Der Blend Runtime MetaHuman Lip Sync
-Knoten hat Konfigurationsoptionen in seinem Eigenschaften-Panel:
Eigenschaft | Standard | Beschreibung |
---|---|---|
Interpolation Speed | 25 | Steuert, wie schnell die Lippenbewegungen zwischen Visemen wechseln. Höhere Werte führen zu schnelleren, abrupten Übergängen. |
Reset Time | 0.2 | Die Dauer in Sekunden, nach der die Lippensynchronisation zurückgesetzt wird. Dies ist nützlich, um zu verhindern, dass die Lippensynchronisation fortgesetzt wird, nachdem das Audio gestoppt wurde. |
Lachen-Konfiguration
Der Blend Runtime MetaHuman Laughter
-Knoten hat seine eigenen Konfigurationsoptionen:
Eigenschaft | Standard | Beschreibung |
---|---|---|
Interpolation Speed | 25 | Steuert, wie schnell die Lippenbewegungen zwischen Lachen-Animationen wechseln. Höhere Werte führen zu schnelleren, abrupten Übergängen. |
Reset Time | 0.2 | Die Dauer in Sekunden, nach der das Lachen zurückgesetzt wird. Dies ist nützlich, um zu verhindern, dass das Lachen fortgesetzt wird, nachdem das Audio gestoppt wurde. |
Max Laughter Weight | 0.7 | Skaliert die maximale Intensität der Lachen-Animation (0.0 - 1.0). |