Mecanica Restringida

por Malefico


Cuando animamos personajes en Blender lo que hacemos es definir un conjunto de "poses" en el tiempo para nuestros personajes variando las posiciones de piernas, brazos, tentaculos u orejas segun nuestro parecer.

Sin embargo cuando lo que intentamos animar son maquinas o sistemas mecanicos, que deben respetar determinadas leyes fisicas o sincronias, este enfoque es inadecuado. Imaginense animar la biela de una locomotora, y que las ruedas se muevan de acuerdo al impulso trasmitido por esa pieza y no "locamente" como si fueran piezas independientes. Esto claramente es algo que no puede ser hecho mediante poses.

En este tutorial intentaré explicar el uso de Constraints para resolver algunos mecanismos simples. Mecanismos mas complejos podran resolverse aplicando los principios aqui delineados.

El primer ejemplo sobre este tema me fue explicado por primera vez por el inefable Caronte a quien le envio un abrazo y un saludo por su generosa y siempre desinteresada ayuda.

ADVERTENCIA: Este tutorial requiere un conocimiento basico del manejo de Blender por lo que muchas operaciones basicas no serán explicadas.

Para seguir este tutorial necesitaran al menos la version 2.22 de Blender.

Algo de teoria (muy poco)


Una biela es una pieza muy popular en cualquier maquina. Su funcion es la de convertir un movimiento circular en un movimiento lineal y viceversa. La biela se encuentra unida por uno de sus extremos y excentricamente a una rueda mediante una pieza que se llama cigüeñal.

El otro extremo de la biela se encuentra restringido en su movimiento mediante una corredera, otra biela, o alguna otra pieza mecanica. Al girar el cigüeñal, la biela solo transmite la componente del movimiento que es colineal con la pieza que la restringe.

Veamos paso a paso como se puede recrear en Blender este mecanismo de modo que al animar un objeto, por ejemplo la rueda, el resto de los objetos se anime automaticamente.

Mecanica en Blender


Iniciemos una escena nueva de la forma acostumbrada y seleccionemos la vista frontal. Crearemos un cilindro en esta vista a modo de rueda. Curiosamente, llamaremos a este cilindro "Rueda". Movamos el cursor en algun punto lejos del centro del cilindro pero aun asi dentro del mismo y agreguemos un empty al que llamaremos "Empty0". Lo más aconsejable es ajustar la posicion de los objetos mediante la grilla. Para que esta sea la conducta por defecto de Blender conviene setear la opcion GrabGrid en el Panel del Usuario de Blender.En este momento debemos tener algo similar a esto:

Movamos el cursor hasta la posicion del Empty0 (si no está allí ahora) y agreguemos un plano. En modo edicion alarguemoslo hacia la izquierda unas cuantas unidades de forma que quede algo parecido a la figura. Este plano hará las veces de biela y asi lo nombraremos "Biela1".

Lo mas importante es tener en mente que el centro del plano (el centro segun Blender, indicado por un punto rosado, no necesariamente el centro "geometrico") se encuentre donde se indica. Esto es muy importante porque el eje de giro de la biela pasará por este punto. Si no me creen, seleccionenla y girenla un poco...

Ahora movamos el cursor hacia el otro extremo de la biela y agreguemos otro empty y emparentemoslo a la biela. Este será el "Empty1".

En la posicion del nuevo empty agreguemos otro plano. Alarguemoslo para formar otra biela un poco mas gruesa que la inicial. La llamaremos "Biela2" para salirnos un poco de lo común. Seguramente el centro de esta segunda biela nos ha quedado donde estaba el Empty1. Para corregir esto movamos el cursor hacia la zona central de la Biela2 y recentremos el plano con CentreCursor en los botones de Edicion.

Ahora movamos el cursor nuevamente a la posicion del segundo empty, y agreguemos un tercero. Emparentemoslo a la segunda biela.

Hasta ahora las cosas se deben ver asi:

Restricciones Locas


¿Para qué tantos emptys y cosas raras?. Ahora veremos. Seleccionemos la biela 1 y vayamos a los botones de Restricciones (el icono de los eslabones). Agreguemos una restricción Copy Location, y pongamos el nombre del primer empty en la caja OB. Probemos a girar el cilindro-rueda. Verán como la biela se mantiene paralela al eje X mientras acompaña el movimiento del Empty. Perfecto.

Ahora lo que intentaremos es que la Biela2 se oriente apuntando hacia el Empty 1. Para ello seleccionemos la Biela2 y añadamosle una restriccion TrackTo y escribamos el nombre del Empty1 en la caja OB. Puede ocurrir que al hacer esto la biela asuma una posicion rara. Para resolver este problema iremos a los botones de Animacion y probaremos con el grupo de botones TrackX,Y,Z y UpX,Y,Z hasta lograr que la biela tome la posicion correcta nuevamente. Cosas de Blender ;)

Analogamente añadiremos otra restriccion a la Biela1, haciendo un TrackTo al Empty2.

Restricciones para la Biela1 :

Restricciones para la Biela2 :

Corrijamos cualquier "extrañeza" y ya estamos.

Ahora si hacemos rotar sobre su eje la rueda veremos como las bielas se mueven solas como deberían si estuvieran unidas en el mundo real.

Cambiando la posicion del Empty0 acercandolo o alejandolo del centro de la rueda cambiará la longitud de la carrera realizada por la Biela2 al girar la rueda. No es fabuloso ?

Modelos mas Complejos


La tentación es comenzar a modelar las piezas antes de probar el sistema funcionando. Personalmente creo que no es buena idea, lo mejor es asegurarse que el mecanismo funciona bien usando piezas simples como hemos visto y luego modelar las piezas mecánicas con detalle y emparentarlas a los planos y cilindros.

Para evitar que los objetos originales sean rendereados bastará con moverlos a una capa que mantendremos apagada. Cuando hagamos esto, puede pasar que Blender muestre cosas muy raras al disparar la animación con Alt + A. No le demos importancia, cuando rendericemos todo saldrá bien. Una pequeña animación (codec DivX) de ejemplo pueden verla aquí.

Lo bueno de este enfoque es que así toda la parte funcional del mecanismo la podremos modificar y ajustar sin manejar todos los vertices de las mallas finales.

Como todo lo bueno en el mundo este tutorial ya se acaba pero si tienen alguna duda o quieren ver el ejemplo funcionando sin tanto trabajo pueden bajarse un ejemplo desde aquí.