Перейти к основному содержимому

Как использовать плагин

Это руководство проведет вас через процесс настройки Runtime MetaHuman Lip Sync для ваших персонажей MetaHuman.

Примечание: Runtime MetaHuman Lip Sync работает как с MetaHuman, так и с пользовательскими персонажами. Плагин поддерживает различные типы персонажей, включая:

  • Популярных коммерческих персонажей (Daz Genesis 8/9, Reallusion CC3/CC4, Mixamo, ReadyPlayerMe и т.д.)
  • Персонажей с блендшейпами на основе FACS
  • Модели, использующие стандарты блендшейпов ARKit
  • Персонажей с наборами фонем Preston Blair
  • Системы фонем 3ds Max
  • Любых персонажей с пользовательскими морф-таргетами для мимики

Подробные инструкции по настройке пользовательских персонажей, включая справочники по маппингу висем для всех перечисленных выше стандартов, смотрите в руководстве по настройке пользовательских персонажей.

Предварительные требования

Перед началом работы убедитесь, что:

  1. Плагин MetaHuman включен в вашем проекте (Примечание: Начиная с UE 5.6, этот шаг больше не требуется, так как функциональность MetaHuman интегрирована непосредственно в движок)
  2. У вас есть хотя бы один персонаж MetaHuman, загруженный и доступный в вашем проекте
  3. Плагин Runtime MetaHuman Lip Sync установлен

Плагин расширения для стандартной модели

Если вы планируете использовать Стандартную (Более быструю) Модель, вам необходимо установить плагин расширения:

  1. Скачайте Standard Lip Sync Extension plugin с Google Диска
  2. Извлеките папку из скачанного архива в папку Plugins вашего проекта (создайте эту папку, если она не существует)
  3. Убедитесь, что ваш проект настроен как C++ проект (даже если у вас нет кода на C++)
  4. Пересоберите ваш проект
примечание
  • Это расширение требуется только если вы хотите использовать Стандартную Модель. Если вам нужна только Реалистичная Модель, вы можете пропустить этот шаг.
  • Для получения дополнительной информации о том, как собирать плагины вручную, см. руководство по сборке плагинов

Дополнительные плагины

  • Если вы планируете использовать захват аудио (например, входной сигнал с микрофона), установите плагин Runtime Audio Importer.
  • Если вы планируете использовать функционал преобразования текста в речь с моими плагинами (у вас может быть собственное кастомное TTS или другой источник аудио), то в дополнение к плагину Runtime Audio Importer также установите:

Процесс настройки

Шаг 1: Найдите и измените Blueprint анимации лица

Вам необходимо изменить Animation Blueprint, который будет использоваться для лицевой анимации вашего MetaHuman персонажа. Стандартный Animation Blueprint лица MetaHuman находится по пути:

Content/MetaHumans/Common/Face/Face_AnimBP

Face Animation Blueprint

У вас есть несколько вариантов для реализации функциональности lip sync:

Откройте стандартный Face_AnimBP напрямую и внесите свои изменения. Любые изменения затронут всех персонажей MetaHuman, использующих этот Animation Blueprint.

Примечание: Этот подход удобен, но повлияет на всех персонажей, использующих стандартный Animation Blueprint.

Важно: Смешивание Runtime MetaHuman Lip Sync может быть реализовано в любом ассете Animation Blueprint, который имеет доступ к позе, содержащей лицевые кости, присутствующие в Face_Archetype_Skeleton стандартного MetaHuman. Вы не ограничены указанными выше вариантами - это просто распространенные подходы к реализации.

Шаг 2: Настройка Event Graph

Откройте ваш Face Animation Blueprint и переключитесь на Event Graph. Вам нужно будет создать генератор, который будет обрабатывать аудиоданные и генерировать анимацию lip sync.

  1. Добавьте ноду Event Blueprint Begin Play, если она еще не существует
  2. Добавьте ноду Create Runtime Viseme Generator и подключите ее к событию Begin Play
  3. Сохраните вывод в переменную (например, "VisemeGenerator") для использования в других частях графа

Создание Runtime Viseme Generator

Шаг 3: Настройка обработки аудиовхода

Вам необходимо настроить метод обработки аудиовхода. Существует несколько способов сделать это в зависимости от вашего источника аудио.

Этот подход выполняет синхронизацию губ в реальном времени во время разговора в микрофон:

  1. Создайте Capturable Sound Wave с помощью Runtime Audio Importer
  2. Перед началом захвата аудио привяжитесь к делегату OnPopulateAudioData
  3. В привязанной функции вызовите ProcessAudioData из вашего Runtime Viseme Generator
  4. Начните захват аудио с микрофона

Copyable nodes.

Lip Sync During Audio Capture

Шаг 4: Настройка Anim Graph

После настройки Event Graph переключитесь на Anim Graph, чтобы подключить генератор к анимации персонажа:

Lip Sync

  1. Найдите позу, содержащую лицо MetaHuman (обычно из Use cached pose 'Body Pose')
  2. Добавьте ноду Blend Runtime MetaHuman Lip Sync
  3. Подключите позу к пину Source Pose ноды Blend Runtime MetaHuman Lip Sync
  4. Подключите вашу переменную RuntimeVisemeGenerator к пину Viseme Generator
  5. Подключите выход ноды Blend Runtime MetaHuman Lip Sync к пину Result ноды Output Pose

Blend Runtime MetaHuman Lip Sync

Когда в аудио обнаруживается синхронизация губ, ваш персонаж будет динамически анимироваться соответствующим образом:

Lip Sync

Анимация смеха

Вы также можете добавить анимации смеха, которые будут динамически реагировать на смех, обнаруженный в аудио:

  1. Добавьте ноду Blend Runtime MetaHuman Laughter
  2. Подключите вашу переменную RuntimeVisemeGenerator к пину Viseme Generator
  3. Если вы уже используете синхронизацию губ:
    • Подключите выход из ноды Blend Runtime MetaHuman Lip Sync к пину Source Pose ноды Blend Runtime MetaHuman Laughter
    • Подключите выход ноды Blend Runtime MetaHuman Laughter к пину Result ноды Output Pose
  4. Если используется только смех без синхронизации губ:
    • Подключите вашу исходную позу напрямую к пину Source Pose ноды Blend Runtime MetaHuman Laughter
    • Подключите выход к пину Result

Blend Runtime MetaHuman Laughter

Когда в аудио обнаруживается смех, ваш персонаж будет динамически анимироваться соответствующим образом:

Laughter

Комбинирование с лицевой и телесной анимацией

Чтобы применить синхронизацию губ и смех вместе с существующими анимациями тела и пользовательскими лицевыми анимациями (такими как выражения, эмоции или любые другие лицевые движения), не перезаписывая их:

  1. Добавьте узел Layered blend per bone между вашими анимациями тела и финальным выводом. Убедитесь, что Use Attached Parent установлен в true.
  2. Настройте слои:
    • Добавьте 1 элемент в массив Layer Setup
    • Добавьте 3 элемента в Branch Filters для слоя со следующими Bone Name:
      • FACIAL_C_FacialRoot
      • FACIAL_C_Neck2Root
      • FACIAL_C_Neck1Root
  3. Важно для пользовательских лицевых анимаций: В Curve Blend Option выберите "Use Max Value". Это позволяет пользовательским лицевым анимациям (выражениям, эмоциям и т.д.) правильно накладываться поверх синхронизации губ.
  4. Сделайте соединения:
    • Существующие анимации (например, BodyPose) → вход Base Pose
    • Выход лицевой анимации (от узлов синхронизации губ и/или смеха) → вход Blend Poses 0
    • Узел Layered blend → Финальная поза Result

Layered Blend Per Bone

Почему это работает: Фильтры ветвей изолируют кости лицевой анимации, позволяя синхронизации губ и смеху смешиваться исключительно с лицевыми движениями, сохраняя при этом оригинальные анимации тела. Опция смещения кривых "Use Max Value" берет максимальное значение от каждой кривой вместо их аддитивного смешивания, что позволяет пользовательским лицевым анимациям (таким как выражения и эмоции) правильно комбинироваться с синхронизацией губ без конфликтов. Это соответствует структуре лицевого рига MetaHuman для естественной интеграции.

Примечание: Функции синхронизации губ и смеха разработаны для работы неразрушающим образом с вашей существующей анимационной настройкой. Они влияют только на конкретные лицевые кости, необходимые для движения рта, оставляя другие лицевые анимации нетронутыми. Это означает, что вы можете безопасно интегрировать их в любой точке вашей анимационной цепочки - либо до других лицевых анимаций (позволяя этим анимациям переопределять синхронизацию губ/смех), либо после них (позволяя синхронизации губ/смеху накладываться поверх ваших существующих анимаций). Эта гибкость позволяет вам комбинировать синхронизацию губ и смех с морганием глаз, движениями бровей, эмоциональными выражениями и другими лицевыми анимациями без конфликтов.

Тонкая настройка поведения синхронизации губ

После настройки базовой функциональности синхронизации губ вы можете захотеть тонко настроить определенные аспекты движения рта, чтобы лучше соответствовать требованиям вашего проекта.

Управление высовыванием языка

В стандартной модели синхронизации губ вы можете заметить чрезмерное выдвижение языка вперед во время определенных фонем. Чтобы контролировать высовывание языка:

  1. После вашего узла Blend Runtime MetaHuman Lip Sync или Blend Realistic MetaHuman Lip Sync добавьте узел Modify Curve
  2. Щелкните правой кнопкой мыши на узле Modify Curve и выберите Add Curve Pin
  3. Добавьте пин кривой с именем CTRL_expressions_tongueOut
  4. Установите свойство Apply Mode узла в значение Scale
  5. Настройте параметр Value для управления высовыванием языка (например, 0.8 для уменьшения высовывания на 20%)

Управление открытием челюсти

Реалистичная синхронизация губ может создавать чрезмерно активные движения челюсти в зависимости от вашего аудиоконтента и визуальных требований. Чтобы настроить интенсивность открытия челюсти:

  1. После вашего узла смешивания lip sync добавьте узел Modify Curve
  2. Щелкните правой кнопкой мыши на узле Modify Curve и выберите Add Curve Pin
  3. Добавьте пин кривой с именем CTRL_expressions_jawOpen
  4. Установите свойство Apply Mode узла в значение Scale
  5. Настройте параметр Value для управления диапазоном открытия челюсти (например, 0.9 для уменьшения движения челюсти на 10%)

Конфигурация

Конфигурация Lip Sync

Узел Blend Runtime MetaHuman Lip Sync имеет параметры конфигурации на своей панели свойств:

СвойствоПо умолчаниюОписание
Interpolation Speed25Определяет, насколько быстро движения губ переходят между виземами. Более высокие значения приводят к более быстрым и резким переходам.
Reset Time0.2Продолжительность в секундах, после которой синхронизация губ сбрасывается. Это полезно для предотвращения продолжения синхронизации губ после остановки аудио.

Конфигурация смеха

Узел Blend Runtime MetaHuman Laughter имеет свои собственные параметры конфигурации:

СвойствоПо умолчаниюОписание
Interpolation Speed25Определяет, насколько быстро движения губ переходят между анимациями смеха. Более высокие значения приводят к более быстрым и резким переходам.
Reset Time0.2Продолжительность в секундах, после которой смех сбрасывается. Это полезно для предотвращения продолжения смеха после остановки аудио.
Max Laughter Weight0.7Масштабирует максимальную интенсивность анимации смеха (0.0 - 1.0).

Выбор между моделями Lip Sync

При выборе модели синхронизации губ для вашего проекта учитывайте следующие факторы:

КритерийСтандартная МодельРеалистичная Модель
Совместимость с персонажамиMetaHumans и все типы пользовательских персонажейТолько MetaHumans
Визуальное качествоХорошая синхронизация губ с эффективной производительностьюУлучшенный реализм с более естественными движениями рта
ПроизводительностьОптимизирована для всех платформ, включая мобильные/VRНесколько более высокие требования к ресурсам
Случаи примененияУниверсальные приложения, игры, VR/AR, мобильныеКинематографичные сцены, близкие взаимодействия с персонажами

Совместимость с версиями движка

Проблема совместимости с UE 5.2

Если вы используете Unreal Engine 5.2, Реалистичная Модель может работать некорректно из-за ошибки в библиотеке ресемплинга UE. Пользователям UE 5.2, которым требуется надежная функция синхронизации губ, рекомендуется использовать Стандартную Модель.

Эта проблема характерна только для UE 5.2 и не затрагивает другие версии движка.

Для большинства проектов Стандартная Модель обеспечивает отличный баланс качества и производительности, поддерживая при этом самый широкий спектр типов персонажей. Реалистичная Модель идеальна в тех случаях, когда требуется максимальная визуальная достоверность именно для персонажей MetaHuman в контекстах, где производительность менее критична.