Jak korzystać z wtyczki
Ten przewodnik przeprowadzi Cię przez proces konfiguracji Runtime MetaHuman Lip Sync dla twoich postaci MetaHuman.
Uwaga: Runtime MetaHuman Lip Sync działa zarówno z MetaHuman, jak i postaciami niestandardowymi. Wtyczka obsługuje różne typy postaci, w tym:
- Popularne postacie komercyjne (Daz Genesis 8/9, Reallusion CC3/CC4, Mixamo, ReadyPlayerMe, itp.)
- Postacie z blendshape'ami opartymi na FACS
- Modele korzystające ze standardów blendshape ARKit
- Postacie z zestawami fonemów Preston Blair
- Systemy fonemów 3ds Max
- Dowolne postacie z niestandardowymi celami morfowania dla wyrażeń twarzy
Aby uzyskać szczegółowe instrukcje dotyczące konfigurowania postaci niestandardowych, w tym referencje mapowania wizemów dla wszystkich powyższych standardów, zobacz Przewodnik konfiguracji postaci niestandardowej.
Wymagania wstępne
Przed rozpoczęciem upewnij się, że:
- Wtyczka MetaHuman jest włączona w twoim projekcie (Uwaga: Począwszy od UE 5.6, ten krok nie jest już wymagany, ponieważ funkcjonalność MetaHuman jest zintegrowana bezpośrednio z silnikiem)
- Masz przynajmniej jedną postać MetaHuman pobraną i dostępną w twoim projekcie
- Wtyczka Runtime MetaHuman Lip Sync jest zainstalowana
Rozszerzenie wtyczki modelu standardowego
Jeśli planujesz używać modelu Standardowego (Szybszego), będziesz potrzebować zainstalować wtyczkę rozszerzającą:
- Pobierz wtyczkę rozszerzającą Standard Lip Sync Extension z Google Drive
- Wypakuj folder z pobranego archiwum do folderu
Plugins
twojego projektu (utwórz ten folder, jeśli nie istnieje) - Upewnij się, że twój projekt jest skonfigurowany jako projekt C++ (nawet jeśli nie masz żadnego kodu C++)
- Przebuduj swój projekt
- To rozszerzenie jest wymagane tylko jeśli chcesz używać modelu Standardowego. Jeśli potrzebujesz tylko modelu Realistycznego, możesz pominąć ten krok.
- Aby uzyskać więcej informacji na temat ręcznego budowania wtyczek, zobacz Samouczek budowania wtyczek
Dodatkowe wtyczki
- Jeśli planujesz używać przechwytywania dźwięku (np. wejścia z mikrofonu), zainstaluj wtyczkę Runtime Audio Importer.
- Jeśli planujesz używać funkcjonalności zamiany tekstu na mowę z moimi wtyczkami (możesz mieć własną niestandardową TTS lub inne źródło dźwięku), to oprócz wtyczki Runtime Audio Importer, zainstaluj również:
- Dla lokalnej TTS, wtyczkę Runtime Text To Speech.
- Dla zewnętrznych dostawców TTS (ElevenLabs, OpenAI), wtyczkę Runtime AI Chatbot Integrator.
Proces konfiguracji
Krok 1: Znajdź i zmodyfikuj Blueprint animacji twarzy
- UE 5.5 i wcześniejsze (lub starsze MetaHumans w UE 5.6+)
- Postacie z MetaHuman Creator w UE 5.6+
Musisz zmodyfikować Animation Blueprint, który będzie używany do animacji twarzy twojej postaci MetaHuman. Domyślny Animation Blueprint twarzy MetaHuman znajduje się w:
Content/MetaHumans/Common/Face/Face_AnimBP
Masz kilka opcji implementacji funkcji synchronizacji ust:
- Edytuj domyślny zasób (Najprostsza opcja)
- Utwórz duplikat
- Użyj niestandardowego Animation Blueprint
Otwórz bezpośrednio domyślny Face_AnimBP
i wprowadź swoje modyfikacje. Wszelkie zmiany wpłyną na wszystkie postacie MetaHuman używające tego Animation Blueprint.
Uwaga: To podejście jest wygodne, ale wpłynie na wszystkie postacie używające domyślnego Animation Blueprint.
- Zduplikuj
Face_AnimBP
i nadaj mu opisową nazwę - Znajdź klasę Blueprint swojej postaci (np. dla postaci "Bryan" będzie to
Content/MetaHumans/Bryan/BP_Bryan
) - Otwórz Blueprint postaci i znajdź komponent Face
- Zmień właściwość Anim Class na nowo zduplikowany Animation Blueprint
Uwaga: To podejście pozwala dostosować synchronizację ust dla konkretnych postaci, pozostawiając inne niezmienione.
Możesz zaimplementować mieszanie synchronizacji ust w dowolnym Animation Blueprint, który ma dostęp do wymaganych kości twarzy:
- Utwórz lub użyj istniejącego niestandardowego Animation Blueprint
- Upewnij się, że twój Animation Blueprint działa ze szkieletem zawierającym te same kości twarzy co domyślny
Face_Archetype_Skeleton
MetaHuman (który jest standardowym szkieletem używanym dla każdej postaci MetaHuman)
Uwaga: To podejście daje maksymalną elastyczność integracji z niestandardowymi systemami animacji.
Począwszy od UE 5.6, wprowadzono nowy system MetaHuman Creator, który tworzy postacie bez tradycyjnego zasobu Face_AnimBP
. Dla tych postaci wtyczka zapewnia Animation Blueprint twarzy znajdujący się w:
Content/LipSyncData/LipSync_Face_AnimBP
Ta Blueprint Animacji znajduje się w folderze zawartości wtyczki i będzie nadpisywana przy każdej aktualizacji wtyczki. Aby zapobiec utracie swoich dostosowań, zdecydowanie zaleca się:
- Skopiowanie tego zasobu do folderu Content Twojego projektu (na przykład do
YourProject/Content/MetaHumans/LipSync_Face_AnimBP
) - Używanie swojej skopiowanej wersji w konfiguracji postaci
- Wprowadzanie wszystkich modyfikacji do skopiowanej wersji
Zapewnia to, że konfiguracje synchronizacji warg będą utrzymywane pomiędzy aktualizacjami wtyczki.
Używanie Face Animation Blueprint wtyczki:
- Zlokalizuj klasę Blueprint swojej postaci z MetaHuman Creator
- Otwórz Blueprint postaci i znajdź komponent Face
- Zmień właściwość Anim Class na
LipSync_Face_AnimBP
wtyczki - Kontynuuj z Krokami 2-4, aby skonfigurować funkcjonalność Runtime MetaHuman Lip Sync
Opcje alternatywne:
- Użyj instrukcji dla starszych wersji: Nadal możesz postępować zgodnie z instrukcjami dla UE 5.5 powyżej, jeśli pracujesz ze starszymi MetaHumanami lub preferujesz tradycyjny przepływ pracy
- Utwórz własną Animation Blueprint: Utwórz własną Animation Blueprint, która współpracuje ze strukturą szkieletu MetaHuman Creator
Uwaga: Jeśli używasz UE 5.6+ ale pracujesz ze starszymi MetaHumanami (nie utworzonymi przez MetaHuman Creator), zamiast tego użyj instrukcji z zakładki "UE 5.5 i wcześniejsze".
Ważne: Mieszanie Runtime MetaHuman Lip Sync może być zaimplementowane w dowolnym zasobie Animation Blueprint, który ma dostęp do pozy zawierającej kości twarzy obecne w domyślnym Face_Archetype_Skeleton
MetaHumana. Nie jesteś ograniczony do powyższych opcji - są to tylko powszechne podejścia do implementacji.
Krok 2: Konfiguracja Event Graph
Otwórz swoją Face Animation Blueprint i przejdź do Event Graph
. Będziesz musiał utworzyć generator, który przetworzy dane audio i wygeneruje animację synchronizacji warg.
- Standard (Szybszy) Model
- Realistyczny (Wyższa Jakość) Model
- Dodaj węzeł
Event Blueprint Begin Play
, jeśli jeszcze nie istnieje - Dodaj węzeł
Create Runtime Viseme Generator
i połącz go z wydarzeniem Begin Play - Zapisz wynik jako zmienną (np. "VisemeGenerator") do użycia w innych częściach grafu
- Dodaj węzeł
Event Blueprint Begin Play
, jeśli jeszcze nie istnieje - Dodaj węzeł
Create Realistic MetaHuman Lip Sync Generator
i połącz go z wydarzeniem Begin Play - Zapisz wynik jako zmienną (np. "RealisticLipSyncGenerator") do użycia w innych częściach grafu
- (Opcjonalnie) Skonfiguruj ustawienia generatora za pomocą parametru Configuration
- (Opcjonalnie) Ustaw Processing Chunk Size na obiekcie Realistic MetaHuman Lip Sync Generator

Uwaga: Model Realistyczny jest zoptymalizowany specjalnie dla postaci MetaHuman i nie jest kompatybilny z niestandardowymi typami postaci.
Opcje konfiguracji
Węzeł Create Realistic MetaHuman Lip Sync Generator
akceptuje opcjonalny parametr Configuration, który pozwala dostosować zachowanie generatora:
Typ modelu
Ustawienie Model Type określa, której wersji realistycznego modelu użyć:
Typ modelu | Wydajność | Jakość wizualna | Obsługa szumów | Zalecane przypadki użycia |
---|---|---|---|---|
Wysoko zoptymalizowany (Domyślny) | Najwyższa wydajność, najniższe użycie CPU | Dobra jakość | Może wykazywać zauważalne ruchy ust przy szumach tła lub dźwiękach innych niż głos | Czyste środowiska audio, scenariusze krytyczne pod względem wydajności |
Zoptymalizowany | Dobra wydajność, umiarkowane użycie CPU | Wysoka jakość | Lepsza stabilność przy zaszumionym audio | Zrównoważona wydajność i jakość, mieszane warunki audio |
Oryginalny niezoptymalizowany | Nadaje się do użycia w czasie rzeczywistym na nowoczesnych procesorach | Najwyższa jakość | Najbardziej stabilny przy szumach tła i dźwiękach innych niż głos | Produkcje wysokiej jakości, zaszumione środowiska audio, gdy wymagana jest maksymalna dokładność |
Ustawienia wydajności
Intra Op Threads: Kontroluje liczbę wątków używanych do wewnętrznych operacji przetwarzania modelu.
- 0 (Domyślnie/Automatycznie): Używa automatycznego wykrywania (zazwyczaj 1/4 dostępnych rdzeni CPU, maksymalnie 4)
- 1-16: Ręcznie określ liczbę wątków. Wyższe wartości mogą poprawić wydajność w systemach wielordzeniowych, ale zużywają więcej CPU
Inter Op Threads: Kontroluje liczbę wątków używanych do równoległego wykonywania różnych operacji modelu.
- 0 (Domyślnie/Automatycznie): Używa automatycznego wykrywania (zazwyczaj 1/8 dostępnych rdzeni CPU, maksymalnie 2)
- 1-8: Ręcznie określ liczbę wątków. Zwykle utrzymywane nisko dla przetwarzania w czasie rzeczywistym
Używanie konfiguracji
Aby skonfigurować generator:
- W węźle
Create Realistic MetaHuman Lip Sync Generator
, rozwiń parametr Configuration - Ustaw Model Type na preferowaną opcję:
- Użyj Highly Optimized dla najlepszej wydajności (zalecane dla większości użytkowników)
- Użyj Optimized dla zrównoważonej wydajności i jakości
- Użyj Original Unoptimized tylko wtedy, gdy maksymalna jakość jest niezbędna
- Dostosuj Intra Op Threads i Inter Op Threads w razie potrzeby (w większości przypadków pozostaw na 0 dla automatycznego wykrywania) Zalecenia dotyczące wydajności:
- W większości projektów z czystym dźwiękiem używaj modelu Wysoko zoptymalizowanego dla najlepszej wydajności
- Jeśli pracujesz z dźwiękiem zawierającym szum tła, muzykę lub dźwięki inne niż głos, rozważ użycie modeli Zoptymalizowanych lub Oryginalnych niezoptymalizowanych dla lepszej stabilności
- Model Wysoko zoptymalizowany może wykazywać subtelne ruchy ust podczas przetwarzania dźwięku innego niż głos, z powodu technik optymalizacji zastosowanych podczas tworzenia modelu
- Model Oryginalny niezoptymalizowany, choć wymaga więcej zasobów CPU, nadal nadaje się do aplikacji działających w czasie rzeczywistym na nowoczesnym sprzęcie i zapewnia najbardziej dokładne wyniki w trudnych warunkach dźwiękowych
- Dostosowuj liczbę wątków tylko wtedy, gdy doświadczasz problemów z wydajnością lub masz specyficzne wymagania optymalizacyjne
- Wyższa liczba wątków nie zawsze oznacza lepszą wydajność - optymalne wartości zależą od konkretnego sprzętu i wymagań projektu
Konfiguracja rozmiaru porcji przetwarzania: Rozmiar porcji przetwarzania określa, ile próbek jest przetwarzanych w każdym kroku inferencji. Wartość domyślna to 160 próbek, co odpowiada 10ms audio przy 16kHz (wewnętrzna częstotliwość próbkowania przetwarzania). Możesz dostosować tę wartość, aby zbalansować częstotliwość aktualizacji i użycie CPU:
- Mniejsze wartości zapewniają częstsze aktualizacje, ale zwiększają użycie CPU
- Większe wartości zmniejszają obciążenie CPU, ale mogą zmniejszyć responsywność synchronizacji ust
Aby ustawić rozmiar porcji przetwarzania:
- Uzyskaj dostęp do obiektu
Realistic MetaHuman Lip Sync Generator
- Znajdź właściwość
Processing Chunk Size
- Ustaw żądaną wartość
Zaleca się używanie wartości, które są wielokrotnościami 160. To zapewnia zgodność z wewnętrzną strukturą przetwarzania modelu. Zalecane wartości obejmują:
160
(domyślna, minimalna zalecana)320
480
640
- itd.
Domyślny rozmiar porcji przetwarzania wynoszący 160
próbek odpowiada 10ms audio przy 16kHz. Używanie wielokrotności 160 utrzymuje wyrównanie z tą jednostką bazową, co może pomóc zoptymalizować wydajność przetwarzania i utrzymać spójne zachowanie przy różnych rozmiarach porcji.
Dla niezawodnej i spójnej pracy z modelem realistycznym wymagane jest ponowne utworzenie Realistic MetaHuman Lip Sync Generator za każdym razem, gdy chcesz przekazać nowe dane audio po okresie bezczynności. Wynika to z zachowania środowiska wykonawczego ONNX, które może powodować zatrzymanie działania synchronizacji ust przy ponownym używaniu generatorów po okresach ciszy.
Przykładowy scenariusz: Jeśli wykonałeś synchronizację ust TTS i zatrzymałeś ją, a później chcesz ponownie wykonać synchronizację ust z nowym dźwiękiem, utwórz nowy Realistic MetaHuman Lip Sync Generator zamiast ponownie używać istniejącego.
Krok 3: Skonfiguruj przetwarzanie wejścia audio
Musisz skonfigurować metodę przetwarzania wejścia audio. Istnieje kilka sposobów, w zależności od źródła dźwięku.
- Mikrofon (Rzeczywisty czas)
- Mikrofon (Odtwarzanie)
- Tekst-na-Mowę (Lokalny)
- Text-to-Speech (External APIs)
- Z Pliku/Bufora Audio
- Streaming Audio Buffer
To podejście wykonuje synchronizację ust w czasie rzeczywistym podczas mówienia do mikrofonu:
- Standardowy (Szybszy) Model
- Realistyczny (Wyższa Jakość) Model
- Utwórz Capturable Sound Wave używając Runtime Audio Importer
- Przed rozpoczęciem przechwytywania dźwięku, podłącz się do delegata
OnPopulateAudioData
- W powiązanej funkcji, wywołaj
ProcessAudioData
z twojego Runtime Viseme Generator - Rozpocznij przechwytywanie dźwięku z mikrofonu
Model Realistyczny używa tego samego przepływu pracy przetwarzania dźwięku co Model Standardowy, ale z zmienną RealisticLipSyncGenerator
zamiast VisemeGenerator
.
W każdym z przykładów pokazanych dla Modelu Standardowego, po prostu zamień:
VisemeGenerator
na twoją zmiennąRealisticLipSyncGenerator
- Nazwy funkcji i parametry pozostają identyczne pomiędzy oboma modelami
To podejście przechwytuje dźwięk z mikrofonu, a następnie odtwarza go z synchronizacją ust:
- Standardowy (Szybszy) Model
- Realistyczny (Wyższa Jakość) Model
- Utwórz Capturable Sound Wave używając Runtime Audio Importer
- Rozpocznij przechwytywanie dźwięku z mikrofonu
- Przed odtworzeniem capturable sound wave, podłącz się do jego delegata
OnGeneratePCMData
- W powiązanej funkcji, wywołaj
ProcessAudioData
z twojego Runtime Viseme Generator
Realistyczny Model używa tego samego przepływu pracy przetwarzania audio co Model Standardowy, ale z zmienną RealisticLipSyncGenerator
zamiast VisemeGenerator
.
W każdym z przykładów pokazanych dla Modelu Standardowego, po prostu zamień:
VisemeGenerator
na swoją zmiennąRealisticLipSyncGenerator
- Nazwy funkcji i parametry pozostają identyczne w obu modelach
Uwaga: Jeśli chcesz przetwarzać dane audio w mniejszych fragmentach dla bardziej responsywnej synchronizacji ust, dostosuj obliczenia w funkcji SetNumSamplesPerChunk
. Na przykład, podzielenie częstotliwości próbkowania przez 150 (przesyłanie strumieniowe co ~6.67 ms) zamiast 100 (przesyłanie strumieniowe co 10 ms) zapewni częstsze aktualizacje synchronizacji ust.
- Regularny
- Streaming
To podejście syntetyzuje mowę z tekstu i wykonuje synchronizację ust:
- Standardowy (Szybszy) Model
- Realistyczny (Wyższa Jakość) Model
- Użyj Runtime Text To Speech, aby wygenerować mowę z tekstu
- Użyj Runtime Audio Importer, aby zaimportować zsyntetyzowane audio
- Przed odtworzeniem zaimportowanej fali dźwiękowej, podłącz się do jej delegata
OnGeneratePCMData
- W powiązanej funkcji, wywołaj
ProcessAudioData
ze swojego Runtime Viseme Generator
Lokalny TTS dostarczony przez wtyczkę Runtime Text To Speech nie jest obecnie obsługiwany z modelem Realistycznym z powodu konfliktów środowiska uruchomieniowego ONNX. Dla tekstu-na-mowę z modelem Realistycznym, rozważ użycie zewnętrznych usług TTS (takich jak OpenAI lub ElevenLabs przez Runtime AI Chatbot Integrator) lub użyj modelu Standardowego zamiast.
Uwaga: Jeśli chcesz przetwarzać dane audio w mniejszych fragmentach dla bardziej responsywnej synchronizacji ust, dostosuj obliczenia w funkcji SetNumSamplesPerChunk
. Na przykład, podzielenie częstotliwości próbkowania przez 150 (przesyłanie strumieniowe co ~6.67 ms) zamiast 100 (przesyłanie strumieniowe co 10 ms) zapewni częstsze aktualizacje synchronizacji ust.
To podejście wykorzystuje strumieniową syntezę mowy z tekstu z synchronizacją ust w czasie rzeczywistym:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Użyj Runtime Text To Speech, aby wygenerować strumieniową mowę z tekstu
- Użyj Runtime Audio Importer, aby zaimportować zsyntetyzowany dźwięk
- Przed odtworzeniem strumieniowej fali dźwiękowej, podłącz się do jego delegata
OnGeneratePCMData
- W powiązanej funkcji, wywołaj
ProcessAudioData
z twojego Runtime Viseme Generator
Lokalny TTS dostarczany przez wtyczkę Runtime Text To Speech nie jest obecnie obsługiwany z modelem Realistic z powodu konfliktów środowiska wykonawczego ONNX. W przypadku syntezy mowy z tekstu z modelem Realistic, rozważ użycie zewnętrznych usług TTS (takich jak OpenAI lub ElevenLabs poprzez Runtime AI Chatbot Integrator) lub użyj zamiast tego modelu Standard.
Uwaga: Jeśli chcesz przetwarzać dane audio w mniejszych fragmentach dla bardziej responsywnej synchronizacji ust, dostosuj obliczenia w funkcji SetNumSamplesPerChunk
. Na przykład, podzielenie częstotliwości próbkowania przez 150 (strumieniowanie co ~6.67 ms) zamiast przez 100 (strumieniowanie co 10 ms) zapewni częstsze aktualizacje synchronizacji ust.
- Regular
- Streaming
To podejście wykorzystuje wtyczkę Runtime AI Chatbot Integrator do generowania zsyntetyzowanej mowy z usług AI (OpenAI lub ElevenLabs) i wykonania synchronizacji ust:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Użyj Runtime AI Chatbot Integrator, aby wygenerować mowę z tekstu przy użyciu zewnętrznych API (OpenAI, ElevenLabs, itp.)
- Użyj Runtime Audio Importer, aby zaimportować zsyntetyzowane dane audio
- Przed odtworzeniem zaimportowanej fali dźwiękowej, podłącz się do jego delegata
OnGeneratePCMData
- W powiązanej funkcji, wywołaj
ProcessAudioData
z twojego Runtime Viseme Generator

Model Realistyczny używa tego samego przepływu pracy przetwarzania audio co Model Standardowy, ale z zmienną RealisticLipSyncGenerator
zamiast VisemeGenerator
.
W każdym z przykładów pokazanych dla Modelu Standardowego, po prostu zamień:
VisemeGenerator
na twoją zmiennąRealisticLipSyncGenerator
- Nazwy funkcji i parametry pozostają identyczne w obu modelach
Uwaga: Jeśli chcesz przetwarzać dane audio w mniejszych fragmentach dla bardziej responsywnej synchronizacji ust, dostosuj obliczenia w funkcji SetNumSamplesPerChunk
. Na przykład, podzielenie częstotliwości próbkowania przez 150 (przesyłanie strumieniowe co ~6,67 ms) zamiast 100 (przesyłanie strumieniowe co 10 ms) zapewni częstsze aktualizacje synchronizacji ust.
To podejście wykorzystuje wtyczkę Runtime AI Chatbot Integrator do generowania zsyntetyzowanej mowy strumieniowej z usług AI (OpenAI lub ElevenLabs) i wykonania synchronizacji ust:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Użyj Runtime AI Chatbot Integrator do połączenia z API TTS strumieniowego (jak ElevenLabs Streaming API)
- Użyj Runtime Audio Importer do importu zsyntetyzowanych danych audio
- Przed odtworzeniem strumieniowej fali dźwiękowej, podłącz się do jej delegata
OnGeneratePCMData
- W powiązanej funkcji, wywołaj
ProcessAudioData
z twojego Runtime Viseme Generator
Model Realistyczny używa tego samego przepływu pracy przetwarzania audio co Model Standardowy, ale z zmienną RealisticLipSyncGenerator
zamiast VisemeGenerator
.
W każdym z przykładów pokazanych dla Modelu Standardowego, po prostu zamień:
VisemeGenerator
na twoją zmiennąRealisticLipSyncGenerator
- Nazwy funkcji i parametry pozostają identyczne w obu modelach
Uwaga: Jeśli chcesz przetwarzać dane audio w mniejszych fragmentach dla bardziej responsywnej synchronizacji ust, dostosuj obliczenia w funkcji SetNumSamplesPerChunk
. Na przykład, podzielenie częstotliwości próbkowania przez 150 (przesyłanie strumieniowe co ~6,67 ms) zamiast 100 (przesyłanie strumieniowe co 10 ms) zapewni częstsze aktualizacje synchronizacji ust.
To podejście wykorzystuje wstępnie nagrane pliki audio lub bufory audio do synchronizacji ust:
- Model Standardowy (Szybszy)
- Model Realistyczny (Wyższa Jakość)
- Użyj Runtime Audio Importer, aby zaimportować plik audio z dysku lub pamięci
- Przed odtworzeniem zaimportowanej fali dźwiękowej, podłącz się do jej delegata
OnGeneratePCMData
- W powiązanej funkcji, wywołaj
ProcessAudioData
z twojego Runtime Viseme Generator - Odtwórz zaimportowaną falę dźwiękową i obserwuj animację synchronizacji ust
Model Realistyczny używa tego samego przepływu pracy przetwarzania audio co Model Standardowy, ale z zmienną RealisticLipSyncGenerator
zamiast VisemeGenerator
.
W każdym z przykładów pokazanych dla Modelu Standardowego, po prostu zamień:
VisemeGenerator
na twoją zmiennąRealisticLipSyncGenerator
- Nazwy funkcji i parametry pozostają identyczne między obydwoma modelami
Uwaga: Jeśli chcesz przetwarzać dane audio w mniejszych fragmentach dla bardziej responsywnej synchronizacji ust, dostosuj obliczenia w funkcji SetNumSamplesPerChunk
. Na przykład, podzielenie częstotliwości próbkowania przez 150 (przesyłanie strumieniowe co ~6,67 ms) zamiast 100 (przesyłanie strumieniowe co 10 ms) zapewni częstsze aktualizacje synchronizacji ust.
Do przesyłania strumieniowego danych audio z bufora, potrzebujesz:
- Standard (Faster) Model
- Realistic (Higher Quality) Model
- Dane audio w formacie float PCM (tablica próbek zmiennoprzecinkowych) dostępne ze źródła strumieniowego
- Częstotliwość próbkowania i liczbę kanałów
- Wywołaj
ProcessAudioData
z twojego Runtime Viseme Generator z tymi parametrami, gdy fragmenty audio staną się dostępne
Oto przykład przetwarzania synchronizacji ust z przesyłanych strumieniowo danych audio:
Uwaga: Podczas korzystania ze źródeł audio strumieniowego upewnij się, że odpowiednio zarządzasz czasem odtwarzania audio, aby uniknąć zniekształconego odtwarzania. Zobacz dokumentację Streaming Sound Wave aby uzyskać więcej informacji na temat właściwego zarządzania audio strumieniowym.
Model Realistyczny używa tego samego przepływu pracy przetwarzania audio co Model Standardowy, ale z zmienną RealisticLipSyncGenerator
zamiast VisemeGenerator
.
W każdym z przykładów pokazanych dla Modelu Standardowego, po prostu zamień:
VisemeGenerator
na twoją zmiennąRealisticLipSyncGenerator
- Nazwy funkcji i parametry pozostają identyczne między oboma modelami
Uwaga: Podczas korzystania ze źródeł audio strumieniowego upewnij się, że odpowiednio zarządzasz czasem odtwarzania audio, aby uniknąć zniekształconego odtwarzania. Zobacz dokumentację Streaming Sound Wave aby uzyskać więcej informacji na temat właściwego zarządzania audio strumieniowym.
Uwaga: Jeśli chcesz przetwarzać dane audio w mniejszych fragmentach dla bardziej responsywnej synchronizacji ust, dostosuj obliczenia w funkcji SetNumSamplesPerChunk
. Na przykład, dzieląc częstotliwość próbkowania przez 150 (przesyłanie strumieniowe co ~6.67 ms) zamiast 100 (przesyłanie strumieniowe co 10 ms) zapewni częstsze aktualizacje synchronizacji ust.
Krok 4: Konfiguracja Anim Graph
Po skonfigurowaniu Event Graph, przełącz się do Anim Graph
aby podłączyć generator do animacji postaci:
Lip Sync
- Standard (Szybszy) Model
- Realistyczny (Wyższa Jakość) Model
- Znajdź pozę zawierającą twarz MetaHuman (zwykle z
Użyj zapisanej pozy 'Body Pose'
) - Dodaj węzeł
Blend Runtime MetaHuman Lip Sync
- Podłącz pozę do
Source Pose
węzłaBlend Runtime MetaHuman Lip Sync
- Podłącz zmienną
RuntimeVisemeGenerator
do pinuViseme Generator
- Podłącz wyjście węzła
Blend Runtime MetaHuman Lip Sync
do pinuResult
wOutput Pose
Gdy w audio zostanie wykryta synchronizacja ust, twoja postać b ędzie dynamicznie animowana odpowiednio:
- Znajdź pozę zawierającą twarz MetaHuman (zwykle z
Użyj zapisanej pozy 'Body Pose'
) - Dodaj węzeł
Blend Realistic MetaHuman Lip Sync
- Podłącz pozę do
Source Pose
węzłaBlend Realistic MetaHuman Lip Sync
- Podłącz zmienną
RealisticLipSyncGenerator
do pinuLip Sync Generator
- Podłącz wyjście węzła
Blend Realistic MetaHuman Lip Sync
do pinuResult
wOutput Pose
Model Realistyczny zapewnia lepszą jakość wizualną z bardziej naturalnymi ruchami ust:
Uwaga: Model Realistyczny jest zaprojektowany wyłącznie dla postaci MetaHuman i nie jest kompatybilny z niestandardowymi typami postaci.
Animacja Śmiechu
Możesz również dodać animacje śmiechu, które będą dynamicznie reagować na śmiech wykryty w audio:
- Dodaj węzeł
Blend Runtime MetaHuman Laughter
- Podłącz zmienną
RuntimeVisemeGenerator
do pinuViseme Generator
- Jeśli już używasz synchronizacji ust:
- Podłącz wyjście z węzła
Blend Runtime MetaHuman Lip Sync
doSource Pose
węzłaBlend Runtime MetaHuman Laughter
- Podłącz wyjście węzła
Blend Runtime MetaHuman Laughter
do pinuResult
wOutput Pose
- Podłącz wyjście z węzła
- Jeśli używasz tylko śmiechu bez synchronizacji ust:
- Podłącz swoją źródłową pozę bezpośrednio do
Source Pose
węzłaBlend Runtime MetaHuman Laughter
- Podłącz wyjście do pinu
Result
- Podłącz swoją źródłową pozę bezpośrednio do
Gdy w audio zostanie wykryty śmiech, twoja postać będzie dynamicznie animowana odpowiednio:
Łączenie z Animacjami Twarzy i Ciała
Aby zastosować synchronizację ust i śmiech wraz z istniejącymi animacjami ciała i niestandardowymi animacjami twarzy (takimi jak wyrazy, emocje lub jakiekolwiek inne ruchy mimiczne) bez ich nadpisywania:
- Dodaj węzeł
Layered blend per bone
pomiędzy animacjami ciała a końcowym wyjściem. Upewnij się, żeUse Attached Parent
jest ustawione na true. - Skonfiguruj ustawienia warstw:
- Dodaj 1 element do tablicy
Layer Setup
- Dodaj 3 elementy do
Branch Filters
dla warstwy, z następującymiBone Name
:FACIAL_C_FacialRoot
FACIAL_C_Neck2Root
FACIAL_C_Neck1Root
- Dodaj 1 element do tablicy
- Ważne dla niestandardowych animacji twarzy: W
Curve Blend Option
wybierz "Use Max Value". Pozwala to na prawidłowe nałożenie niestandardowych animacji twarzy (wyrazów, emocji itp.) na synchronizację ust. - Wykonaj połączenia:
- Istniejące animacje (np.
BodyPose
) → wejścieBase Pose
- Wyjście animacji twarzy (z węzłów synchronizacji ust i/lub śmiechu) → wejście
Blend Poses 0
- Węzeł layered blend → końcowa pozę
Result
- Istniejące animacje (np.
Dlaczego to działa: Filtry gałęzi izolują kości animacji twarzy, pozwalając synchronizacji ust i śmiechowi na mieszanie się wyłącznie z ruchami mimicznymi, zachowując jednocześnie oryginalne animacje ciała. Opcja mieszania krzywych "Use Max Value" przyjmuje maksymalną wartość z każdej krzywej zamiast mieszania ich addytywnie, co pozwala na prawidłowe łączenie niestandardowych animacji twarzy (takich jak wyrazy i emocje) z synchronizacją ust bez konfliktów. Odpowiada to strukturze szkieletu twarzy MetaHuman dla naturalnej integracji.
Uwaga: Funkcje synchronizacji ust i śmiechu są zaprojektowane do nieniszczącej pracy z istniejącą konfiguracją animacji. Wpływają one tylko na konkretne kości twarzy potrzebne do ruchu ust, pozostawiając inne animacje twarzy nienaruszone. Oznacza to, że można je bezpiecznie zintegrować w dowolnym punkcie łańcucha animacji - albo przed innymi animacjami twarzy (pozwalając tym animacjom nadpisać synchronizację ust/śmiech) albo po nich (pozwalając synchronizacji ust/śmiechowi na nałożenie się na istniejące animacje). Ta elastyczność pozwala łączyć synchronizację ust i śmiech z mruganiem oczami, ruchami brwi, wyrazami emocjonalnymi i innymi animacjami twarzy bez konfliktów.
Dostrajanie zachowania synchronizacji ust
Po skonfigurowaniu podstawowej funkcjonalności synchronizacji ust, możesz chcieć dostroić konkretne aspekty ruchu ust, aby lepiej odpowiadały wymaganiom twojego projektu.
Kontrola wysuwania języka
W standardowym modelu synchronizacji ust możesz zauważyć nadmierne wysuwanie języka do przodu podczas niektórych fonemów. Aby kontrolować wysuwanie języka:
- Po węźle
Blend Runtime MetaHuman Lip Sync
lubBlend Realistic MetaHuman Lip Sync
, dodaj węzełModify Curve
- Kliknij prawym przyciskiem myszy na węźle
Modify Curve
i wybierz Add Curve Pin - Dodaj pin krzywej o nazwie
CTRL_expressions_tongueOut
- Ustaw właściwość Apply Mode węzła na Scale
- Dostosuj parametr Value, aby kontrolować wysunięcie języka (np. 0.8, aby zmniejszyć wysunięcie o 20%)
Kontrola Otwarcia Szczęki
Realistyczna synchronizacja ust może powodować nadmiernie reaktywne ruchy szczęki w zależności od treści audio i wymagań wizualnych. Aby dostosować intensywność otwarcia szczęki:
- Po węźle blend synchronizacji ust, dodaj węzeł
Modify Curve
- Kliknij prawym przyciskiem myszy na węźle
Modify Curve
i wybierz Add Curve Pin - Dodaj pin krzywej o nazwie
CTRL_expressions_jawOpen
- Ustaw właściwość Apply Mode węzła na Scale
- Dostosuj parametr Value, aby kontrolować zakres otwarcia szczęki (np. 0.9, aby zmniejszyć ruch szczęki o 10%)
Konfiguracja
Konfiguracja Synchronizacji Ust
- Standard (Faster) Model
- Realistic (Higher Quality) Model
Węzeł Blend Runtime MetaHuman Lip Sync
ma opcje konfiguracyjne w panelu właściwości:
Właściwoś ć | Domyślna | Opis |
---|---|---|
Interpolation Speed | 25 | Kontroluje, jak szybko ruchy ust przechodzą między wizemami. Wyższe wartości skutkują szybszymi, bardziej nagłymi przejściami. |
Reset Time | 0.2 | Czas w sekundach, po którym synchronizacja ust jest resetowana. Przydatne, aby zapobiec kontynuowaniu synchronizacji ust po zatrzymaniu dźwięku. |
Węzeł Blend Realistic MetaHuman Lip Sync
ma opcje konfiguracyjne w panelu właściwości:
Właściwość | Domyślna | Opis |
---|---|---|
Interpolation Speed | 30 | Kontroluje, jak szybko ruchy ust przechodzą między pozycjami. Wyższe wartości skutkują szybszymi, bardziej nagłymi przejściami. |
Reset Time | 0.2 | Czas w sekundach, po którym synchronizacja ust jest resetowana. Przydatne, aby zapobiec kontynuowaniu synchronizacji ust po zatrzymaniu dźwięku. |
Konfiguracja Śmiechu
Węzeł Blend Runtime MetaHuman Laughter
ma własne opcje konfiguracyjne:
Właściwość | Domyślna | Opis |
---|---|---|
Interpolation Speed | 25 | Kontroluje, jak szybko ruchy ust przechodzą między animacjami śmiechu. Wyższe wartości skutkują szybszymi, bardziej nagłymi przejściami. |
Reset Time | 0.2 | Czas w sekundach, po którym śmiech jest resetowany. Przydatne, aby zapobiec kontynuowaniu śmiechu po zatrzymaniu dźwięku. |
Max Laughter Weight | 0.7 | Skaluje maksymalną intensywność animacji śmiechu (0.0 - 1.0). |
Wybór Między Modelami Synchronizacji Ust
Przy wyborze modelu synchronizacji ust (Lip Sync) dla swojego projektu, weź pod uwagę następujące czynniki:
Kryterium | Model Standardowy | Model Realistyczny |
---|---|---|
Kompatybilność z Postaciami | MetaHumans oraz wszystkie typy postaci niestandardowych | Tylko MetaHumans |
Jakość Wizualna | Dobra synchronizacja ust z wydajną pracą silnika | Zwiększony realizm z bardziej naturalnymi ruchami ust |
Wydajność | Zoptymalizowany pod wszystkie platformy, włączając mobile/VR | Nieco wyższe wymagania zasobów |
Zastosowania | Aplikacje ogólne, gry, VR/AR, mobile | Doświadczenia kinowe, interakcje z postaciami w zbliżeniach |
Kompatybilność z Wersją Silnika
Jeśli używasz Unreal Engine 5.2, Model Realistyczny może nie działać poprawnie z powodu błędu w bibliotece próbkowania (resampling) UE. Dla użytkowników UE 5.2, którzy potrzebują niezawodnej funkcji synchronizacji ust, prosimy używać Modelu Standardowego.
Ten problem dotyczy wyłącznie UE 5.2 i nie wpływa na inne wersje silnika.
Dla większości projektów, Model Standardowy zapewnia doskonałą równowagę między jakością a wydajnością, przy jednoczesnym wsparciu najszerszego zakresu typów postaci. Model Realistyczny jest idealny, gdy potrzebujesz najwyższej wierności wizualnej, szczególnie dla postaci MetaHuman w kontekstach, gdzie obciążenie wydajnościowe jest mniej krytyczne.