Generación de un Proyecto de Animación de Habla en 3D
Introducción
Para desarrollar un proyecto donde un modelo 3D genere un discurso realista, es crucial la colaboración entre un programador web y un artista 3D. Este documento detalla los requisitos técnicos para lograr una animación de labios precisa utilizando Blend Shapes y Joins, junto con la interpretación de datos fonéticos.
Requisitos del Modelo 3D
El artista 3D debe proporcionar un modelo optimizado para animación facial, con soporte para:
- Blend Shapes (Morph Targets): Conjunto de deformaciones predefinidas que representan posiciones de la boca para distintos fonemas.
- Joins (Esqueletos y Huesos): Sistema de control de articulaciones faciales, en el cual los huesos manipulan la geometría del rostro para lograr la animación.
Comparación entre Blend Shapes y Joins
Blend Shapes (Morph Targets)
- Ventajas:
- Transiciones suaves entre expresiones faciales.
- Ideal para sincronización labial precisa basada en fonemas.
- Más fácil de integrar con herramientas de lip sync automatizadas como Rhubarb Lip Sync.
- Desventajas:
- Mayor uso de memoria si el modelo tiene muchas variaciones.
- Requiere un modelo 3D con todas las formas de la boca predefinidas.
Joins (Esqueletos Faciales)
- Ventajas:
- Mayor flexibilidad y reutilización en distintos modelos.
- Requiere menos memoria, ya que solo almacena la estructura ósea y la deformación se genera dinámicamente.
- Desventajas:
- Más difícil de sincronizar con fonemas de manera precisa.
- Puede ser más complejo de integrar en motores gráficos y necesita ajustes detallados.
Explicación de Fonemas y su Representación en JSON
Para lograr una animación labial realista, se utilizan fonemas, que son unidades mínimas de sonido en el habla. Rhubarb Lip Sync genera un archivo JSON con la sincronización de estos fonemas, mapeando su duración en el tiempo.
Ejemplo de archivo JSON:
{
"metadata": {
"soundFile": "/Users/Kev/aprendizaje/react/r3f-vite-starter/./public/audios/context.wav",
"duration": 3.84
},
"mouthCues": [
{ "start": 0.00, "end": 0.09, "value": "X" },
{ "start": 0.09, "end": 0.36, "value": "B" }
]
}
Explicación de los Campos
metadata
- soundFile: Ruta del archivo de audio analizado.
- duration: Duración del audio en segundos.
mouthCues
Lista de objetos que definen los momentos en los que se debe modificar la forma de la boca del modelo 3D.
Cada objeto contiene:
- start: Momento en segundos donde inicia el fonema.
- end: Momento en segundos donde finaliza el fonema.
- value: Letra que representa la forma de la boca asociada al fonema.
Interpretación de los Valores de value
Cada valor representa una posición específica de la boca, basada en la fonética:
- A: Boca abierta (ej. "ah")
- B: Boca cerrada (ej. "m", "b", "p")
- C: Sonidos dentales (ej. "s", "z", "ch")
- D: Sonidos labiodentales (ej. "f", "v")
- E: Boca semiabierta (ej. "e")
- F: Boca estirada (ej. "ee")
- G: Movimiento labial adicional para ciertos sonidos
- X: Boca en reposo
Implementación en Código
El siguiente código muestra cómo interpretar los valores de mouthCues
y aplicarlos en un modelo 3D con Blend Shapes en Three.js Fiber:
useFrame(() => {
const currentAudioTime = audio.currentTime;
Object.values(corresponding).forEach((value) => {
nodes.Wolf3D_Head.morphTargetInfluences[
nodes.Wolf3D_Head.morphTargetDictionary[value]
] = 0;
});
for (let i = 0; i < lipsync.mouthCues.length; i++) {
const mouthCue = lipsync.mouthCues[i];
if (
currentAudioTime >= mouthCue.start &&
currentAudioTime <= mouthCue.end
) {
nodes.Wolf3D_Head.morphTargetInfluences[
nodes.Wolf3D_Head.morphTargetDictionary[corresponding[mouthCue.value]]
] = 1;
}
}
});
Conclusión
Para un proyecto de animación de habla en 3D, se recomienda usar Blend Shapes por su precisión en la sincronización labial con fonemas. La colaboración entre el artista 3D y el programador es clave para definir y mapear correctamente las expresiones faciales del modelo en base a archivos JSON generados por herramientas como Rhubarb Lip Sync.