Noticias

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

Rotacion de objetos respecto a otros

Iniciado por ftejada, Junio 04, 2018, 08:49:10 PM

Tema anterior - Siguiente tema
Junio 12, 2018, 09:30:10 PM #15 Ultima modificación: Junio 12, 2018, 09:30:50 PM por Igor
creo recordar para rotar estilo pitch yaw roll hay que rotar primero el Z, luego el Y, y por ultimo el X... o algo asi lo tenia en un proyecto de "naves" que tenia por ahi...
 
pero sigo sin entender muy bien lo que quieres hacer...

Contesto a @Igor que creo que es mas rapido. Lo que quiero hacer es un sistema IK sin utilizar el de Unity ya que este no maneja algunos huesos de los characters como por ejemplo la spine. Ni tampoco tiene en cuenta que a la pelvis y/o spine sean influenciados por los movimientos de las manos... Por poner un ejemplo.
 
En este post ya estuvimos hablando de a lo que me refiero francoe, tú y yo:
 
Post UnitySpain
 
Respecto a lo de @hammer voy por partes para no liarme:
 
1/ Que es un " 6dof "? no lo habia escuchado nunca.
 
2/ Con el codigo de ejemplo se arregla el bloqueo de Gimbal entre los ejes Y y Z cuando ponemos X en 90. Pero sigue produciendose el bloqueo entre X e Y cuando ponemos X en 90/-90 y Z en 90/-90. Y poniendo otro padre más y que cada padre lleve solo la rotacion de un eje concreto, empeora la situación.
 
Saludos
 
 
 
 

Junio 13, 2018, 03:54:59 PM #17 Ultima modificación: Junio 13, 2018, 03:55:39 PM por Igor
6dof = 6 degres of fredoom...
 
seis grados de livertad.... 
 
se refiere a poder moverse en cualquier direccion (adelante, atras, izquierda, derecha, arriba y abajo) pero pudiendo rotar en rodos los ejes al estilo pitch yaw roll....
 
si envez de poder girar en esos ejes solo puede girar (el personaje) en el eje "y" ...o como mucho tambien el el "x"... como habitialmente pasa en todos los juegos que no son de "naves"... eso seria un 3dof...
 
ahora ya me entero mas de que va el tema... es un poco lio rotar los huesos manualmente ya que cada hueso tiene el "pivot" orientado de una manera... pero se puede... aunque no sin quebraderos de cabeza
 
 
 
por ejemplo se me ocurre comprobar que mano esta mas lejos de la cadera... y girar la cadera y spines en consecuencia... si la mano mas lejana es la derecha pues gira cada espine un poco (en proporcion a la distancia a la que este la mano...)  ...la distancia a la cadera pero sin tener en cuenta el eje "y" claro.... no queremos que al levantar la mano gire el cuerpo... o bueno igual si... puedes hacer que levante o baje el hombro dependiendo de la altura... y incluso si es muy baja pies doblarle la espalda y las piernas... (para que se agache)...
 
too tendria que ser con "Rotate" y hacerlo en "LateUpdate"

Junio 13, 2018, 09:16:59 PM #18 Ultima modificación: Junio 13, 2018, 10:45:48 PM por hammer
Buenas.Eso, 6 grados de libertad, osea poder rotar en todos los ejes,como dice Igor, normalmente los juegos rotan en 1 angulo,una camara en 3persona o un avion son 2, 3 es muy raro de ver, kerbal space ,el antiguo Descent,elite dangerous me vienen a la cabeza.No se como lo haran,aunque nunca se rota los 3 a la vez,asy que pueden adaptarse y cambiar el orden de rotacion de los ejes.Si fuera posible los animadores no tendrian dolores de cabeza con el gimbal,seguirian con sus xyz tan felices.
 
Si estas implementando tu propio ik, lo que buscas se llama ful lbody ik, no tiene mucho que ver con lo de rotar,eso tendria que calcularlo el solver del sistema segun lo configures en el momento.
 
Te lo habia puesto pensando que solo querias controlar un poco la rotacion para ajustarla,como el  personaje tampoco va a tener rotaciones tan exageradas en esos hueos,por ejemplo, en X hacia adelante a un puede llegar a 90 para atras mucho menos,en y la parte de los hombros si que puede llegar a los 80º la parte inferior muchisimo menos,en z lo que se puede rotar es minimo, no llegara a 45º la parte de arriba.Y estos limites siendo la suma de todos los huesos hasta el ultimo, no solo de uno.Por eso pense que alomejor te servia. Pero lo que quieres no tiene nada que ver.
 
He encontrado un par de links con codigo fuente de sistemas fbik,ue4 y unity
 
https://github.com/hacoo/rtik
 
https://github.com/Stereoarts/SAFullBodyIK
 
 
 
Aunque no tiene nada que ver con lo que buscas,alomejor a alguien le sirve.
 

constrained.rotation =  Quaternion.Euler( bendZ * constrained.forward ) * Quaternion.LookRotation(boss.position - boss.parent.position);

 
el boss,el cubo, tiene que estar en la misma posicion que su padre y adelantado en z 1 unidad. osea 0,0,1
 
Si movemos verticalmente el cubo rotara en x, si lo movemos horizontalmente rotara en y, z se rota con una variable independiente(podemos ponerle la z euler local del cubo).No hay que mover en z el cubo.
 
Da un poco de juego a la hora de controlar la animacion del personaje pero no tiene nada que ver con un sistema fullbodyik

Cita de: Igor date=1528898099por ejemplo se me ocurre comprobar que mano esta mas lejos de la cadera... y girar la cadera y spines en consecuencia... si la mano mas lejana es la derecha pues gira cada espine un poco (en proporcion a la distancia a la que este la mano...)  ...la distancia a la cadera pero sin tener en cuenta el eje "y" claro.... no queremos que al levantar la mano gire el cuerpo... o bueno igual si... puedes hacer que levante o baje el hombro dependiendo de la altura... y incluso si es muy baja pies doblarle la espalda y las piernas... (para que se agache)...
   
   
      too tendria que ser con "Rotate" y hacerlo en "LateUpdate"
   


Gracias por la respuesta @Igor. Si, esto es más o menos lo que quiero hacer teniendo en cuenta un minimo impacto sobre la animación que se está ejecutando en ese momento. 
 
La verdad es que se me está haciendo muy cuesta arriba esto y no veo una manera clara de poder hacerlo dada mi total ignorancia en como programar un sistema IK desde cero... Supongo que irá con trigonometria fundamentalmente, aunque hay cosas como las que has dicho, de si bajamos mucho las manos que la pelvis baje y las piernas se doblen, que no se si se harán del mismo modo.
 
He estado buscando por internet tutoriales que expliquen como hacer un sistema IK desde cero sin utilizar el OnAnimatorIK de Unity pero encuentro muy poco material. He encontrado alguno, pero tienen muchas lagunas y parece que dan muchas cosas por sentadas sin que las hayan explicado... y termino por perderme... como por ejemplo este: Tutorial_IK
 
 
 
Gracias @hammer por el aporte. He estado mirando el codigo de uno de ellos, nunca he sido bueno para comprender codigo ajeno y puffff... es inmenso con muchos scripts y no soy capaz de encontrar la información, de como se calcula todo los "calculos" del IK, que necesito y aprender como se hace. Soy torpe para muchas cosas y esta es una de ellas.
 
Voy a seguir intentandolo a ver si puedo sacar algo en claro pero desde luego cualquier ejemplo de codigo, tutorial o explicación sería muy agradecido. Porque ahora mismo no se por donde tirar.
 
 
 
Saludos y muchas gracias de nuevo por la ayuda

Etiquetas: