- Explicação sobre um mod criado em 2021 para melhorar a sincronização labial e o piscar de olhos em Deus Ex 1
- O desenvolvedor descobriu que a implementação original de sincronização labial não funcionava corretamente desde o lançamento do jogo
- Foi analisado que um método semelhante ao de Half-Life 2, da Valve, de extração de fonemas e mapeamento de formatos de boca também é aplicado em Deus Ex
- Ao corrigir uma verificação incorreta de taxa de quadros e problemas de timing de blending no código Unrealscript, foi possível obter animações mais naturais
- Para uma implementação perfeita, ainda é necessário resolver o problema da frequência de atualização dos fonemas
Introdução e contexto
- Este mod é um projeto para melhorar a sincronização labial das falas dos personagens e as animações de piscar de olhos em Deus Ex 1
- No jogo original, a sincronização labial e o piscar de olhos já eram implementados de forma anormal desde o lançamento
- O autor reúne e apresenta o conteúdo do trabalho que havia sido mostrado no seu Twitter
- O download do mod é oferecido em um link separado (ModDB)
Investigação da implementação original de sincronização labial
- Durante o jogo, foram identificados problemas na transição dos formatos de boca da sincronização labial e fenômenos estranhos de animação
- Referência à entrevista de Chris Norden (desenvolvedor de Deus Ex): o sistema inicial de sincronização labial era sofisticado, mas foi simplificado por motivos de desempenho
- Foi analisado até que ponto isso havia sido implementado na parte de Unrealscript e se seria possível corrigir
- O código-fonte não está disponível; apenas os scripts podem ser acessados
Como a sincronização labial funciona
- O autor já tinha experiência anterior analisando o sistema de sincronização labial de Half-Life 2
- A Valve usa um método em que fonemas de arquivos de voz são extraídos, as informações linguísticas são anexadas ao final do arquivo
.wav e, em tempo de execução, os formatos de boca (visemes) são trocados de acordo com esse timing
- Esse método tem a vantagem de reduzir a carga durante a execução por meio da extração prévia dos fonemas
Problemas estruturais de Deus Ex
- Em Deus Ex, as informações de fonema aparentemente não são armazenadas em lugar nenhum, então é possível que a extração aconteça em tempo real durante a execução
- A análise de Unrealscript mostrou que o sistema é baseado em vertex animation, e não em skeletal animation, oferecendo apenas 7 formatos de boca e 1 animação de piscar de olhos
- No sistema de áudio externo,
nextphoneme é definido como A, E, F, M, O, T, U ou X (estado de boca fechada), e o script do personagem troca o formato da boca com base nisso
Bugs e melhorias
- No código original, a lógica de detecção de taxa de quadros funciona ao contrário, fazendo com que o formato da boca seja trocado imediatamente mesmo em altas taxas de quadros
- A duração do blending (
tweentime) estava configurada curta demais (0,1 segundo), o que eliminava a sensação de transição natural
- A condição de verificação de taxa de quadros foi ignorada, e o
tweentime foi ajustado para um valor suficientemente longo (0,35 segundo)
- Como resultado, a sincronização labial passou a se conectar de forma suave
Fechamento da boca e tratamento do piscar de olhos
- Também foi inserida lógica adicional para aplicar blending natural ao fechar a boca depois que a fala termina
- A lógica de animação antes verificava apenas
bIsSpeaking, mas foi melhorada para que a animação de sincronização labial esteja sempre ativa
- A velocidade do piscar de olhos também foi ajustada para que continue perceptível ao usuário
Limitações estruturais e pontos frustrantes
- A própria frequência de atualização de
nextphoneme é irregular, e existe uma limitação estrutural por não ser atualizada a cada tick
- Como resultado, mesmo aplicando corretamente todo o blending, não é possível obter uma experiência de sincronização labial perfeita
- Se a atualização ocorresse em frequência constante, seria possível otimizar a velocidade de blending de acordo com isso, mas na estrutura atual isso não é viável
- Também há ineficiências no código, como a duplicação da mesma lógica nas classes de NPC e do personagem do jogador
Exemplo final de código corrigido
- Na parte final do texto, é fornecido o código completo da função de sincronização labial melhorada
- Principais melhorias: ignorar a detecção de taxa de quadros, grande aumento de
tweentime, fechamento suave da boca após o fim da fala e ajustes na frequência e velocidade do piscar de olhos
Conclusão
- Com este mod, é possível experimentar animações de sincronização labial e piscar de olhos muito mais naturais e melhoradas em relação ao original
- Embora uma sincronização labial perfeita seja difícil devido às limitações estruturais, esta é a melhor solução acessível no momento
Ainda não há comentários.