Como usar o plugin
Este guia orienta você através do processo de configuração do Runtime MetaHuman Lip Sync para seus personagens MetaHuman.
Observação: O Runtime MetaHuman Lip Sync funciona com MetaHumans e 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á ativado em seu projeto
- 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 fala, 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 desativar 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, localize Suportar x86_64 [também conhecido como x64] e certifique-se de que está desativado, conforme mostrado abaixo
Isso ocorre porque o plugin atualmente suporta apenas as arquiteturas arm64-v8a e armeabi-v7a para plataformas Android / Meta Quest.
Processo de configuração
Passo 1: Localize e modifique o Blueprint de animação facial
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 Asset Padrão (Opção Mais Simples)
- Criar Duplicata
- Usar Animation Blueprint Customizado
Abra o Face_AnimBP
padrão diretamente e faça suas modificações. Qualquer alteração afetará 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 (ex: 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 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 mistura de lip sync em qualquer Animation Blueprint que tenha acesso aos ossos faciais necessários:
- Crie ou use um Animation Blueprint customizado existente
- Certifique-se que seu Animation Blueprint funciona com um esqueleto que contém 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 customizados.
Importante: A mistura do Runtime MetaHuman Lip Sync pode ser implementada em qualquer asset 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 Runtime Viseme Generator que processará dados de áudio e gerará visemas.
- Adicione o nó
Event Blueprint Begin Play
se ele não existir - 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
Passo 3: Configurar 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 Customizada
Esta abordagem executa lip sync em tempo real enquanto fala no microfone:
- 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
Esta abordagem captura áudio de um microfone, depois reproduz com lip sync:
- 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
Observação: Se 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 executa lip sync:
- 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 sound wave importado, vincule ao seu delegate
OnGeneratePCMData
- Na função vinculada, chame
ProcessAudioData
do seu Runtime Viseme Generator
Observação: Se 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:
- 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 sound wave em streaming, vincule ao seu delegate
OnGeneratePCMData
- Na função vinculada, chame
ProcessAudioData
do seu Runtime Viseme Generator
Observação: Se 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 e executar lip sync:
- 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 sound wave importado, vincule ao seu delegate
OnGeneratePCMData
- Na função vinculada, chame
ProcessAudioData
do seu Runtime Viseme Generator
Observação: Se 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 em streaming sintetizada de serviços de IA e executar lip sync:
- Use Runtime AI Chatbot Integrator para conectar 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 sound wave em streaming, vincule ao seu delegate
OnGeneratePCMData
- Na função vinculada, chame
ProcessAudioData
do seu Runtime Viseme Generator
Observação: Se 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:
- Use Runtime Audio Importer para importar um arquivo de áudio do disco ou memória
- Antes de reproduzir o sound wave importado, vincule ao seu delegate
OnGeneratePCMData
- Na função vinculada, chame
ProcessAudioData
do seu Runtime Viseme Generator - Reproduza o sound wave importado e observe a animação de lip sync
Observação: Se 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 customizada, você precisa:
- 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 estes parâmetros
Aqui está um exemplo de streaming de áudio de uma fonte customizada:
Observação: Se 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 viseme generator à animação do personagem:
Lip Sync
- Localize a pose que contém o rosto 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:
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 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 fonte diretamente ao
Source Pose
do nóBlend Runtime MetaHuman Laughter
- Conecte a saída ao pino
Result
- Conecte sua pose fonte 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