Przejdź do głównej zawartości

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:

  1. 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)
  2. Masz przynajmniej jedną postać MetaHuman pobraną i dostępną w twoim projekcie
  3. 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ą:

  1. Pobierz wtyczkę rozszerzającą Standard Lip Sync Extension z Google Drive
  2. Wypakuj folder z pobranego archiwum do folderu Plugins twojego projektu (utwórz ten folder, jeśli nie istnieje)
  3. Upewnij się, że twój projekt jest skonfigurowany jako projekt C++ (nawet jeśli nie masz żadnego kodu C++)
  4. Przebuduj swój projekt
notatka
  • 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ż:

Proces konfiguracji

Krok 1: Znajdź i zmodyfikuj Blueprint animacji twarzy

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

Face Animation Blueprint

Masz kilka opcji implementacji funkcji synchronizacji ust:

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.

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.

  1. Dodaj węzeł Event Blueprint Begin Play, jeśli jeszcze nie istnieje
  2. Dodaj węzeł Create Runtime Viseme Generator i połącz go z wydarzeniem Begin Play
  3. Zapisz wynik jako zmienną (np. "VisemeGenerator") do użycia w innych częściach grafu

Tworzenie Runtime Viseme Generator

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.

To podejście wykonuje synchronizację ust w czasie rzeczywistym podczas mówienia do mikrofonu:

  1. Utwórz Capturable Sound Wave używając Runtime Audio Importer
  2. Przed rozpoczęciem przechwytywania dźwięku, podłącz się do delegata OnPopulateAudioData
  3. W powiązanej funkcji, wywołaj ProcessAudioData z twojego Runtime Viseme Generator
  4. Rozpocznij przechwytywanie dźwięku z mikrofonu

Kopiowalne węzły.

Lip Sync During Audio Capture

Krok 4: Konfiguracja Anim Graph

Po skonfigurowaniu Event Graph, przełącz się do Anim Graph aby podłączyć generator do animacji postaci:

Lip Sync

  1. Znajdź pozę zawierającą twarz MetaHuman (zwykle z Użyj zapisanej pozy 'Body Pose')
  2. Dodaj węzeł Blend Runtime MetaHuman Lip Sync
  3. Podłącz pozę do Source Pose węzła Blend Runtime MetaHuman Lip Sync
  4. Podłącz zmienną RuntimeVisemeGenerator do pinu Viseme Generator
  5. Podłącz wyjście węzła Blend Runtime MetaHuman Lip Sync do pinu Result w Output Pose

Blend Runtime MetaHuman Lip Sync

Gdy w audio zostanie wykryta synchronizacja ust, twoja postać będzie dynamicznie animowana odpowiednio:

Lip Sync

Animacja Śmiechu

Możesz również dodać animacje śmiechu, które będą dynamicznie reagować na śmiech wykryty w audio:

  1. Dodaj węzeł Blend Runtime MetaHuman Laughter
  2. Podłącz zmienną RuntimeVisemeGenerator do pinu Viseme Generator
  3. Jeśli już używasz synchronizacji ust:
    • Podłącz wyjście z węzła Blend Runtime MetaHuman Lip Sync do Source Pose węzła Blend Runtime MetaHuman Laughter
    • Podłącz wyjście węzła Blend Runtime MetaHuman Laughter do pinu Result w Output Pose
  4. Jeśli używasz tylko śmiechu bez synchronizacji ust:
    • Podłącz swoją źródłową pozę bezpośrednio do Source Pose węzła Blend Runtime MetaHuman Laughter
    • Podłącz wyjście do pinu Result

Blend Runtime MetaHuman Laughter

Gdy w audio zostanie wykryty śmiech, twoja postać będzie dynamicznie animowana odpowiednio:

Laughter

Łą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:

  1. Dodaj węzeł Layered blend per bone pomiędzy animacjami ciała a końcowym wyjściem. Upewnij się, że Use Attached Parent jest ustawione na true.
  2. Skonfiguruj ustawienia warstw:
    • Dodaj 1 element do tablicy Layer Setup
    • Dodaj 3 elementy do Branch Filters dla warstwy, z następującymi Bone Name:
      • FACIAL_C_FacialRoot
      • FACIAL_C_Neck2Root
      • FACIAL_C_Neck1Root
  3. 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.
  4. Wykonaj połączenia:
    • Istniejące animacje (np. BodyPose) → wejście Base 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

Layered Blend Per Bone

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:

  1. Po węźle Blend Runtime MetaHuman Lip Sync lub Blend Realistic MetaHuman Lip Sync, dodaj węzeł Modify Curve
  2. Kliknij prawym przyciskiem myszy na węźle Modify Curve i wybierz Add Curve Pin
  3. Dodaj pin krzywej o nazwie CTRL_expressions_tongueOut
  4. Ustaw właściwość Apply Mode węzła na Scale
  5. 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:

  1. Po węźle blend synchronizacji ust, dodaj węzeł Modify Curve
  2. Kliknij prawym przyciskiem myszy na węźle Modify Curve i wybierz Add Curve Pin
  3. Dodaj pin krzywej o nazwie CTRL_expressions_jawOpen
  4. Ustaw właściwość Apply Mode węzła na Scale
  5. Dostosuj parametr Value, aby kontrolować zakres otwarcia szczęki (np. 0.9, aby zmniejszyć ruch szczęki o 10%)

Konfiguracja

Konfiguracja Synchronizacji Ust

Węzeł Blend Runtime MetaHuman Lip Sync ma opcje konfiguracyjne w panelu właściwości:

WłaściwośćDomyślnaOpis
Interpolation Speed25Kontroluje, jak szybko ruchy ust przechodzą między wizemami. Wyższe wartości skutkują szybszymi, bardziej nagłymi przejściami.
Reset Time0.2Czas 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ślnaOpis
Interpolation Speed25Kontroluje, jak szybko ruchy ust przechodzą między animacjami śmiechu. Wyższe wartości skutkują szybszymi, bardziej nagłymi przejściami.
Reset Time0.2Czas w sekundach, po którym śmiech jest resetowany. Przydatne, aby zapobiec kontynuowaniu śmiechu po zatrzymaniu dźwięku.
Max Laughter Weight0.7Skaluje 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:

KryteriumModel StandardowyModel Realistyczny
Kompatybilność z PostaciamiMetaHumans oraz wszystkie typy postaci niestandardowychTylko MetaHumans
Jakość WizualnaDobra synchronizacja ust z wydajną pracą silnikaZwiększony realizm z bardziej naturalnymi ruchami ust
WydajnośćZoptymalizowany pod wszystkie platformy, włączając mobile/VRNieco wyższe wymagania zasobów
ZastosowaniaAplikacje ogólne, gry, VR/AR, mobileDoświadczenia kinowe, interakcje z postaciami w zbliżeniach

Kompatybilność z Wersją Silnika

Problem z Kompatybilnością w UE 5.2

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.