Animación facial utilizando texturas con Blender
Hola a todos.
Llevo un par de días rompiéndome la cabeza. Estoy desarrollando una aplicación para móviles y he creado unos personajes muy sencillos que maneje el usuario.
El caso es que me gustaría incorporarles alguna animación facial sólo empleando texturas, como si se trataran de dibujos animados.
Me gustaría saber si hay por aquí algún genio de Blender que se haya topado con el mismo problema: cambiar de una textura a otra durante animación, por ejemplo, que te golpeen y el personaje pase de una textura de contento a otra de triste utilizando UV maps.
Ejemplos que se me ocurren de juegos son MySims o DragonQuest, y visuales como Pocoyo (cuando cambia de expresión facial).
Sería el equivalente a esto (es una imagen encontrada por internet) http://faucgutier8.files.wordpress.com/2012/07/faces.png
He estado mirando varios tutoriales, pero no encuentro una solución sencilla.
¿Alguien puede ayudarme? Manejo bastante Blender. El modelo/personaje es una única mesh con un uv map separado por partes con seams. La parte que quiero cambiar es el que corresponde al seam de la cara.
Gracias y un saludo
Usuario desconocido
Hola elchicodelaperilla
Se me ocurre que el método más sencillo que puedes seguir es el de crearte una textura para cada expresión y después animarlas por keyframes, es decir, sonrisa en el frame 1 opacidad 100% todas las demás expresiones al 0%, enfado frame 2 opacidad 100%... etc, después a la hora de animarlo para un videojuego supongo que tendrás que introducir un código para que, dada determinada acción, se vaya a un determinado frame de la animación facial, he de reconocer que no lo he mirado con demasiado esmero pero, es muy probable que puedas usar un rig facial standard para dicha animación, es decir, mueves un controlador y pasas de una expresión a otra, a más controladores más zonas de la cada animables. Una tercera opción sería hacerte una textura con, por ejemplo, todas las expresiones de los ojos, otra con las bocas y otra con los "extras", asignas las uvs de los ojos a la textura correspondiente y sólo tienes que animar la uv de frame a frame, de esta forma podrás combinar los elementos faciales y no tendrás que hacerte una textura para cada una de las combinaciones (que pueden ser una cantidad considerable).
Suerte con tu proyecto.
DGordillo
No lo he intentado, pero si que me he preguntado cómo hacerlo (viendo a Pocoyó, de hecho). Ahora tengo un problema parecido con una maqueta que estoy haciendo en el BGE para que un botón cambie de color/textura al pincharlo. Como en Blender TODO es animable, la sugerencia de Stupendoman sería probablemente correcta.
Un saludo.
Elchicodelaperilla
Muchas gracias a los dos por vuestras respuestas!
Sí, sin duda, creo que cualquiera de las soluciones de Stupendoman son buenas. La tercera creo que a largo plazo será la más sencilla y la más agil para el proyecto. De nuevo gracias. Voy a ponerme a ello y si todo sale bien colgaré un par de imágenes.
Raimon
Igual diré una tontería y no he comprendido lo que planteas, pero eso no se podría resolver con una textura animada? Es decir, una secuencia de imágenes o una movie que contenga los estados por los que quieres que pase el rostro. Luego, si es para juegos, (casi) seguro que existe una forma de controlar qué frames o qué rango de frames quieres que se reproduzca.
Saludos,
Raimon
Usuario desconocido
Raimon, tu opción también es buena, es más o menos como la primera que he planteado, el problema sería el mismo, la combinatoria, es decir, tendrías que hacer una imagen para la opción (ejemplo) guiñando un ojo, sacando la lengua con una gota de sudor en la cara (estilo anime), ojos abiertos boca cerrada, ojos entornados boca fonema "F"... y un larguísimo etcétera, por eso creo que es más práctico separar los elementos y animar las uvs (es decir, que el islote de, por ejemplo, el ojo se vaya moviendo por la textura correspondiente, a mi parecer es más práctico y, echándole un poco más de tiempo te puedes currar un rig bastante funcional.
Un saludo.
Raimon
Ok, creo que veo por donde vas, pero nunca he animado UVs y no me hago una imagen muy clara de cómo se resolvería. Saludos,
Raimon
Usuario desconocido
Acabo de pensar que una forma más sencilla que animar el islote de la uv sería con el offset de la textura, de esa manera sólo desplazas la textura debajo de la uv, si trabajas con una retícula exacta, pongamos 4x4 podrás mover la textura con exactitud (0,25) para ajustarla siempre a su islote correspondiente, así dejarías la uv fija, y, si me apuras podrías usar un project modifier y asociarlo al rig para modificar la textura, como idea, después, como siempre, es cuestión de programación para que funcione bien en el juego.
Un saludo.
DGordillo
como cuando usas una misma imagen que contiene todos los estados de un botón en CSS, lo único que haces es mover las coordenadas X-Y de la textura y das el pego! genial!
Usuario desconocido
Efectivamente DGordillo, ese sería el concepto ;)
Elchicodelaperilla
Entonces una vez creado, ¿basta con crear keyframes en la animación desplazando la textura? Tipo: Frame 1 -textura uv encajada en la cara triste. Frame 2- textura uv encajada en la cara alegre.
Gracias monstruos!
Elchicodelaperilla
Me parece que ya funciona el tema ;) He utilizado la última idea que comentabas Stupendoman, la de utilizar el offset de la textura y jugar con el uv por encima. Después es cuestión de utilizar la opción de AnimAll (activándola en user preferences) y crear los keyframes.
Con todo voy a estar echándole un par de probatinas antes de suspirar tranquilo...
Elchicodelaperilla
Ahora en principio sólo falta buscar una solución para exportarlo como elemento de juego para Unity porque la textura no se cambia... Gracias a todos ;)