Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Problema rotacion con IK

Iniciado por ftejada, Abril 27, 2018, 02:23:38 PM

Tema anterior - Siguiente tema
Hola gente me está ocurriendo algo muy raro... y o lo mismo estoy haciendo una autentica tonteria de la que no me estoy dando cuenta o la verdad es que no se porqué estoy teniendo estos resultados en la rotacion de una mano mediante IK.
 
 
 
Tengo este codigo:
 

OnAnimatorIK()
{
....
//leftHandBone es el hueso de la mano izq que tiene la pos y rot del clip de animación
cubeMano.rotation = leftHandBone.rotation; //cubeMano es un cubo para ver visualmente en  pantalla que datos de rotacion obtenia del hueso de la mano izq

solverLeftHandIK.rotation = leftHandBone.rotation;   //Misma rotacion para el solver que despues le pasamos al IK
               
animator.SetIKRotation(AvatarIKGoal.LeftHand, solverLeftHandIK.rotation);   //Le paso la rotacion al objetivo (Mano Izq)
}

 
Y este es el resultado:
 

 
 
 
Como se puede apreciar en la imagen, el cubo que tengo de pruebas en la mano si obtiene la rotacion correcta de la animación que tiene el hueso de dicha mano izq. Sin embargo la propia mano despues de pasarle esa misma rotación por IK es distinta.
 
¿No debería conservar la rotacion que le estoy pasando? ¿Por qué la rotación difiere si los valores que le paso por IK son los mismo que al cubo de prueba?
 
Seguro que hago algo mal o desconozco algo del tema IK, pero la verdad es que por más que he indagado no se qué puede ser.
 
 
 
Espero que alguien pueda orientarme un poco de qué está pasando, saludos.

Hola de nuevo!! hay alguien que tenga alguna idea de por qué ocurre este problema que menciono arriba, o si estoy haciendo algo mal? no entiendo que está pasando...
 
 
 
Gracias por adelantado, saludos

Hola, puede ser que el cube y la mano estén mal escaladas/orientadas, osea, que el largo del cube en realidad sea el ancho? y que estés pensando que el cube apunta hacia abajo cuando en realidad está apuntando bien? ya se suena muy tonto pero podría darse (basandomé en la info de la imagen), fijate lo que muestra en cada uno en "local" (y con la herramienta move, más visual).

Cita de: lightbug date=1525128444Hola, puede ser que el cube y la mano estén mal escaladas/orientadas, osea, que el largo del cube en realidad sea el ancho? y que estés pensando que el cube apunta hacia abajo cuando en realidad está apuntando bien? ya se suena muy tonto pero podría darse (basandomé en la info de la imagen), fijate lo que muestra en cada uno en "local" (y con la herramienta move, más visual).
   


Muchas Gracias por contestar lightbug !!
 
 
 
Bueno parece que las rotaciones, tanto del cubo de prueba, de el solver que le paso al IK y el hueso de la mano son exactamente la misma. Ya que dicha rotacion se coge del hueso de la mano, antes de que se actualice el IK. Pero en cuanto le pongo peso al IK dicho solver y el cubo de prueba, obtienen de la mano la rotacion exacta que deben tener segun la rotacion de la mano en el clip de animacion, pero en cuanto le paso esa misma rotacion que tenia la mano en el clip de animacion mediante IK, dicho hueso de la mano pasa a tener una rotacion muy extraña, mientras el cubo de prueba y el solver conservan la rotacion correcta.
 
Dejo pequeño video para que lo veais algo más claro.
 
Video
 
 
 
Saludos y gracias de nuevo.

Prueba aplicando la rotación desde LateUpdate y fíjate si pasa el mismo problema. Utiliza las propiedades locales. Ya que como muestras en el vídeo estás utilizando la rotación local.

Cita de: francoe1 date=1525132802Prueba aplicando la rotación desde LateUpdate y fíjate si pasa el mismo problema. Utiliza las propiedades locales. Ya que como muestras en el vídeo estás utilizando la rotación local.
   


Gracias por la respuesta francoe1.
 
Si. Si le paso la rotacion en el LateUpdate va perfecto pero si que se la pase por el OnAnimatorIK() con: 
 

solverLeftHandIK.rotation = leftHandBone.rotation;   //Misma rotacion para el solver que despues le pasamos al IK
               
animator.SetIKRotation(AvatarIKGoal.LeftHand, solverLeftHandIK.rotation);   

 
Es decir que para que vaya bien tengo que hacer todo el tema de las rotaciones de los huesos en el LateUpdate, porque en el momento en el que lo hago en el OnAnimatorIK() ya empieza a fallar....
 
No se... es muy extraño la verdad, al menos para mi.
 
Voy a seguir haciendo pruebas a ver que más voy sacando en claro
 
 
 
Gracias y un saludo
 
 

Etiquetas: