- Explicación de un mod creado en 2021 para mejorar el lipsync y el parpadeo en Deus Ex 1
- El desarrollador descubrió que la implementación original del lipsync no funcionaba correctamente desde el lanzamiento del juego
- Analizó que en Deus Ex también se aplica una extracción de fonemas y un mapeo de movimientos de boca similar al de Half-Life 2 de Valve
- Logró implementar animaciones naturales corrigiendo una verificación errónea de la tasa de cuadros y problemas de sincronización del blending dentro del código Unrealscript
- Para una implementación perfecta, todavía hace falta resolver el problema de la frecuencia de actualización de fonemas
Introducción y contexto
- Este mod es un proyecto para mejorar el lipsync de los diálogos y la animación de parpadeo de los personajes en Deus Ex 1
- En el juego original, el funcionamiento del lipsync y el parpadeo estaba mal implementado desde el lanzamiento
- El autor presenta un resumen del trabajo que había mostrado en su Twitter
- La descarga del mod está disponible en un enlace aparte (ModDB)
Investigación de la implementación existente del lipsync
- Durante la partida, identificó problemas en la transición de formas de la boca y fenómenos extraños en la animación del lipsync
- Referencia a una entrevista con Chris Norden (desarrollador de Deus Ex): el sistema inicial de lipsync era sofisticado, pero fue simplificado por razones de rendimiento
- Revisó hasta qué punto estaba implementado dentro de Unrealscript y si era posible modificarlo
- No hay acceso al código fuente; solo a los scripts
Cómo funciona el lipsync
- El autor ya tenía experiencia previa analizando el sistema de lipsync de Half-Life 2
- Valve usa un método que extrae los fonemas de los archivos de voz, añade la información lingüística al final del archivo
.wav, y durante la ejecución cambia la forma de la boca (viseme) según ese timing
- Este método tiene la ventaja de reducir la carga en tiempo de ejecución gracias a la extracción previa de fonemas
Problemas estructurales de Deus Ex
- En Deus Ex, la información de fonemas no parece almacenarse en ninguna parte, por lo que es posible que se extraiga en tiempo real durante la ejecución
- El análisis de Unrealscript mostró que se basa en vertex animation, no en skeletal animation, y que solo ofrece 7 formas de boca y 1 animación de parpadeo
- En el sistema de audio externo,
nextphoneme se define como A, E, F, M, O, T, U o X (estado de boca cerrada), y el script del personaje cambia la forma de la boca según eso
Bugs y mejoras realizadas
- En el código original, la lógica de detección de framerate funcionaba al revés, por lo que la forma de la boca cambiaba de inmediato incluso con tasas altas de cuadros
- La duración del blending (
tweentime) estaba configurada demasiado corta (0.1 segundos), lo que hacía perder naturalidad en la transición
- Ignoró la condición de verificación de framerate y ajustó
tweentime a una duración suficientemente larga (0.35 segundos)
- Como resultado, el lipsync se enlaza de manera mucho más fluida
Cierre de la boca y manejo del parpadeo
- También insertó lógica adicional para aplicar blending natural al cerrar la boca después de terminar una línea de diálogo
- La lógica de animación antes solo comprobaba
bIsSpeaking, pero ahora se mejoró para que la animación de lipsync funcione siempre
- También ajustó la velocidad del parpadeo para que el usuario pueda percibirlo de forma constante
Limitaciones estructurales y puntos pendientes
- La frecuencia de actualización de
nextphoneme es irregular y existe una limitación estructural porque no se actualiza en cada tick
- Como resultado, incluso aplicando bien todo el blending, no es posible lograr una experiencia de lipsync perfecta
- Si se actualizara a una frecuencia constante, podría optimizarse la velocidad del blending en función de eso, pero con la estructura actual no es posible
- También hay ineficiencias en el código, como la duplicación de la misma lógica en las clases de NPC y del personaje jugador
Código de ejemplo final de la corrección
- Al final del artículo se proporciona el código completo de la función de lipsync mejorada
- Mejoras principales: ignorar la detección de framerate, aumento considerable de
tweentime, cierre suave de la boca tras terminar el diálogo y ajuste de la frecuencia y velocidad del parpadeo
Conclusión
- Con este mod se puede experimentar una animación de lipsync y parpadeo mucho más natural y mejorada en comparación con el original
- Aunque las limitaciones estructurales dificultan un lipsync completamente perfecto, esta es la mejor solución accesible por ahora
Aún no hay comentarios.