Cómo usar el plugin
Esta guía te lleva a través del proceso de configuración de Runtime MetaHuman Lip Sync para tus personajes MetaHuman.
Nota: Runtime MetaHuman Lip Sync funciona tanto con MetaHuman como con personajes personalizados. El plugin admite varios tipos de personajes, incluyendo:
- Personajes comerciales populares (Daz Genesis 8/9, Reallusion CC3/CC4, Mixamo, ReadyPlayerMe, etc)
- Personajes con blendshapes basados en FACS
- Modelos que usan estándares de blendshape ARKit
- Personajes con conjuntos de fonemas Preston Blair
- Sistemas de fonemas de 3ds Max
- Cualquier personaje con objetivos de morph personalizados para expresiones faciales
Para instrucciones detalladas sobre cómo configurar personajes personalizados, incluyendo referencias de mapeo de visemas para todos los estándares mencionados, consulta la Guía de configuración de personajes personalizados.
Requisitos previos
Antes de comenzar, asegúrate de:
- El plugin MetaHuman está habilitado en tu proyecto (Nota: A partir de UE 5.6, este paso ya no es necesario ya que la funcionalidad MetaHuman está integrada directamente en el motor)
- Tienes al menos un personaje MetaHuman descargado y disponible en tu proyecto
- El plugin Runtime MetaHuman Lip Sync está instalado
Plugins adicionales:
- Si planeas usar captura de audio (por ejemplo, entrada de micrófono), instala el plugin Runtime Audio Importer.
- Si planeas usar funcionalidad de texto a voz, instala el plugin Runtime Text To Speech.
Configuración específica por plataforma
Configuración para Android / Meta Quest
Si estás desarrollando para plataformas Android o Meta Quest y encuentras errores de compilación con este plugin, deberás deshabilitar la arquitectura x86_64 (x64) de Android en la configuración de tu proyecto:
- Ve a Edit > Project Settings
- Navega a Platforms > Android
- En Platforms - Android, sección Build, encuentra Support x86_64 [aka x64] y asegúrate de que esté deshabilitado, como se muestra a continuación
Esto se debe a que el plugin actualmente solo admite las arquitecturas arm64-v8a y armeabi-v7a para plataformas Android / Meta Quest.
Proceso de configuración
Paso 1: Localizar y modificar el Blueprint de animación facial
- UE 5.5 y anteriores (o MetaHumans Legacy en UE 5.6+)
- Personajes de MetaHuman Creator en UE 5.6+
Necesitas modificar un Animation Blueprint que se usará para las animaciones faciales de tu personaje MetaHuman. El Animation Blueprint facial predeterminado de MetaHuman se encuentra en:
Content/MetaHumans/Common/Face/Face_AnimBP
Tienes varias opciones para implementar la funcionalidad de lip sync:
- Editar Asset Predeterminado (Opción Más Simple)
- Crear un Duplicado
- Usar Animation Blueprint Personalizado
Abre directamente el Face_AnimBP
predeterminado y realiza tus modificaciones. Cualquier cambio afectará a todos los personajes MetaHuman que utilicen este Animation Blueprint.
Nota: Este enfoque es conveniente pero impactará a todos los personajes que usen el Animation Blueprint predeterminado.
- Duplica
Face_AnimBP
y asígnale un nombre descriptivo - Localiza la clase Blueprint de tu personaje (ej. para el personaje "Bryan", estaría en
Content/MetaHumans/Bryan/BP_Bryan
) - Abre el Blueprint del personaje y encuentra el componente Face
- Cambia la propiedad Anim Class a tu nuevo Animation Blueprint duplicado
Nota: Este enfoque te permite personalizar el lip sync para personajes específicos mientras dejas otros sin cambios.
Puedes implementar la mezcla de lip sync en cualquier Animation Blueprint que tenga acceso a los huesos faciales requeridos:
- Crea o utiliza un Animation Blueprint personalizado existente
- Asegúrate de que tu Animation Blueprint funcione con un esqueleto que contenga los mismos huesos faciales que el
Face_Archetype_Skeleton
predeterminado de MetaHuman (que es el esqueleto estándar usado para cualquier personaje MetaHuman)
Nota: Este enfoque te da la máxima flexibilidad para integración con sistemas de animación personalizados.
A partir de UE 5.6, se introdujo el nuevo sistema MetaHuman Creator, que crea personajes sin el asset tradicional Face_AnimBP
. Para estos personajes, el plugin proporciona un Animation Blueprint de cara ubicado en:
Content/LipSyncData/LipSync_Face_AnimBP
Uso del Blueprint de Animación Facial del Plugin:
- Localiza la clase Blueprint de tu personaje de MetaHuman Creator
- Abre el Blueprint del personaje y encuentra el componente Face
- Cambia la propiedad Anim Class al
LipSync_Face_AnimBP
del plugin - Continúa con los Pasos 2-4 para configurar la funcionalidad Runtime MetaHuman Lip Sync
Opciones Alternativas:
- Usar Instrucciones Legacy: Puedes seguir las instrucciones de UE 5.5 mencionadas arriba si trabajas con MetaHumans legacy o prefieres el flujo de trabajo tradicional
- Crear un Blueprint de Animación Personalizado: Crea tu propio Animation Blueprint que funcione con la estructura de esqueleto de MetaHuman Creator
Nota: Si estás usando UE 5.6+ pero trabajas con MetaHumans legacy (no creados a través de MetaHuman Creator), usa las instrucciones de la pestaña "UE 5.5 and Earlier" en su lugar.
Importante: La mezcla de Runtime MetaHuman Lip Sync puede implementarse en cualquier asset de Animation Blueprint que tenga acceso a una pose que contenga los huesos faciales presentes en el Face_Archetype_Skeleton
por defecto de MetaHuman. No estás limitado a las opciones anteriores - estos son solo enfoques comunes de implementación.
Paso 2: Configuración del Event Graph
Abre tu Face Animation Blueprint y cambia al Event Graph
. Necesitarás crear un Runtime Viseme Generator que procesará datos de audio y generará visemas.
- Añade el nodo
Event Blueprint Begin Play
si no existe ya - Añade el nodo
Create Runtime Viseme Generator
y conéctalo al evento Begin Play - Guarda la salida como una variable (ej. "VisemeGenerator") para usar en otras partes del grafo
Paso 3: Configuración del procesamiento de entrada de audio
Necesitas configurar un método para procesar la entrada de audio. Hay varias formas de hacerlo dependiendo de tu fuente de audio.
- Micrófono (Tiempo real)
- Micrófono (Reproducción)
- Texto-a-Voz (Local)
- Texto-a-Voz (APIs Externas)
- Desde Archivo/Buffer de Audio
- Fuente de Audio Personalizada
Este enfoque realiza lip sync en tiempo real mientras hablas al micrófono:
- Crea un Capturable Sound Wave usando Runtime Audio Importer
- Antes de comenzar a capturar audio, enlázate al delegado
OnPopulateAudioData
- En la función enlazada, llama a
ProcessAudioData
desde tu Runtime Viseme Generator - Comienza a capturar audio desde el micrófono
Este enfoque captura audio de un micrófono, luego lo reproduce con lip sync:
- Crea un Capturable Sound Wave usando Runtime Audio Importer
- Comienza la captura de audio desde el micrófono
- Antes de reproducir el capturable sound wave, enlázate a su delegado
OnGeneratePCMData
- En la función enlazada, llama a
ProcessAudioData
desde tu Runtime Viseme Generator
Nota: Si quieres procesar datos de audio en fragmentos más pequeños para un lip sync más responsivo, ajusta el cálculo en la función SetNumSamplesPerChunk
. Por ejemplo, dividir la tasa de muestreo por 150 (transmitiendo cada ~6.67 ms) en lugar de 100 (transmitiendo cada 10 ms) proporcionará actualizaciones de lip sync más frecuentes.
- Regular
- Streaming
Este enfoque sintetiza voz desde texto y realiza lip sync:
- Usa Runtime Text To Speech para generar voz desde texto
- Usa Runtime Audio Importer para importar el audio sintetizado
- Antes de reproducir el sound wave importado, enlázate a su delegado
OnGeneratePCMData
- En la función enlazada, llama a
ProcessAudioData
desde tu Runtime Viseme Generator
Nota: Si quieres procesar datos de audio en fragmentos más pequeños para un lip sync más responsivo, ajusta el cálculo en la función SetNumSamplesPerChunk
. Por ejemplo, dividir la tasa de muestreo por 150 (transmitiendo cada ~6.67 ms) en lugar de 100 (transmitiendo cada 10 ms) proporcionará actualizaciones de lip sync más frecuentes.
Este enfoque usa síntesis de texto-a-voz en streaming con lip sync en tiempo real:
- Usa Runtime Text To Speech para generar voz en streaming desde texto
- Usa Runtime Audio Importer para importar el audio sintetizado
- Antes de reproducir el sound wave en streaming, enlázate a su delegado
OnGeneratePCMData
- En la función enlazada, llama a
ProcessAudioData
desde tu Runtime Viseme Generator
Nota: Si quieres procesar datos de audio en fragmentos más pequeños para un lip sync más responsivo, ajusta el cálculo en la función SetNumSamplesPerChunk
. Por ejemplo, dividir la tasa de muestreo por 150 (transmitiendo cada ~6.67 ms) en lugar de 100 (transmitiendo cada 10 ms) proporcionará actualizaciones de lip sync más frecuentes.
- Regular
- Streaming
Este enfoque usa el plugin Runtime AI Chatbot Integrator para generar voz sintetizada desde servicios de IA y realizar lip sync:
- Usa Runtime AI Chatbot Integrator para generar voz desde texto usando APIs externas (OpenAI, ElevenLabs, etc.)
- Usa Runtime Audio Importer para importar los datos de audio sintetizados
- Antes de reproducir el sound wave importado, enlázate a su delegado
OnGeneratePCMData
- En la función enlazada, llama a
ProcessAudioData
desde tu Runtime Viseme Generator
Nota: Si quieres procesar datos de audio en fragmentos más pequeños para un lip sync más responsivo, ajusta el cálculo en la función SetNumSamplesPerChunk
. Por ejemplo, dividir la tasa de muestreo por 150 (transmitiendo cada ~6.67 ms) en lugar de 100 (transmitiendo cada 10 ms) proporcionará actualizaciones de lip sync más frecuentes.
Este enfoque usa el plugin Runtime AI Chatbot Integrator para conectar con APIs de TTS en streaming y realizar lip sync:
- Usa Runtime AI Chatbot Integrator para conectarte a APIs de TTS en streaming (como ElevenLabs Streaming API)
- Usa Runtime Audio Importer para importar los datos de audio sintetizados
- Antes de reproducir el sound wave en streaming, enlázate a su delegado
OnGeneratePCMData
- En la función enlazada, llama a
ProcessAudioData
desde tu Runtime Viseme Generator
Nota: Si quieres procesar datos de audio en fragmentos más pequeños para un lip sync más responsivo, ajusta el cálculo en la función SetNumSamplesPerChunk
. Por ejemplo, dividir la tasa de muestreo por 150 (transmitiendo cada ~6.67 ms) en lugar de 100 (transmitiendo cada 10 ms) proporcionará actualizaciones de lip sync más frecuentes.
Este enfoque usa archivos de audio pregrabados o buffers de audio para lip sync:
- Usa Runtime Audio Importer para importar un archivo de audio desde disco o memoria
- Antes de reproducir el sound wave importado, enlázate a su delegado
OnGeneratePCMData
- En la función enlazada, llama a
ProcessAudioData
desde tu Runtime Viseme Generator - Reproduce el sound wave importado y observa la animación de lip sync
Nota: Si quieres procesar datos de audio en fragmentos más pequeños para un lip sync más responsivo, ajusta el cálculo en la función SetNumSamplesPerChunk
. Por ejemplo, dividir la tasa de muestreo por 150 (transmitiendo cada ~6.67 ms) en lugar de 100 (transmitiendo cada 10 ms) proporcionará actualizaciones de lip sync más frecuentes.
Para una fuente de audio personalizada, necesitas:
- Datos de audio en formato PCM float (un array de muestras en punto flotante)
- La tasa de muestreo y número de canales
- Llama a
ProcessAudioData
desde tu Runtime Viseme Generator con estos parámetros
Aquí hay un ejemplo de streaming de audio desde una fuente personalizada:
Nota: Si quieres procesar datos de audio en fragmentos más pequeños para un lip sync más responsivo, ajusta el cálculo en la función SetNumSamplesPerChunk
. Por ejemplo, dividir la tasa de muestreo por 150 (transmitiendo cada ~6.67 ms) en lugar de 100 (transmitiendo cada 10 ms) proporcionará actualizaciones de lip sync más frecuentes.
Paso 4: Configuración del Anim Graph
Después de configurar el Event Graph, cambia al Anim Graph
para conectar el viseme generator a la animación del personaje:
Lip Sync
- Localiza la pose que contiene la cara del MetaHuman (típicamente desde
Use cached pose 'Body Pose'
) - Añade el nodo
Blend Runtime MetaHuman Lip Sync
- Conecta la pose al
Source Pose
del nodoBlend Runtime MetaHuman Lip Sync
- Conecta tu variable
RuntimeVisemeGenerator
al pinViseme Generator
- Conecta la salida del nodo
Blend Runtime MetaHuman Lip Sync
al pinResult
delOutput Pose
Cuando se detecte lip sync en el audio, tu personaje se animará dinámicamente acorde:
Animación de Risa
También puedes añadir animaciones de risa que responderán dinámicamente a risas detectadas en el audio:
- Añade el nodo
Blend Runtime MetaHuman Laughter
- Conecta tu variable
RuntimeVisemeGenerator
al pinViseme Generator
- Si ya estás usando lip sync:
- Conecta la salida del nodo
Blend Runtime MetaHuman Lip Sync
alSource Pose
del nodoBlend Runtime MetaHuman Laughter
- Conecta la salida del nodo
Blend Runtime MetaHuman Laughter
al pinResult
delOutput Pose
- Conecta la salida del nodo
- Si solo usas risa sin lip sync:
- Conecta tu pose fuente directamente al
Source Pose
del nodoBlend Runtime MetaHuman Laughter
- Conecta la salida al pin
Result
- Conecta tu pose fuente directamente al
Cuando se detecte risa en el audio, tu personaje se animará dinámicamente acorde:
Combinación con Animaciones Corporales
Para aplicar lip sync y risa junto a animaciones corporales existentes sin sobrescribirlas:
- Añade un nodo
Layered blend per bone
entre tus animaciones corporales y la salida final. Asegúrate queUse Attached Parent
sea true. - Configura el setup de capas:
- Añade 1 item al array
Layer Setup
- Añade 3 items a los
Branch Filters
para la capa, con los siguientesBone Name
s:FACIAL_C_FacialRoot
FACIAL_C_Neck2Root
FACIAL_C_Neck1Root
- Añade 1 item al array
- Haz las conexiones:
- Animaciones existentes (como
BodyPose
) → entradaBase Pose
- Salida de animación facial (desde nodos de lip sync y/o risa) → entrada
Blend Poses 0
- Nodo de mezcla por capas → pose
Result
final
- Animaciones existentes (como
Por qué funciona: Los branch filters aíslan huesos de animación facial, permitiendo que lip sync y risa se mezclen exclusivamente con movimientos faciales mientras preservan animaciones corporales originales. Esto coincide con la estructura del rig facial de MetaHuman, asegurando integración natural.
Nota: Las características de lip sync y risa están diseñadas para funcionar de forma no destructiva con tu setup de animación existente. Solo afectan los huesos faciales específicos necesarios para movimiento de boca, dejando otras animaciones faciales intactas. Esto significa que puedes integrarlas de forma segura en cualquier punto de tu cadena de animación - ya sea antes de otras animaciones faciales (permitiendo que esas animaciones sobrescriban lip sync/risa) o después de ellas (dejando que lip sync/risa se mezcle encima de tus animaciones existentes). Esta flexibilidad te permite combinar lip sync y risa con parpadeo de ojos, movimientos de cejas, expresiones emocionales y otras animaciones faciales sin conflictos.
Configuración
Configuración de Lip Sync
El nodo Blend Runtime MetaHuman Lip Sync
tiene opciones de configuración en su panel de propiedades:
Propiedad | Valor por Defecto | Descripción |
---|---|---|
Interpolation Speed | 25 | Controla qué tan rápido transicionan los movimientos labiales entre visemas. Valores más altos resultan en transiciones más rápidas y abruptas. |
Reset Time | 0.2 | Duración en segundos después de la cual el lip sync se reinicia. Útil para prevenir que el lip sync continúe después de que el audio se detuvo. |
Configuración de Risa
El nodo Blend Runtime MetaHuman Laughter
tiene sus propias opciones de configuración:
Propiedad | Valor por Defecto | Descripción |
---|---|---|
Interpolation Speed | 25 | Controla qué tan rápido transicionan los movimientos labiales entre animaciones de risa. Valores más altos resultan en transiciones más rápidas y abruptas. |
Reset Time | 0.2 | Duración en segundos después de la cual la risa se reinicia. Útil para prevenir que la risa continúe después de que el audio se detuvo. |
Max Laughter Weight | 0.7 | Escala la intensidad máxima de la animación de risa (0.0 - 1.0). |