Duda sobre animacion para girar personajes

kanc

Buenas,

Tengo una duda que seguro que tienen que tener una solución supersencilla pero no lo acabo de encontrar, a ver si me echáis un cable.

Tenemos un personaje en 3D que tiene una animación de girarse 180 grados (sin root motion, que entonces ya lo tenemos resuelto :P). Queremos lanzar la animación y que cuando ésta termine, nuestro personaje esté girado 180 grados, sin que se note nada extraño, obviamente.

Si giramos al personaje a la vez que la animación esta girando, efectivamente al final el personaje esta girado 180 grados, pero la animación ha quedado como el culo ya que tenemos dos fuentes de giro visualmente hablando, la de la animación y la del propio personaje. Meeeck! descartada.

Si justo en el momento en el que la animación termina, giramos de una vez los 180 grados al personaje, la animación se ha visto bien, el personaje está girado, pero durante un instante se ha visto al truco: al terminar la animación la malla ha vuelto a la posición inicial y luego se ha girado. Meeeck tampoco vale.

Solo queda usar root motion?? tiene que haber una solución muy obvia que se me escapa y no vale descartar la animación y simplemente girar el personaje jejejeje

Ciao!!

PD. si me explico como el culo y nadie entiendo lo que intento explicar puedo poner unos gifs o algo...

B

Si, te explicas como un libro cerrado :D.

Según puedo entender, en el mismo personaje confluyen dos animaciones al mismo tiempo y que ambas animaciones puedan ser un giro de 180º, correcto?

Una cosa que llego a entender es que el personaje está haciendo una animación de giro, que no es la de 180º. Al finalizar vuelve a su posición original y luego, si hace la de 180º. Es así?

Supongo que una forma viable es mezclar las animaciones y cortar la primera en el punto que enlace con la segunda animación sin permitir que la primera termine de completarse, para evitar que vuelva a su posición original y ejecute la de 180º.

kanc

Sabia que me explicaba de pm xDD

imagínate que el personaje esta parado, con un animación de idle y el jugador mueve el stick en la dirección opuesta a la que esta mirando el personaje. El resultado de la petición del jugador debe ser que el personaje mire justo en la direccion opuesta ¿no? un giro de 180 grados.

Puedo girar al personaje sobre si mismo y listo, pero soy muy pijotero y quiero que se haga mediante una animación en la que de verdad se vea que el personaje se gire. En los videojuegos es común girar un personaje y no pasa nada, pero en la vida real nosotros no lo hacemos asi.

Ahora en un ratillo pongo unos gifs o videos para explicarme.

gracias yukikaze!

EDIT: Aqui esta el ejemplo, a ver si se me entiende mejor...

zerhos

Yo te entiendo perfectamente xq me ha pasado lo mismo con las animaciones en unreal, como medida cautelar utilizamos el root motion en las animaciones que tb giran la malla, con los problemas visuales que ello conlleva.

kanc

En los foros de Unreal (aunque es un problema general, no tiene que ver específicamente con el motor) tampoco me han dado una solución, así que doy por hecho que la única forma de hacerlo es usar root motion.

Y ojo, no tengo nada en contra de eso, entiendo que en un equipo completo, le dices al artista que implemente las transformaciones al root y listo. Pero pa mi que estoy solo y tengo que trabajar con lo que voy encontrando por internet, pues es una jodienda jejejeje.

Al final acabare aprendiendo a modelar y animar xD

saludos

B

Escribí un post y veo que se lo llevó la lluvia :(.

Si estás usando Unity, al menos deberías echarle un ojo a los Blend Trees para realizar animaciones dependiendo de como y cuando se hacen las transiciones de estas.

kanc

Yukikaze, no estoy usando Unity3d pero el problema es independiente del motor y no es algo (en mi humilde opinión y escasez de conocimiento) que se pueda arreglar con los blendtrees.

De nuevo, gracias por tus consejos!

B

Ya, es el problema de querer hacer las animaciones lo más reales posibles.

Para animaciones como correr hacia adelante y darse la vuelta, lo usual es crear una transición que sea el frenado para resetear el esqueleto y prepararlo para la siguiente animación, ya sea girar 180º, dar un paso a los lados o saltar en horizontal/vertical.

La cuestión es ver si el tiempo invertido en arreglar eso y perfeccionarlo, va a suponer que la duración del proyecto se alargue y se haga infinito :(.

Yo estuve con el modelado 3D y el clothing y hubo días que estaba para tirar el pc por la ventana. Luego me dije que es mejor centrarse en otros aspectos y luego pulir detalles.

FernandoA

No se exactamente como rotas el personaje cuando la animación termina, pero si ejecutas la rotación dentro de la propia animación puede que consigas ajustar mejor la transición (y que no vuelva a la posición idle por defecto antes de rotar. Aquí tienes un tutorial de como ejecutar eventos dentro de las propias animaciones. Está enfocado para reproducir sonido justo en el momento de pisar, pero puedes adaptarlo para que al terminar esa animación (en los últimos o el último frame) rote al personaje 180º.

Aun así que quede perfecto ya es complicado, desconozco si unity crea la transición entre animaciones de modo que funcione haciendo rotaciones manuales de este modo, francamente lo dudo. ¿Por que no usas el root motion directamente?, ¿hay algo concreto que no te vaya bien?

1 respuesta
zerhos

Creo que no entendéis exactamente el problema que tiene, voy a intentar explicarlo a ver si el problema realmente es este ( que yo creo que sí, porque he tenido este problema desde que empecé con esto hace ya más 1 año).

Él dispone de una animación descargada imagino de una librería pública en la que se rota al personaje, esta animación empieza con la malla del personaje mirando hacia delante y termina mirando hacia atrás, habiendo un salto muy feo entre el final y el principio de la animación si esta se loopease.

Esto se "arregla" activando una opción que se llama "root motion", lo que hace esta función es anclar el hueso "root" (raíz) para que no se mueva ni rote, y todos los huesos se muevan en consonancia a este hueso "root" o raíz, con la consecuencia de que la animación sea algo diferente a la original y quede un poco ortopédica.

La única solución buena hasta ahora que al menos yo he encontrado, es meter la animación en algún software como 3Dmax y cambiarla para que no rote animación y hacer la rotación del personaje por programación.

kanc

Efectivamente es como dice zerhos.

Cuando tenemos una animación de andar, si la tenemos "in place", es decir el personaje mueve los pies sin desplazarse, nosotros tenemos que interpolar la posición en el tiempo para que el personaje se desplace y en ocasiones vemos juegos en los que la animación va muy rápida para el desplazamiento o viceversa.

Si esa animación tuviera root motion, nosotros no modificamos la posición del personaje, lo hace el propio motor cogiendo el movimiento del hueso raiz o root. Esto serviría, en el caso de andar, para que el personaje se desplace sincronizadamente con los pasos de la animación, por ejemplo. Aunque este no es un caso típico de uso de root motion.

Imaginaros por ejemplo la animación un tio corriendo que se tropieza, da un par de bandazos y cae al suelo. Si tenemos que simular mediante programación el movimiento del personaje, puede ser un infierno total, pero si esta implementado el root motion, el personaje se desplazara con la animación sincronizadamente. ¿Si no lo tiene que pasara? Efectivamente la maya se desplaza de forma muy bonita, pero el personaje, y hablo del personaje lógico, el nodo de posición en la escena y collider, se queda en su sitio y al terminar la animación, obviamente la maya vuelve a su lugar y queda horrible.

Aqui un par de videos de una animacion con y sin root motion, aunque es un caso sencillo de simular con programación, porque es un movimiento hacia adelante.

sin root

¿Veis lo que pasa al terminar la animación?

aqui con root

Pues en el caso de rotar es parecido, al terminar la animación de rotar el personaje vuelve a su posición.

Deciros que he conseguido resolver mi caso de la rotación, abriendo la animación en maya y medio copiando los keyframes del hueso de la cadera al root, pero la cosa era saber si a alguién se le ocurría una idea para hacerlo sin usar root motion.

A ver si hago un par de videos para mi caso en concreto y lo veis.

saludos

kanc

#9 FernandoA, la única razón por la que intentaba no usar root motion es porque dado que soy programador y no tengo un artista que me de las animaciones voy tirando de "lo gratis" jejeje.

En mi caso de mixamo y desde que los compró Adobe, dejaron de dar soporte al exportador de Unreal Engine, y la rotación del root no la exporta bien. Parece que la traslación si, aunque depende de la animación. Hay veces, como dice zerhos en los que animación se descuajaringa y queda rarísima.

saludos

B

Con la explicación de Zerhos y los dos vídeos ya lo he visto claro.
Desafortunadamente mis conocimientos a tal escala de animación no llega para arreglar esos problemas :/

Como comenté en un post anterior es si merece la pena el esfuerzo de realizar tal tarea

Usuarios habituales