|
Animación con expresiones
21/12/2001
Dentro del campo de la animación por
ordenador se utilizan diferentes técnicas para animar los
objetos de una escena: desde la animación "manual"
fotograma a fotograma hasta técnicas de inteligencia artificial
que mediante unos comportamientos predefinidos permiten dotar de
vida a los personajes; estos comportamientos no son más que
programas o rutinas en un lenguaje determinado; 3D Studio
dispone del lenguaje MaxScript para realizar este tipo de
animación, aunque para tareas más simples pueden utilizarse
descripciones matemáticas del movimiento mediante las expresiones
que se aplican sobre un objeto mediante los controladores.
La teoría
El controlador de Expresiones permite en 3D Studio utilizar
fórmulas matemáticas para animar los objetos de una
escena; de esta forma pueden automatizarse algunos procesos que
de hacerse de forma manual requerirían mucho trabajo y precisión.
Es el caso que se plantea en este artículo, donde se verá
como puede animarse el giro de una rueda en función de la
distancia recorrida; lo mismo podría aplicarse para objetos
esféricos o de cualquier tipo, siempre que giren alrededor
de su centro y tengan un radio definido.
Si intentásemos animar de forma manual una rueda, creada
a partir de la primitiva "toroide", tendríamos
que hacerla girar más o menos en función de si la
distancia recorrida es mayor o menor, teniendo en cuenta el tamaño
de ésta. Para una misma distancia, una rueda grande dará
menos vueltas que una rueda de menor radio. Creando un fotograma
clave al inicio de la animación y otro al final donde grabaríamos
la rotación del toroide, tendríamos una rueda que
dará vueltas sobre su eje. Si no se ajusta correctamente
el número de vueltas o posteriormente se cambia la posición
final o se modifica el radio, la rueda parecerá patinar sobre
el suelo, por lo que este sistema no resulta muy adecuado.
Un poco de matemáticas (pero sólo un poco...)
Aprovechando que podemos conocer el radio de la rueda, y sabiendo
que la longitud de su perímetro es igual a 2*pi*radio (donde
"pi" vale 3,1416...), cuando la rueda haya recorrido su
perímetro habrá dado una vuelta, por lo que es fácil
controlar la rotación de la rueda conociendo la distancia
que se ha desplazado.
Por tanto, para completar una vuelta, la rueda tiene que girar 360º,
desplazándose una distancia igual a su perímetro:
giro( º) = (360* desplazamiento / 2*pi*radio)
Comprobamos que si "desplazamiento"=2*pi*radio la rueda
ha dado una vuelta.
Advertencia (consulte a su farmacéutico)
Para realizar el ejercicio de este artículo se presupone
un conocimiento previo de 3D Studio y su interfaz, así como
de la utilización y asignación de controladores, jerarquías,
creación y vinculación de ficticios y creación
de materiales. De todas formas se adjuntan las escenas que se
obtienen en cada paso, para poder ir siguiendo el ejercicio.
La realización de este ejercicio puede provocar efectos secundarios
cómo: descubrimiento de nuevas funciones de 3D Studio, ganas
de experimentar con nuevas fórmulas, etc. No se recomienda
realizar otras actividades mientras se haga ésta.
¡Manos a la obra!
Pasos a seguir para controlar
la rotación de la rueda en función de la distancia
desplazada en el eje X:
1. Crear un ficticio de nombre
"Ficticio01" (menú "Crear/Ayudantes/Ficticio")que
será padre de un toroide "Toroide01" que hará
de rueda, a la que aplicaremos un modificador "Xformar"
(menú "Modificar/ Más -> Xformar"). Encajaremos
la rueda dentro del ficticio, para poder controlarla mejor. Si ahora
movemos el ficticio, la rueda deberá seguirle, pero todavía
sin girar. (escena "rueda01.max").
El modificador "Xformar" sirva para aplicar una transformación
(de escalado, movimiento o rotación) o a un objeto pero desde
el catálogo de modificaciones. Más adelante accederemos
a este modificador para poder hacer girar el toroide en base a la
función matemática.
2. Abriremos el TrackView y
desplegando la rama "Objetos", desplegaremos las sub-ramas
"Fictio01" y la "Toroide01" que se encuentra
dentro. Acto seguido procederemos a realizar las siguientes asignaciones
de controladores :
2.1. Desplegando la rama "Objeto
modificado" del "Toroide01" aplicaremos en la rama
"Gizmo/Rotación" del "Xformar" un controlador
"XYZ Euler".
(escena "rueda02.max").
2.2. Desplegando la rama "Toroide01\Objeto
Modificado\Objeto\Radio1" asignar un controlador "Flotante
Bezier"; de esta manera será posible leer el radio de
la rueda (el "Radio 1" es el radio externo del toro) para
aplicarlo a la fórmula que calcula el giro de la rueda, y
si variamos el tamaño de la rueda, la fórmula lo tendrá
en cuenta. (escena "rueda03.max").
2.3. Desplegando la rama "Toroide01\
Objeto Modificado \Xformar \Gizmo \Rotación Rotacion de Z"
asignar controlador "Expresión Flotante". Esto
va a permitir controlar la rotación alrededor del eje Z del
objeto mediante una expresión. (escena "rueda04.max").

3. Acceder a "Propiedades"
con el botón derecho estando situados sobre la rama "Toroide01\Objeto
Modificado\Xformar\Gizmo\Rotacion\ Rotacion de Z", y se abrirá
el "Controlador de Expresiones".
4. Crearemos una variable donde
almacenar el valor del radio de la rueda, para ello en "Nombre"
pondremos "radio" y activaremos el botón "Escalar"
y dando al botón "Crear" se creará la variable
"radio", después pulsar el botón "Asignar
a controlador" e ir a seleccionar la rama "Toroide01\Objeto
Modificado\ Objeto\ Radio1= Flotante Bezier". De esta forma,
si se varia el "Radio1" del toroide (desde el catálogo
de modificaciones), la fórmula obtendrá el nuevo valor,
al estar "conectada" a través del controlador "Flotante
Bezier".
5. Seleccionar botón
"Vectoriales" y crear variable "xmov", después
"Asignar a controlador" e ir a seleccionar la rama "Posicion"
del "Ficticio01". Así es como en todo momento la
fórmula obtendrá la distancia recorrida por el "Ficticio01".
6. El siguiente paso será
programar la fórmula que controlará el giro del "Gizmo"
del modificador "Xformar" que se aplicó sobre el
toroide; en la ventana "Expresión" escribiremos
la fórmula siguiente:
-degToRad(360*(xmov.x/(2*pi*radi)))
La función "degToRad" sirve para pasar de grados
a radianes (que es como opera el evaluador de expresiones ) el parámetro
contenido que se pasa entre los paréntesis. El signo negativo
es para que el sentido de rotación sea en la dirección
del desplazamiento.
Para leer la distancia recorrida hasta el momento lo hacemos leyendo
la componente "X" del vector de traslación, y se
hace de la forma "xmov.x". Si quisiéramos conocer
la distancia desplazada en el eje "Y" lo haríamos
con "xmov.y". (escena "rueda05.max")
7. Para comprobar que funciona,
cuando movamos el "Ficticio01" en el eje de las X, el
desplazamiento se trasladará en una rotación del "Xformar"
que a su vez se transferirá al toroide, éste se desplazará
debido a que es hijo del Ficticio01.
8. Para poder apreciar mejor
el giro, podemos asignar una textura al toroide y así se
podrá ver mejor el giro de la rueda. (escena "rueda06.max").
9. Comprobar como al aumentar
o disminuir el radio de la rueda la rotación se adapta teniendo
en cuenta en todo momento el tamaño del toroide. (escena
"rueda07.max").
10. Incluso es posible asignar
un recorrido al "ficticio01", de manera que la rueda siga
un camino trazado por una linea y vaya girando en función
de la distancia desplazada en el eje X. (escena
"rueda08.max").
11. Haciendo copias el "Toroide01"
podemos crear las 4 ruedas de un coche, y simplemente moviendo el
ficticio tendremos el giro de las 4 ruedas (o sea: tracción
a las 4 ruedas, como en un 4x4). (escena "rueda09.max").
(Al clicar sobre la imagen se
muestra la animación de "ruedas.avi")
Y sin embargo se mueve:
En efecto, hemos comprobado como la rueda gira al desplazarla como
si de una rueda real se tratase: dependiendo de su tamaño
y la distancia recorrida, girará más o menos para
que no parezca patinar sobre el suelo.
Un caso más complicado seria el de una esfera que se desplazara
sobre el suelo, ya que hay que tener en cuenta la posibilidad en
este caso de desplazamiento tanto en el eje X como en el Y, por
lo que se tendría que controlar la distancia que se ha recorrido
en cada uno de los ejes y aplicar el giro adecuado a los ejes correspondientes.
Espero que este ejercio os haya servido para ver las posibilidades
del controlador de expresiones y cómo nos puede facilitar
la realización de animaciones más complicadas.
|