Como usar o plugin
Este guia orienta você através do processo de configuração do Runtime MetaHuman Lip Sync para seus personagens MetaHuman.
Nota: O Runtime MetaHuman Lip Sync funciona tanto com MetaHumans quanto com personagens personalizados. O plugin suporta vários tipos de personagens, incluindo:
- Personagens comerciais populares (Daz Genesis 8/9, Reallusion CC3/CC4, Mixamo, ReadyPlayerMe, etc)
- Personagens com blendshapes baseados em FACS
- Modelos que usam os padrões de blendshape ARKit
- Personagens com conjuntos de fonemas Preston Blair
- Sistemas de fonemas do 3ds Max
- Qualquer personagem com morph targets personalizados para expressões faciais
Para instruções detalhadas sobre a configuração de personagens personalizados, incluindo referências de mapeamento de visemas para todos os padrões acima, consulte o Guia de configuração de personagens personalizados.
Pré-requisitos
Antes de começar, certifique-se de que:
- O plugin MetaHuman está habilitado em seu projeto (Nota: A partir do UE 5.6, esta etapa não é mais necessária, pois a funcionalidade MetaHuman está integrada diretamente no engine)
- Você tem pelo menos um personagem MetaHuman baixado e disponível em seu projeto
- O plugin Runtime MetaHuman Lip Sync está instalado
Plugins Adicionais:
- Se você planeja usar captura de áudio (por exemplo, entrada de microfone), instale o plugin Runtime Audio Importer.
- Se você planeja usar funcionalidade de texto-para-voz, instale o plugin Runtime Text To Speech.
Configuração Específica por Plataforma
Configuração para Android / Meta Quest
Se você está direcionando para plataformas Android ou Meta Quest e encontrar erros de compilação com este plugin, será necessário desabilitar a arquitetura Android x86_64 (x64) nas configurações do seu projeto:
- Vá para Editar > Configurações do Projeto
- Navegue até Plataformas > Android
- Em Plataformas - Android, seção Build, encontre Suportar x86_64 [também conhecido como x64] e certifique-se de que está desabilitado, como mostrado abaixo
Isso ocorre porque o plugin atualmente só suporta as arquiteturas arm64-v8a e armeabi-v7a para plataformas Android / Meta Quest.
Processo de Configuração
Passo 1: Localizar e modificar o Blueprint de animação facial
- UE 5.5 e Anteriores (ou MetaHumans Legados no UE 5.6+)
- Personagens do MetaHuman Creator UE 5.6+
Você precisa modificar um Animation Blueprint que será usado para as animações faciais do seu personagem MetaHuman. O Animation Blueprint facial padrão do MetaHuman está localizado em:
Content/MetaHumans/Common/Face/Face_AnimBP
Você tem várias opções para implementar a funcionalidade de lip sync:
- Editar Ativo Padrão (Opção Mais Simples)
- Criar Duplicata
- Usar Animation Blueprint Personalizado
Abra diretamente o Face_AnimBP
padrão e faça suas modificações. Quaisquer alterações afetarão todos os personagens MetaHuman que usam este Animation Blueprint.
Observação: Esta abordagem é conveniente, mas impactará todos os personagens que usam o Animation Blueprint padrão.
- Duplique
Face_AnimBP
e dê um nome descritivo - Localize a classe Blueprint do seu personagem (por exemplo, para o personagem "Bryan", estaria em
Content/MetaHumans/Bryan/BP_Bryan
) - Abra o Blueprint do personagem e encontre o componente Face
- Altere a propriedade Anim Class para o seu novo Animation Blueprint duplicado
Observação: Esta abordagem permite personalizar o lip sync para personagens específicos enquanto mantém outros inalterados.
Você pode implementar a mesclagem de lip sync em qualquer Animation Blueprint que tenha acesso aos ossos faciais necessários:
- Crie ou use um Animation Blueprint personalizado existente
- Certifique-se de que seu Animation Blueprint funcione com um esqueleto que contenha os mesmos ossos faciais do
Face_Archetype_Skeleton
padrão do MetaHuman (que é o esqueleto padrão usado para qualquer personagem MetaHuman)
Observação: Esta abordagem oferece máxima flexibilidade para integração com sistemas de animação personalizados.
A partir do UE 5.6, o novo sistema MetaHuman Creator foi introduzido, que cria personagens sem o ativo tradicional Face_AnimBP
. Para esses personagens, o plugin fornece um Animation Blueprint facial localizado em:
Content/LipSyncData/LipSync_Face_AnimBP
Usando o Blueprint de Animação Facial do Plugin:
- Localize a classe Blueprint do seu personagem do MetaHuman Creator
- Abra o Blueprint do personagem e encontre o componente Face
- Altere a propriedade Anim Class para o
LipSync_Face_AnimBP
do plugin - Continue com os Passos 2-4 para configurar a funcionalidade Runtime MetaHuman Lip Sync
Opções Alternativas:
- Usar Instruções Legadas: Você ainda pode seguir as instruções do UE 5.5 acima se estiver trabalhando com MetaHumans legados ou preferir o fluxo de trabalho tradicional
- Criar um Blueprint de Animação Personalizado: Crie seu próprio Animation Blueprint que funcione com a estrutura de esqueleto do MetaHuman Creator
Observação: Se você estiver usando UE 5.6+ mas trabalhando com MetaHumans legados (não criados através do MetaHuman Creator), use as instruções da aba "UE 5.5 e anteriores" em vez disso.
Importante: A mistura do Runtime MetaHuman Lip Sync pode ser implementada em qualquer asset de Animation Blueprint que tenha acesso a uma pose contendo os ossos faciais presentes no Face_Archetype_Skeleton
padrão do MetaHuman. Você não está limitado às opções acima - estas são apenas abordagens comuns de implementação.
Passo 2: Configuração do Event Graph
Abra seu Face Animation Blueprint e mude para o Event Graph
. Você precisará criar um gerador que processará dados de áudio e gerará animação de lip sync.
- Modelo Padrão (Mais Rápido)
- Modelo Realista (Qualidade Superior)
- Adicione o nó
Event Blueprint Begin Play
se ele não existir ainda - Adicione o nó
Create Runtime Viseme Generator
e conecte-o ao evento Begin Play - Salve a saída como uma variável (ex: "VisemeGenerator") para uso em outras partes do grafo
- Adicione o nó
Event Blueprint Begin Play
se ele não existir ainda - Adicione o nó
Create Realistic MetaHuman Lip Sync Generator
e conecte-o ao evento Begin Play - Salve a saída como uma variável (ex: "RealisticLipSyncGenerator") para uso em outras partes do grafo
Observação: O Modelo Realista é otimizado especificamente para personagens MetaHuman e não é compatível com tipos de personagens personalizados.
Para operação confiável e consistente com o Modelo Realista, é necessário recriar o Realistic MetaHuman Lip Sync Generator cada vez que você quiser alimentar novos dados de áudio após um período de inatividade. Isso se deve ao comportamento do ONNX runtime que pode fazer o lip sync parar de funcionar ao reutilizar geradores após períodos de silêncio.
Exemplo de cenário: Se você realizou lip sync TTS e depois parou, e mais tarde quer realizar lip sync novamente com novo áudio, crie um novo Realistic MetaHuman Lip Sync Generator em vez de reutilizar o existente.
Passo 3: Configurar o processamento de entrada de áudio
Você precisa configurar um método para processar a entrada de áudio. Há várias maneiras de fazer isso dependendo da sua fonte de áudio.
- Microfone (Tempo real)
- Microfone (Reprodução)
- Text-to-Speech (Local)
- Text-to-Speech (APIs Externas)
- De Arquivo/Buffer de Áudio
- Fonte de Áudio Personalizada
Esta abordagem realiza lip sync em tempo real enquanto fala no microfone:
- Modelo Padrão (Mais Rápido)
- Modelo Realista (Qualidade Superior)
- Crie um Capturable Sound Wave usando Runtime Audio Importer
- Antes de começar a capturar áudio, vincule ao delegate
OnPopulateAudioData
- Na função vinculada, chame
ProcessAudioData
do seu Runtime Viseme Generator - Comece a capturar áudio do microfone
O Modelo Realista usa o mesmo fluxo de processamento de áudio que o Modelo Padrão, mas com a variável RealisticLipSyncGenerator
em vez de VisemeGenerator
.
Em cada um dos exemplos mostrados para o Modelo Padrão, simplesmente substitua:
VisemeGenerator
pela sua variávelRealisticLipSyncGenerator
- Os nomes e parâmetros das funções permanecem idênticos entre ambos os modelos
Esta abordagem captura áudio de um microfone, depois o reproduz com lip sync:
- Modelo Padrão (Mais Rápido)
- Modelo Realista (Qualidade Superior)
- Crie um Capturable Sound Wave usando Runtime Audio Importer
- Comece a captura de áudio do microfone
- Antes de reproduzir o capturable sound wave, vincule ao seu delegate
OnGeneratePCMData
- Na função vinculada, chame
ProcessAudioData
do seu Runtime Viseme Generator
O Modelo Realista usa o mesmo fluxo de processamento de áudio que o Modelo Padrão, mas com a variável RealisticLipSyncGenerator
em vez de VisemeGenerator
.
Em cada um dos exemplos mostrados para o Modelo Padrão, simplesmente substitua:
VisemeGenerator
pela sua variávelRealisticLipSyncGenerator
- Os nomes e parâmetros das funções permanecem idênticos entre ambos os modelos
Observação: Se você quiser processar dados de áudio em pedaços menores para um lip sync mais responsivo, ajuste o cálculo na função SetNumSamplesPerChunk
. Por exemplo, dividir a taxa de amostragem por 150 (streaming a cada ~6.67 ms) em vez de 100 (streaming a cada 10 ms) fornecerá atualizações de lip sync mais frequentes.
- Regular
- Streaming
Esta abordagem sintetiza fala a partir de texto e realiza lip sync:
- Modelo Padrão (Mais Rápido)
- Modelo Realista (Qualidade Superior)
- Use Runtime Text To Speech para gerar fala a partir de texto
- Use Runtime Audio Importer para importar o áudio sintetizado
- Antes de reproduzir o imported sound wave, vincule ao seu delegate
OnGeneratePCMData
- Na função vinculada, chame
ProcessAudioData
do seu Runtime Viseme Generator
O TTS local fornecido pelo plugin Runtime Text To Speech não é atualmente suportado com o Modelo Realista devido a conflitos com o ONNX runtime. Para text-to-speech com o Modelo Realista, considere usar serviços TTS externos (como OpenAI ou ElevenLabs via Runtime AI Chatbot Integrator) ou use o Modelo Padrão em vez disso.
Observação: Se você quiser processar dados de áudio em pedaços menores para um lip sync mais responsivo, ajuste o cálculo na função SetNumSamplesPerChunk
. Por exemplo, dividir a taxa de amostragem por 150 (streaming a cada ~6.67 ms) em vez de 100 (streaming a cada 10 ms) fornecerá atualizações de lip sync mais frequentes.
Esta abordagem usa síntese de text-to-speech em streaming com lip sync em tempo real:
- Modelo Padrão (Mais Rápido)
- Modelo Realista (Qualidade Superior)
- Use Runtime Text To Speech para gerar fala em streaming a partir de texto
- Use Runtime Audio Importer para importar o áudio sintetizado
- Antes de reproduzir o streaming sound wave, vincule ao seu delegate
OnGeneratePCMData
- Na função vinculada, chame
ProcessAudioData
do seu Runtime Viseme Generator
O TTS local fornecido pelo plugin Runtime Text To Speech não é atualmente suportado com o Modelo Realista devido a conflitos com o ONNX runtime. Para text-to-speech com o Modelo Realista, considere usar serviços TTS externos (como OpenAI ou ElevenLabs via Runtime AI Chatbot Integrator) ou use o Modelo Padrão em vez disso.
Observação: Se você quiser processar dados de áudio em pedaços menores para um lip sync mais responsivo, ajuste o cálculo na função SetNumSamplesPerChunk
. Por exemplo, dividir a taxa de amostragem por 150 (streaming a cada ~6.67 ms) em vez de 100 (streaming a cada 10 ms) fornecerá atualizações de lip sync mais frequentes.
- Regular
- Streaming
Esta abordagem usa o plugin Runtime AI Chatbot Integrator para gerar fala sintetizada de serviços de IA (OpenAI ou ElevenLabs) e realizar lip sync:
- Modelo Padrão (Mais Rápido)
- Modelo Realista (Qualidade Superior)
- Use Runtime AI Chatbot Integrator para gerar fala a partir de texto usando APIs externas (OpenAI, ElevenLabs, etc.)
- Use Runtime Audio Importer para importar os dados de áudio sintetizados
- Antes de reproduzir o imported sound wave, vincule ao seu delegate
OnGeneratePCMData
- Na função vinculada, chame
ProcessAudioData
do seu Runtime Viseme Generator
O Modelo Realista usa o mesmo fluxo de processamento de áudio que o Modelo Padrão, mas com a variável RealisticLipSyncGenerator
em vez de VisemeGenerator
.
Em cada um dos exemplos mostrados para o Modelo Padrão, simplesmente substitua:
VisemeGenerator
pela sua variávelRealisticLipSyncGenerator
- Os nomes e parâmetros das funções permanecem idênticos entre ambos os modelos
Observação: Se você quiser processar dados de áudio em pedaços menores para um lip sync mais responsivo, ajuste o cálculo na função SetNumSamplesPerChunk
. Por exemplo, dividir a taxa de amostragem por 150 (streaming a cada ~6.67 ms) em vez de 100 (streaming a cada 10 ms) fornecerá atualizações de lip sync mais frequentes.
Esta abordagem usa o plugin Runtime AI Chatbot Integrator para gerar fala sintetizada em streaming de serviços de IA (OpenAI ou ElevenLabs) e realizar lip sync:
- Modelo Padrão (Mais Rápido)
- Modelo Realista (Qualidade Superior)
- Use Runtime AI Chatbot Integrator para conectar-se a APIs de TTS em streaming (como ElevenLabs Streaming API)
- Use Runtime Audio Importer para importar os dados de áudio sintetizados
- Antes de reproduzir o streaming sound wave, vincule ao seu delegate
OnGeneratePCMData
- Na função vinculada, chame
ProcessAudioData
do seu Runtime Viseme Generator
O Modelo Realista usa o mesmo fluxo de processamento de áudio que o Modelo Padrão, mas com a variável RealisticLipSyncGenerator
em vez de VisemeGenerator
.
Em cada um dos exemplos mostrados para o Modelo Padrão, simplesmente substitua:
VisemeGenerator
pela sua variávelRealisticLipSyncGenerator
- Os nomes e parâmetros das funções permanecem idênticos entre ambos os modelos
Observação: Se você quiser processar dados de áudio em pedaços menores para um lip sync mais responsivo, ajuste o cálculo na função SetNumSamplesPerChunk
. Por exemplo, dividir a taxa de amostragem por 150 (streaming a cada ~6.67 ms) em vez de 100 (streaming a cada 10 ms) fornecerá atualizações de lip sync mais frequentes.
Esta abordagem usa arquivos de áudio pré-gravados ou buffers de áudio para lip sync:
- Modelo Padrão (Mais Rápido)
- Modelo Realista (Qualidade Superior)
- Use Runtime Audio Importer para importar um arquivo de áudio do disco ou memória
- Antes de reproduzir o imported sound wave, vincule ao seu delegate
OnGeneratePCMData
- Na função vinculada, chame
ProcessAudioData
do seu Runtime Viseme Generator - Reproduza o imported sound wave e observe a animação de lip sync
O Modelo Realista usa o mesmo fluxo de processamento de áudio que o Modelo Padrão, mas com a variável RealisticLipSyncGenerator
em vez de VisemeGenerator
.
Em cada um dos exemplos mostrados para o Modelo Padrão, simplesmente substitua:
VisemeGenerator
pela sua variávelRealisticLipSyncGenerator
- Os nomes e parâmetros das funções permanecem idênticos entre ambos os modelos
Observação: Se você quiser processar dados de áudio em pedaços menores para um lip sync mais responsivo, ajuste o cálculo na função SetNumSamplesPerChunk
. Por exemplo, dividir a taxa de amostragem por 150 (streaming a cada ~6.67 ms) em vez de 100 (streaming a cada 10 ms) fornecerá atualizações de lip sync mais frequentes.
Para uma fonte de áudio personalizada, você precisa:
- Modelo Padrão (Mais Rápido)
- Modelo Realista (Qualidade Superior)
- Dados de áudio em formato PCM float (um array de amostras em ponto flutuante)
- A taxa de amostragem e número de canais
- Chame
ProcessAudioData
do seu Runtime Viseme Generator com esses parâmetros
Aqui está um exemplo de streaming de áudio de uma fonte personalizada:
O Modelo Realista usa o mesmo fluxo de processamento de áudio que o Modelo Padrão, mas com a variável RealisticLipSyncGenerator
em vez de VisemeGenerator
.
Em cada um dos exemplos mostrados para o Modelo Padrão, simplesmente substitua:
VisemeGenerator
pela sua variávelRealisticLipSyncGenerator
- Os nomes e parâmetros das funções permanecem idênticos entre ambos os modelos
Observação: Se você quiser processar dados de áudio em pedaços menores para um lip sync mais responsivo, ajuste o cálculo na função SetNumSamplesPerChunk
. Por exemplo, dividir a taxa de amostragem por 150 (streaming a cada ~6.67 ms) em vez de 100 (streaming a cada 10 ms) fornecerá atualizações de lip sync mais frequentes.
Passo 4: Configuração do Anim Graph
Após configurar o Event Graph, mude para o Anim Graph
para conectar o gerador à animação do personagem:
Lip Sync
- Modelo Padrão (Mais Rápido)
- Modelo Realista (Qualidade Superior)
- Localize a pose que contém a face do MetaHuman (tipicamente de
Use cached pose 'Body Pose'
) - Adicione o nó
Blend Runtime MetaHuman Lip Sync
- Conecte a pose ao
Source Pose
do nóBlend Runtime MetaHuman Lip Sync
- Conecte sua variável
RuntimeVisemeGenerator
ao pinoViseme Generator
- Conecte a saída do nó
Blend Runtime MetaHuman Lip Sync
ao pinoResult
doOutput Pose
Quando lip sync é detectado no áudio, seu personagem animará dinamicamente de acordo:
- Localize a pose que contém a face do MetaHuman (tipicamente de
Use cached pose 'Body Pose'
) - Adicione o nó
Blend Realistic MetaHuman Lip Sync
- Conecte a pose ao
Source Pose
do nóBlend Realistic MetaHuman Lip Sync
- Conecte sua variável
RealisticLipSyncGenerator
ao pinoLip Sync Generator
- Conecte a saída do nó
Blend Realistic MetaHuman Lip Sync
ao pinoResult
doOutput Pose
O Modelo Realista fornece qualidade visual aprimorada com movimentos de boca mais naturais:
Observação: O Modelo Realista é projetado exclusivamente para personagens MetaHuman e não é compatível com tipos de personagens personalizados.
Animação de Riso
Você também pode adicionar animações de riso que responderão dinamicamente ao riso detectado no áudio:
- Adicione o nó
Blend Runtime MetaHuman Laughter
- Conecte sua variável
RuntimeVisemeGenerator
ao pinoViseme Generator
- Se você já estiver usando lip sync:
- Conecte a saída do nó
Blend Runtime MetaHuman Lip Sync
aoSource Pose
do nóBlend Runtime MetaHuman Laughter
- Conecte a saída do nó
Blend Runtime MetaHuman Laughter
ao pinoResult
doOutput Pose
- Conecte a saída do nó
- Se usando apenas riso sem lip sync:
- Conecte sua pose de origem diretamente ao
Source Pose
do nóBlend Runtime MetaHuman Laughter
- Conecte a saída ao pino
Result
- Conecte sua pose de origem diretamente ao
Quando riso é detectado no áudio, seu personagem animará dinamicamente de acordo:
Combinando com Animações Corporais
Para aplicar lip sync e riso junto com animações corporais existentes sem sobrescrevê-las:
- Adicione um nó
Layered blend per bone
entre suas animações corporais e a saída final. Certifique-se queUse Attached Parent
esteja verdadeiro. - Configure a camada:
- Adicione 1 item ao array
Layer Setup
- Adicione 3 items aos
Branch Filters
para a camada, com os seguintesBone Name
s:FACIAL_C_FacialRoot
FACIAL_C_Neck2Root
FACIAL_C_Neck1Root
- Adicione 1 item ao array
- Faça as conexões:
- Animações existentes (como
BodyPose
) → entradaBase Pose
- Saída de animação facial (dos nós de lip sync e/ou riso) → entrada
Blend Poses 0
- Nó de layered blend → pose
Result
final
- Animações existentes (como
Por que isso funciona: Os branch filters isolam os ossos de animação facial, permitindo que lip sync e riso se misturem exclusivamente com movimentos faciais enquanto preservam as animações corporais originais. Isso corresponde à estrutura do rig facial do MetaHuman, garantindo integração natural.
Observação: Os recursos de lip sync e riso são projetados para funcionar de forma não destrutiva com sua configuração de animação existente. Eles afetam apenas os ossos faciais específicos necessários para movimento da boca, deixando outras animações faciais intactas. Isso significa que você pode integrá-los com segurança em qualquer ponto da sua cadeia de animação - seja antes de outras animações faciais (permitindo que essas animações sobrescrevam lip sync/riso) ou depois delas (deixando lip sync/riso se misturar sobre suas animações existentes). Essa flexibilidade permite combinar lip sync e riso com piscar de olhos, movimentos de sobrancelha, expressões emocionais e outras animações faciais sem conflitos.
Configuração
Configuração do Lip Sync
- Modelo Padrão (Mais Rápido)
- Modelo Realista (Qualidade Superior)
O nó Blend Runtime MetaHuman Lip Sync
tem opções de configuração em seu painel de propriedades:
Propriedade | Padrão | Descrição |
---|---|---|
Interpolation Speed | 25 | Controla a velocidade com que os movimentos labiais transitam entre visemas. Valores mais altos resultam em transições mais rápidas e abruptas. |
Reset Time | 0.2 | A duração em segundos após a qual o lip sync é reiniciado. Útil para evitar que o lip sync continue após o áudio ter parado. |
O nó Blend Realistic MetaHuman Lip Sync
tem opções de configuração em seu painel de propriedades:
Propriedade | Padrão | Descrição |
---|---|---|
Interpolation Speed | 30 | Controla a velocidade com que os movimentos labiais transitam entre posições. Valores mais altos resultam em transições mais rápidas e abruptas. |
Reset Time | 0.2 | A duração em segundos após a qual o lip sync é reiniciado. Útil para evitar que o lip sync continue após o áudio ter parado. |
Configuração do Riso
O nó Blend Runtime MetaHuman Laughter
tem suas próprias opções de configuração:
Propriedade | Padrão | Descrição |
---|---|---|
Interpolation Speed | 25 | Controla a velocidade com que os movimentos labiais transitam entre animações de riso. Valores mais altos resultam em transições mais rápidas e abruptas. |
Reset Time | 0.2 | A duração em segundos após a qual o riso é reiniciado. Útil para evitar que o riso continue após o áudio ter parado. |
Max Laughter Weight | 0.7 | Escala a intensidade máxima da animação de riso (0.0 - 1.0). |
Escolhendo Entre Modelos de Lip Sync
Ao decidir qual modelo de lip sync usar para seu projeto, considere estes fatores:
Consideração | Modelo Padrão | Modelo Realista |
---|---|---|
Compatibilidade de Personagens | MetaHumans e todos os tipos de personagens personalizados | Apenas MetaHumans |
Qualidade Visual | Bom lip sync com desempenho eficiente | Realismo aprimorado com movimentos de boca mais naturais |
Desempenho | Otimizado para todas as plataformas incluindo mobile/VR | Requisitos de recursos ligeiramente maiores |
Casos de Uso | Aplicações gerais, jogos, VR/AR, mobile | Experiências cinematográficas, interações próximas com personagens |
Para a maioria dos projetos, o Modelo Padrão fornece um excelente equilíbrio entre qualidade e desempenho enquanto suporta a maior variedade de tipos de personagens. O Modelo Realista é ideal quando você precisa da maior fidelidade visual especificamente para personagens MetaHuman em contextos onde a sobrecarga de desempenho é menos crítica.