Blender: Parent/Unparent durante una animación

Qué mejor manera que celebrar la llegada de Bender 2.58 que con un bonito tutorial con Joaclint🙂

DESCARGAR EL .BLEND

Hace no mucho que publiqué una entrada motivada por la inquietud de un compañero de trabajo que se anda peleando con un proyecto ambicioso de una animación en el que un brazo robótico con una pinza mecánica en el extremo se dedica a recoger elementos del suelo y a llevarlos a otra parte. Tras la solución al problema para crear un Shape Key que controle la apertura de la pinza ha llegado el momento de hacer que esa pinza suelte un objeto y se vaya a buscar otro. La cosa no es una tontería y nos ha dado un buen quebradero de cabeza hasta llegar a la opción que lo permite: un tipo de keyframe con muy poca publicidad Visual LocRot.
Partimos de la misma pinza mecánica que obtuvimos en el tutorial antes mencionado.
Antes de emparentar objetos y ediciones similares es importante que los objetos que van a intervenir en la animación (los objetos móviles para que nos entendamos) se deshagan de toda la información interna relativa a escalado y rotaciones y que todo estos valores se reinicien. Estas operaciones las hacemos desde Object Mode con Object/Apply/Rotation & Scale
Desde el comienzo de la animación creamos una restricción de tipo Child Of para cada uno de los cubos (menos el que no se mueve en toda la animación) en las que el padre es siempre el elemento fijo de la pinza (mano) y no olvidamos:

  • poner, de momento, el valor Influence a 0.000
  • mantener el objeto en su lugar tras el emparentamiento con Set Inverse

El el frame 1 creamos todos los keyframes de tipo LocRot (uno para cada objeto de los que se van a mover en la animación teniendo en cuenta que de la pinza sólo vamos a mover en la ventana DopeSheet el elemento fijo porque los dedos se editan en la ventana Shape Keys Editor gracias al Shape Key que ya tenemos creado del otro tutorial).
Y comienza la acción.
La pinza hace los movimientos necesarios para agarrar el primero de los cubos (el azul) y que va a colocar sobre el cubo inmóvil de color rojo. Como el valor de Influence en la restricción del cubo es de 0.000 éste permanece quieto mientras la pinza hace su maniobra. Pero a partir de ese momento, para que el cubo siga los movimientos de la pinza, es necesario que el valor de Influence de su restricción sea 1.000. Cómo se resuelve este primer conflicto:

  1. En el frame 1 creamos un keyframe (tecla “I” sobre el campo o clic derecho para el menú contextual) en el parámetro Influence: 0.000 del cubo azul.
  2. En el frame donde queremos que comience a seguir a la pinza creamos un keyframe sobre Influence: 1.000.

Parece que debería funcionar pero no es así. La curva de interpolación que se ha creado entre esos dos frames es de tipo bezier suavizada lo que se traduce en que entre la primera posición y la última el valor de Influence evoluciona progresivamente.

Nosotros no queremos eso. Queremos que el valor sea o 0.000 o 1.000 sin valores intermedios. Vamos a arreglar eso desde la ventana Graph Editor. Necesitamos seleccionar el primer nodo que forma la curva de interpolación de Influence y después hacer Key/Interpolation Mode/Constant.

Hecho. Gracias a esta edición se mantiene constante un valor hasta que llega el siguiente.
A partir de ese punto seguimos animando la pinza para que desplace el cubo hasta el lugar adecuado encima del cubo rojo.
Y llega el momento de que el cubo vuelva a tener como valor Influence:0.000 en su restricción.Sin embargo la cosa no es tan intuitiva.

El cubo de momento carece de keyframes (salvo aquel LocRot que creamos al comienzo en el frame 1) porque ha obececido al padre para llegar a donde está. Sin embargo tenemos que crear un nuevo kayframe LocRot en el frame en el que deseamos que quede sin influencia del padre y así permanecer donde la pinza le ha dejado. Pero no basta con eso porque al descender el valor de Influence a 0.000 el cubo regresará a su lugar de origen. Si nos fijamos en los keyframes en la ventana DopeSheet, para Blender, la posición del cubo no a cambiado desde el comienzo de la animación.

La novedad está en el frame siguiente (sólo un frame más): aquel en el que deseamos que el cubo no siga más a la pinza. En esa ocasión le aplicamos al cubo un keyframe de tipo Visual LocRot. No nos tenemos que preocupar de hacer que la curva no sea beciez sino constante porque sólo hay un frame de diferencia.
La finalidad de Visual LocRot es obligar al objeto a aparecer en ese lugar y con esa rotación (supongamos, por ejemplo, que la pinza no lo ha dejado en un plano horizontal) respetando todas las restricciones anteriores.
Al crear ese keyframe aún tenemos el valor de Influence a 1.000, así que descendemos ese valor a 0.000 y creamos el keyframe correspondiente para ese campo Influence.
Es posible que en la Ventana 3D el objeto se comporte de una manera inesperada al descender el valor de Influence regresando al origen pero es porque Blender necesita reordenar su información. Cuando movamos el cursor de la línea de tiempo el objeto se reorganizará y responderá  a nuestras expectativas.
A partir de aquí la pinza se podrá ir a buscar el otro cubo con el que tendremos que recurrir al mísmo método para que la pinza lo pueda dejar encima del azul.

DESCARGAR EL .BLEND

  1. Como siempre muy buen tutorial.
    Normalmente en los programas profesionales (caso del Maya en esta caso) hay un parámetro llamado visibilidad que es el que se usa para estos fines, blender veo que no tiene esta opción y como alternativa a ella podemos usar la escala.
    Me explico, la manera mas usada cuando nos encontramos con esta problema es duplicar el objeto en cuestión, uno esta en el lugar de origen y seria el que interactua con la grúa, el segundo esta en su lugar de destino pero con el visibilidad a cero, o sea invisible, cuando la grúa trae el otro justo en el momento que lo suelta lo hacemos desaparecer y aparece el otro, todo ocurre en un frame.
    Como podemos hacer esto en blender, pues muy fácil, como tu explicas o de una manera que te da mucha mas libertad si tienes que seguir interactuando con el objeto, blender no tiene el parámetro visibilidad, pero si tiene alpha y escala, por su puesto. Si partimos desde la base de que cuando empezamos a animar todos los parametros se habrán puesto a 0 en su posición inicial nos encontramos que la escala del objeto es 1, bueno pues duplicamos el objeto, uno lo dejamos en su posición inicial y el otro justo donde lo dejara la pinza, pero con su escala a 0, por lo que es invisible (también podemos usar el canal alpha, pero es mas delicado), en el momento en que la grúa suelta el objeto este en un frame pasa su escala de 1 a 0, por lo que se hace invisible y el otro en el mismo frame pasa de 0 a 1 y se hace visible. con este modo tenemos mas libertad de seguir interactuando con el objeto.
    Para terminar solo decir que di contigo buscando información sobre software libre para un proyecto lectivo que se me encargo, desde entonces te sigo y aprecio mucho lo que haces y veo que tienes un gusto exquisito, que es la mejor cualidad de una persona que se dedica al diseño gráfico, te deseo mucha suerte.

  2. Por cierto me encanta blender, maya lo uso porque es el que se usa donde trabajo, pero el cariño que he cogido a blender por lo que significa su filosofía de de programas libres y gratuitos es algo que aprecio mucho.
    También te puedo garantizar por experiencia propia que en según que aspectos blender ya esta por delante de maya, y en estabilidad ya no te digo nada.

  3. @Rafa: Wow!!! Escala=0 y Escala 1 como solución al problema es increíble. No lo había pensado. Sí que había pensado la posibilidad de buscar una solución por el camino de la visibilidad pero no con el valor de alpha (es es otra idea muy buena). Había pensado en buscar soluciones relativa a visibilidad de capas y hacer que el objeto se fuera a una capa no visible a la vez que aparece un nuevo objeto que además, como bien dices, puede comenzar a interactural fácilmente con otro parent.

    Gracias por pasar por aquí, por comentar, y por compartir🙂

  4. El agradecido soy yo, puesto que gracias a personas como tú me he podido adentrar en el maravilloso mundo del software libre, un verdadero placer leer tus buenísimos tutoriales, no tienen desperdicio.
    Pero lo que es un verdadero placer para la vista es ver tus trabajos, enhorabuena por ser tan bueno en el diseño.

  1. No trackbacks yet.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: