Blender: Pelota rodando en un eje (ya quisiera que fueran dos)

DESCARGA EL BLEND

Si esto se titula “Pelota rodando en un eje” es porque he sido incapaz de encontrar la solución para que la pelota ruede en más de uno…

Lo que yo me proponía era un setup para una pelota que me permitiera echarla a rodar. La idea fundamental era crear una restricción para que al desplazar un objeto en X la pelota rodara sobre su eje Y de una manera convincente (léase, sin patinar). No me resultó difícil llegar a este setup usando estos dos objetos: pelota y control.
Sitúo control desplazado en Z respecto a pelota

Y ahora a pelota le aplico la restricción evidente de Copiar Posición con Objetivo:control y activando sólo el eje X

Luego llegó el momento de las pruebas y tras unos intentos todo salió bien al aplicar una restricción de tipo Tranformación con Objetivo:control y estos parámetros

  • Activamos Extrapolar para que la rotación se pueda repetir periódicamente y no solo una vuelta
  • Origen: Loc. Esto está claro porque lo que quiero es que lo que origine la rotación de pelota sea un desplazamiento de control
  • X. Min: 6.283. Esto es posible si estamos trabajando con la esfera que sale a escena por defecto ya que tiene 2 unidades Blender de diámetro.  6.283 será 2·p·r (p es 3.14159)
  • Mapeo de origen a destino. Hay que cambiar Y a X con lo que queda X>>Y.
  • Destino: Rot. Evidente
  • Y. Max: -360. Ese es el valor de los grados que gira la rueda mientras se desplaza 6.283 unidades Blender. Como el valor de X en Loc es positivo, el ángulo debe ser negativo.

Hasta aquí todo bien. Desplazo control a lo largo de X y pelota se comporta perfectamente. Pero de momento no he sido capaz de hacer que responda correctamente al desplazar en Y y, sobre todo, que ruede con coherencia al desplazar de una manera oblícua entre X e Y.
Se admiten sugerencias 🙂

    • Xirín
    • 12 de enero de 2012

    No me ha quedado claro dondo colocas «control». Físicamente el centro instantáneo de rotación está en el punto de contacto entre la pelota y el plano. Quizás sea una tontería, pero si colocas «control» en ese punto y lo haces desplazarse la rotación de la pelota en X e Y (con respeto a ese punto) debería ser proporcional a las coordenadas de la posición de «control».

    Me gusta mucho tu blog aúnque nunca escribo comentarios!

    Saludos
    Xirín

  1. No entiendo muy bien a que te refieres, por lo que la solución a lo mejor no tiene nada que ver con lo que te comento.
    Creo que lo que pretendes se puede conseguir en blender usando en el apartado OBJECT la transformación normal para un giro y la delta transformer (relativa) para el otro, animando cada una según tus necesidades. Es lo que se usaría para una rueda delantera de un vehículo que aparte de girar sobre su eje «Y» visto desde 1 en blender (se entiende esto de la vista) también precisa girar desde «Z» para los giros del vehículo.
    Para los giros exactos sin patinar hay una manera de hacerlo que es perfecta, creas un plano cuadrado que pueda contener exactamente la esfera, como el famoso dibujo de Leonardo, de hecho el truco es suyo, desplazas el plano con el centro en el vertice, que tienes que cambiar cada 90º lo que necesites que recorra la rueda o esfera, miras la distancia que se a desplazado y los grados de giro que has necesitado, es como si en la realidad movieras un bloque cuadrado haciéndolo rodar, aplicas estos valores a la esfera y esta rodara perfectamente, es pura matemática. Incluso si lo haces con este modo y vas aplicando keyss con aceleraciones e deceleraciones el movimiento de la rueda o esfera respecto al suelo es perfecto.
    Al no entender muy bien la cuestión a lo mejor lo que te cito no tiene nada que ver con o que necesitas. Por lo que disculpa por el mal entendido por mi parte.
    Por tora parte estaría bien poder enviarte algún ejemplo de lo que te cito par auna mejor y sencilla comprensión.

  2. Una aclaración sobre lo de los giros, es que a veces mezclo conceptos de otros programas, en blender lo correcto es no mover el centro del plano (este deberá estar en el centro del mismo) e ir girando este colocando el cursor en el extremo necesario.
    Me explico, lo primero es colocar el plano exactamente donde la esfera o rueda, lo segundo es poner los valores de rotación y traslación a cero con «ctrl+A» ahora sin mover el centro del plano entramos en el modo edición «Tab» seleccionamos el vértice que se precise y colocamos ahí el cursor, salimos del modo edición al modo objeto «Tab» y le decimos a blender que gire el objeto usando como pivote el cursor, cada 90º hay que repetir la operación, con saber el desplazamiento que necesitas para una vuelta 360º, es una mera regla de tres, por ejemplo si con 90º se desplaza 2 unidades de rejilla, los denominaremos 2mts, pues para recorrer 8mts necesitamos 90×4=360, o sea una vuelta 360º = 8mts, que tiene que desplazase 20mts entonces 20/8=2,5 vueltas que traducido en grados son 360*2.5 o sea 900º… por cierto parezco que hablo de matemáticas, pero los giros de ruedas con esta técnica de «da Vinci» quedan perfectos.
    Saludos y gracias por todo lo que aportas.

  3. Muchas gracias a los dos. Sigo probando…
    He añadido el .blend al post por si alguien quiere revisarlo y para hacerme entender mejor.

    http://www.box.com/s/y2e70fpmrfr8hxlcigh5

    Cuando lo abres ves que tienes un objeto sobre la pelota… cuando lo desplazas en X la pelota responde.
    Lo que no soy capaz es de añadirle la posibilidad de responder coherentemente desplazándola arbitrariamente en X, Y o oblicuo.

  4. Bueno ahora entiendo lo que quieres hacer y te anticipo que no es moco de pavo, o sea casi me atrevo a decir que si quieres que se comporte como una bola que rueda sobre una superficie libremente independientemente de este como este siempre ruede como si estuviera de verdad en el suelo, pues es imposible debido al fenómeno del gimbal y mas tratándose de una esfera.
    De todos modos, el valor de x max tiene que ser negativo -360, pero para poder girar de forma arbitraria debido al gimbal es imposible.
    Gimbal (bloqueo de ejes) es cuando los ejes se desplazan y los ejes locales pierden su paralelismo con los globales, en el caso de la bola si pones el valor de -360 que te he dicho ya responde correctamente al movimiento del controlador, pero que ocurre que como mediante el controlador la bola se desplace 90º en el otro sentido, el eje matemático que lleva implícito la bola también se desplaza, por lo que ahora si mueves el controlador en el eje «y» la bola girara como una peonza, porque su eje matemático sobre el cual rota esta desplazado. Son las limitaciones del 3D, el termino para este fenómeno yo lo conozco como gimbal. O sea a base de coordenadas matemáticas es imposible hacer que la bola responda como tu pretendes, la única manera de hacer esto en 3D es con dinámicos, un suelo con propiedades de fricción, una bola dinámica con propiedades de fricción, todo en los valores adecuados, con incluso un peso de bola adecuado, en este caso el controlador desplaza la bola en traslación «xy» con la traslación z bloqueada, a no ser que quieras que también salte, tu al mover el controlador la bola se arrastrara por el suelo como una pelota. No lo he probado en blender, pero simplemente hay que calcular bien el movimiento para crear la cache para poderlo ver a tiempo real, a tiempo real moviendo el controlador, a lo mejor en modo malla y con una muy buena gráfica, o incluso con el maravilloso motor de juegos del propio blender.. pero ahí creo que tú me puedes ayudar más a mi que yo a ti, que yo de 3D se algo pero de blender estoy , vamos el el prefacio de tu libro lo dices muy claro, soy un bebe bleder, que gracias a ti va madurando… y lo de la bola nos ha pasado a todos los que nos dedicamos a esto.
    http://en.wikipedia.org/wiki/Gimbal_lock aquí veo que hay algo sobre gimbal.
    Es una de las limitaciones de las matemáticas, en 3D el acabado puede ser a veces realmente artístico, pero sus tripas son matemáticas y estás tienen implícitas estas limitaciones. Cuando haces el setup de un personaje, que si columna, que si muñecas, que si tobillos, en fin todas las articulaciones, tienes que tener muy en cuenta le orden de rotación de los ejes y el gimbal, para que a la hora de animar todos los movimientos sean posibles de una manera sencilla, que luego siempre acaba complicándose, pero si no tienes en cuenta esto luego al animar es un caos.
    Cuenta conmigo para lo que precises, actualmente estoy sin trabajo y esto me hace refrescar las cosas.
    PD, veo que en la traducción al castellano Gimbal lo pone como cardan en el orden global de rotación, haz una nueva esfera, pon que se vean los ejes de rotación y pon lo en modo «cardán», me a gustado la traducción de gimbal, y ves rotando la esfera y observa los ejes y veras que hay uno que los mueves a los tres y uno que no mueve ninguno, este es el orden de rotación que puedes variar desde el objeto en «Modo de rotación» si cambias aquí el modo, también cambiara el comportamiento de los ejes, es mas te animo a que lo hagas con un cubo , lo muevas unos 45º en cada eje y ves cambiando el modo y observa, estás jugamdo con una seria limitación de las matemáticas, no intentes resolverla peor si es bueno conocerla, de todos modos el caer en un imposible siempre es bueno par alas neuronas.
    tú perdona el rollo, que parece ya un evangelio según san «cardán» esto, saludos, si algún día te acercas por mallorca hazmelo saber.

  5. Mira cosas relacionadas con «quaternion» y «Euler», el primero es un intento de solucionar el efecto gimbal, y da un poco más de juego.
    Ves probando en blender con los diferentes modos y observa que cuando lo pongas en quaternion que los ejes si se desplazan con las rotaciones pero nunca se solapan o cierran, que es lo que ocurre con euler (gimbal, o cardan).
    Mira si tienes XYZ Euler y mueves «x» los demás no se mueven, si mueves «y» se mueve x pero no z, y si mueves z se mueven (x , y) con el. o sea el primer valor solo se mueve a si mismo, el segundo arrastra al primero, y el tercero a los dos, estamos en euler, y para verlo en modo cardan (gimbal). En quaternion te permite mover los ejes sin que ninguno se solape con otro, porque muevas el que muevas siempre arrastra a los otros dos, maravillas de las matemáticas, pero así y todo el desplazamiento de una esfera rotando en diferentes ejes es imposible y menos desde un controlador, se puede hacer un recorrido a base de jugar con keys y mucha paciencia… y con los típicos engaños que tu sabes pero el espectador no, al fin y al cabo el ve una bola rodando y no las dificultades que nosotros vemos para hacerla rodar.
    A mi es una de las cosa que en un principio creía que nunca llegaría a entender esto de los ejes, pero a base de batacazos… en un setap de un personaje como te cite,, no es el mismo orden de rotación en una muñeca que en una rodilla, cada articulación necesita de la elección óptima del orden de rotación, si no la dificultad cuando animas de multiplica, y cambiarlo sobre la marcha si has jugado conlo que te he dicho verás que no siempre es la solución idónea, sobre todo a mitad de una animación.

  6. ¿oye, no estarás intentando solventar un imposible?…

  7. @Rafa: qué va. Tengo qeu mirar todo eso que me ha comentado aunque es algo abstracto para mi (soy de Bellas Artes): por eso no te comenté nada… no tenía mucho que decir jejeje.
    Eso sí… tien que haber una solución aunque sea con Python porque mira este vídeo: http://blip.tv/jirih/blender-squash-stretch-ball-rig-intro-862312

    Aquí tienes el artículo: http://blenderartists.org/forum/showthread.php?123001-FREE-Squash-amp-Stretch-Ball-rig-Ver-1.1

    lo que pasa es que aún no he probado nada de eso. Hay un script… pero pensé que eso sería posible con las constarints…

  8. Acabo de mirar el archivo este que me comentas, y fíjate que cuando mueve la pelota no sobrepasa los limites para que se produzca el bloqueo de ejes, por lo que hasta este límite se comporta bien. De todos modos una interesante forma de estirar y encoger la bola con capacidad de orientación, pero la rotación que muestra en el ejemplo la puedes conseguir del mismo modo que has hecho tú, siempre y cuando no sobrepases los limites de los ejes. En el articulo que te puse de wikipedía hay algunos ejemplos que te pueden ayudar a comprender mejor lo del bloqueo de ejes o gimbal.

    • Sandra
    • 23 de abril de 2012

    podrías hacer un tutorial explicando mejor como lo has hecho? me vendria muy bien saberlo! Gracias 🙂

  9. I’m not that much of a internet reader to be honest but your sites really nice, keep it up!

    I’ll go ahead and bookmark your website to come back in the future. Cheers

  10. usa visual rotación en los keys y tendria que funcionar

  1. No trackbacks yet.

Deja un comentario