3DSMAX Tutorial 10d: Animación en 3DSMAX, Constraints Parte 1

En el mundo de la animación 3D todo lo que se mueve, rota o escala, es decir, todo lo que es posible de “animar” siempre está manejado por un controlador. En el caso de 3DSMAX, un controlador es un plugin que controla el almacenamiento y la interpolación de todos los valores animados, es decir, gestiona todas las tareas de animación. En el programa tenemos tres tipos de controladores predeterminados y estos son los siguientes:

– Posición: Position XYZ.
– Rotación: XYZ Euler.
– Escala: Bezier Scale.

Además de los controladores de animación standard, también disponemos de un tipo especial de controladores llamados Restrictores o Constraints los cuales son precisamente “restrictores de movimiento” que nos facilitan bastante el proceso de animación, ya que gracias a estos se puede restringir y/o controlar la jerarquía, posición, rotación y escala de un objeto. Dependiendo del tipo de animación que deseemos realizar dependerá la cantidad de objetos que necesitemos para aplicar un constraint.

En este tutorial veremos todos los Constraints de animación a excepción de Path Constraint, ya que este último fue visto en un tutorial pasado. Para la correcta realización de este tutorial, en la página de descargas de los archivos de tutoriales 3D está el archivo base llamado 3dsmax_animacion_constraints.rar.

Constraints o Restrictores de animación

Como ya dijimos en un principio, un Constraint es un controlador o “restrictor” de animación y en el caso de 3DSMAX, tenemos varios tipos de estos los cuales se utilizan para diferentes tipos de animaciones según lo que necesitemos resolver. Los Constraints pueden encontrarse en el menú Animation >> Constraints de la parte superior de 3DSMAX:

En total tenemos siete tipos de constraints los cuales son:

1) Attachment Constraint: Asocia la posición de un objeto a la cara de otro.
2) Surface Constraint: Limita la posición de una superficie 2D a la superficie de otro elemento 3D.
3) Path constraint: Limita el movimiento de un objeto a lo largo de un recorrido.
4) Position constraint: Limita la posición de un objeto a la posición de otro.
5) Link Constraint: Genera uno o más vinculos entre el objeto que tiene la restricción y otros.
6) LookAt constraint: Limita la orientación de un objeto a la posición de otro.
7) Orientation constraint: Limita la rotación de un objeto a la rotación de otro.

Dependiendo de qué es lo que queremos animar dependerá el o los constraints que aplicaremos. Para este tutorial veremos todos los constraints de 1) a 4) a excepción de 3), el cual ya fue visto en su propio tutorial.

1) Attachment Constraint

Attachment Constraint se encarga de asociar la posición de un objeto (mediante su punto de pivote) en la cara de otro, siempre y cuando la superficie o cara sea de tipo “mesh” y por ende, se recomienda que los objetos a los que se asocien sean de tipo Editable Mesh o primitivas básicas ya que si bien se puede ocupar Attachment Constaint en objetos de tipo Editable poly, la animación final no será visible en el render.

Para entender el funcionamiento de la herramienta desarrollaremos el siguiente ejercicio: animaremos una superficie de tipo Editable Mesh mediante Noise simulando un “mar”, y pondremos botes mediante Attachment Constraint. Por ello, abriremos el archivo llamado 3dsmax_animacion_attachconstraint.max y al hacerlo se nos mostrará lo siguiente:

Como podemos notar, el archivo posee una superficie de tipo Editable Mesh ya dividida y animada que simula agua, y cuatro yates. La idea es que los yates se vinculen a la superficie y sean mecidos por las ondulaciones del agua. Lo que haremos será colocarnos en el cuadro 0, seleccionar uno de los yates y luego aplicaremos el constraint de la siguiente manera: iremos a Animation >> Constraints y elegiremos Attach Constraint. Notaremos que al aplicarlo, veremos una línea segmentada similar a cuando vinculamos los objetos. En este caso, elegiremos la superficie y realizamos Click para terminar de asignar el restrictor.

Como notamos, el yate se posiciona en la segunda cara de la superficie de acuerdo a la Tabla Attachment Parameters. Sin embargo, debemos entender este concepto para saber cómo funciona Attachment Constraint ya que de no entenderlo, podemos caer en el error de posicionar el objeto de forma incorrecta. 3DSMAX define como “cara” o “Face” al primer polígono fundamental que forma un polígono cuadrado el cual es un triángulo, lo que implica que cualquier polígono (el cual a su vez es parte de una malla) estará formado por dos caras ya que son dos triángulos los cuales definen a este, tal como se aprecia en la imagen de abajo:

En la imagen se selecciona la cara 1 del primer polígono en el plano.

De acuerdo a la subdivisión de la imagen, la superficie del agua de nuestro ejercicio tiene una división de trama de 15 x 15 polígonos y por ende tenemos en total 225 de estos. Pero como ya sabemos que un polígono está formado por dos caras, en total tenemos 450 de estas mismas. Por lo tanto, al modificar los parámetros de posición de Attachment Constraint, debemos tomar en cuenta que el total de caras será 450 y la primera de las caras se posiciona en la parte inferior derecha, que es donde está precisamente nuestro yate aunque por defecto, tomará la segunda cara como posición inicial.

Selección de todas las caras que forman el plano mediante la trama de 15 x 15 polígonos (total de caras: 450).

Selección de la cara 2 de las 450 totales que forman el plano anterior.

Podemos verificar fácilmente las caras de la superficie moviendo el parámetro Position >> Face en la tabla llamada Attachment Parameters, la cual se encuentra en el panel de animación. Notaremos que si asignamos la cara 451, volverá por defecto a la primera cara de nuestra superficie ya que comienza nuevamente con el conteo.

Posición del objeto en la caras 115 y 451 del plano.

Un aspecto interesante de la opción Position es que, además de poder cambiar la cara a la que se posiciona nuestro objeto mediante Face, podremos ingresar valores de coordenadas numéricas (A y B) para mover el objeto a través de la cara seleccionada, la cual se representa mediante el triángulo de contorno negro que está dentro de la misma tabla. También podremos hacerlo tomando el punto rojo con el mouse y luego arrastrándolo, presionando y manteniendo el primer botón de este. Podremos incluso salirnos de la representación gráfica de la cara y cambiarlo a otra posición aunque estará siempre asociado a la cara asignada en Face, tal como se muestra en los ejemplos siguientes:

Ejemplos de modificación de posición del objeto en la cara 115, mediante la modificación de los parámetros de A y B respectivamente. En la segunda imagen notamos que el punto rojo se sale del cuadro de la representación gráfica de esta.

Si queremos establecer la posición final del objeto, simplemente presionamos el botón Set Position. Esta opción es importante puesto que además de establecer la posición del objeto, nos permitirá animarlo de una cara a otra.

Otras opciones de la tabla Attachment Parameters son:

Attach to: Permite cambiar la superficie o el objeto al que está restringido el objeto al cual se le aplica la restricción, presionando el botón Pick Object y luego seleccionando el objeto.

Align to Surface: es la opción activada por defecto y permite que el objeto se alinee en torno a la superficie de la cara en el que está posicionado. Si esta opción se desactiva, el objeto mantendrá siempre su posición original respecto a esta. Como el restrictor no modifica la orientación del objeto, podremos girar este mediante Select and Rotate.

Align to Surface activado.

Align to Surface desactivado.

Manual Update: al establecer esta opción, Attach to Surface se desactiva y por ello, el objeto siempre permanecerá en su posición original, es decir, no se moverá junto a la superficie si esta es animada, aunque seguirá vinculado a ella. Podemos actualizar manualmente si presionamos el botón Update.

Manual Update activado.

Manual Update desactivado.

Key Info: permite ir a uno o más cuadros clave mediante las flechas < > y a la vez nos muestra el cuadro exacto en el que estamos en la línea de tiempo mediante la opción Time. Esto nos permitirá animar el movimiento del objeto desde una cara hacia otra, ya que por defecto al crear la restricción se crea un keyframe en el cuadro 0. Si queremos animar el objeto debemos realizar lo siguiente: activamos Auto Key, elegimos el frame que queremos en la línea de tiempo, luego presionamos Set Position para establecer la posición que deseemos mediante A y B y asignamos una cara mediante Face. Con esto podremos se creará un segundo cuadro clave y ya animar el objeto, puesto que este se moverá hacia la siguiente cara asignada, ejemplificada en la siguiente secuencia:

Animando los cuadros 0 y 50 mediante Set Position y auto Key, y testeando la animación en el cuadro 25.

Podremos repetir el mismo proceso creando todos los cuadros clave que estimemos conveniente y eligiendo otras caras para nuestra animación.

TCB: sólo funciona si agregamos la rotación de tipo TCB al objeto, y por ello la orientación del objeto de origen también se interpola y se ve afectada por esta configuración. Sus parámetros son los siguientes:

Tension (Tensión): controla la cantidad de curvatura en la curva de animación. La alta tensión produce una curva lineal. La baja tensión produce una curva muy ancha, redondeada. Por defecto su valor es 25.

Continuity (Continuidad): controla la propiedad tangencial de la curva en el Keyframe. La configuración predeterminada es el único valor que produce una curva de animación suave a través del Keyframe. Todos los demás valores producen una discontinuidad en la curva de animación que provoca un cambio brusco en la animación. Por defecto su valor es 25. Valores de Continuity altos crean un sobreimpulso curvo en ambos lados de la tecla, mientras que valores bajos crean una curva de animación lineal.

Bias (Parcialidad): controla dónde se produce la curva de animación con respecto al Keyframe. Por defecto su valor es 25. Valores de Bias altos empuja la curva más allá del Keyframe. Esto produce una curva lineal que entra en la clave y una curva exagerada que sale de la clave, mientras que los valores de Bias bajos tira de la curva antes del Keyframe. Esto produce una curva exagerada que entra en la clave y una curva lineal que sale del Keyframe.

Ease To (Facilidad para): reduce la velocidad de la curva de animación a medida que se acerca al Keyframe. Por defecto su valor es 0. Valore altos de Ease To hacen que la animación se desacelere a medida que se acerca al Keyframe mientras que valores bajos harán lo contrario. La configuración predeterminada no causa desaceleración adicional.

Ease From (Facilidad de): disminuye la velocidad de la curva de animación cuando sale del Keyframe. Por defecto su valor es 0. Valores altos hacen que la animación comience lentamente y se acelere al salir del Keyframe, mientras que valores bajos harán lo contrario. La configuración predeterminada no causa cambios en la curva de animación.

Ya conociendo estas opciones, lo que nos queda es ir posicionando nuestros yates aplicando Attachment Constraint y dejando Align to Surface activada en todos los casos. Podremos girarlos si lo deseamos mediante Select and Rotate aunque en este caso no moveremos los barcos sino que más bien, estos se mecerán con el movimiento del agua ya animado previamente. Rotaremos nuestros yates colocando el modo Local en Reference Coordinated System, luego activando Angle Snap, seleccionando cada yate y finalmente girando cada uno en 90° o 180° mediante Select and Rotate, ya que el Attachment Constraint NO restringe la orientación de los objetos. Con esto realizado, ya podremos iniciar la animación.

La idea de nuestra animación es que todos nuestros barcos sean visibles desde la cámara detalle que incorpora el archivo, tal como se aprecia en el ejemplo siguiente:

Testeando la animación final en el cuadro 50.

El renderizado final de toda la escena desde la cámara de detalle es el siguiente:

2) Surface Constraint

Este Constraint nos permite enlazar un objeto (mediante su punto de pivote) a la superficie o cara de otro y a su vez nos permite su animación en torno a esta. Sin embargo, este constraint no puede ser aplicado a todos los objetos puesto que está limitado solamente a objetos 3D que puedan ser representados de forma paramétrica. Por lo tanto, las superficies de los objetos en los cuales puede ser utilizado este Constraint son:

– Esfera o Sphere.
– Cono o Cone.
– Cilindro o Cylinder.
– Dona o Torus.
– Quad Patch (creado mediante la opción Patch Grids).
– Objetos realizados mediante la operación compuesta llamada Loft.
– Curvas de tipo NURBS.

(imagen con objetos 3D que pueden usar el constraint)

Para entender el funcionamiento cabal de la herramienta desarrollaremos un ejercicio sencillo ya que realizaremos una animación de tanques en un terreno con inclinaciones. Por ello, abriremos el archivo llamado 3dsmax_animacion_surfaceconstraint.max y al hacerlo se nos mostrará lo siguiente:

Como podemos notar, el archivo posee cuatro pequeños tanques y un terreno realizado mediante Loft el cual posee montículos. La idea es que los tanques se vinculen a esta superficie y se muevan en línea recta por esta. Lo que haremos será colocarnos en el cuadro 0, seleccionar uno de los tanques verdes y luego aplicaremos el constraint de la siguiente manera: iremos a Animation >> Constraints y elegiremos Surface Constraint. Notaremos que al aplicarlo, veremos una línea segmentada similar a cuando vinculamos los objetos. En este caso, elegiremos la superficie y realizamos Click para terminar de asignar el restrictor.

Como notamos, el tanque queda vinculado a la superficie y por ende, se coloca en la esquina superior izquierda de esta.

Lo que corresponde ahora es hacerlo caminar por el terreno y para eso, con el tanque seleccionado, iremos a la tabla llamada Surface Controller Parameters que se ubica en el panel de animación:

En este caso el panel es sencillo de controlar ya que, además de poder cambiar la superficie o terreno a escoger mediante Current Surface Object, podremos mover el objeto vinculado por la superficie mediante los parámetros U Position y V Position, los cuales representan el movimiento en X e Y respectivamente ya que en verdad el Constraint NO vincula a la superficie real, sino más bien crea una superficie virtual de manera similar a cuando se coloca una textura en un objeto. En el caso de nuestro tanque, colocamos en U el valor 99,9 y en V el valor 7. El resultado es el siguiente:

Si bien se podría colocar el valor 100, el problema al hacer esto es que si lo alineamos y luego efectuamos la animación final el tanque se invertirá. Por esto mismo es que realizaremos lo mismo con el resto de los tanques, es decir, les aplicaremos Surface Constraint y colocaremos el mismo valor en U a todos. En el caso de V colocaremos el valor 16 para el segundo tanque, 27 para el tercero y 45 para el último. El resultado de la operación es el siguiente:

Antes de realizar la animación final es importante ver el resto de los parámetros de Surface Controller Parameters, ya que además de mover un objeto en U y V podremos elegir el cómo se alinea este en la superficie. La opción No Alignment no alinea el objeto, mientras que Align to U hará que su pivote en X se alinee en torno a U y finalmente, Align to V hará que su pivote en X se alinee en V. Al activar cualquiera de las dos opciones anteriores podremos invertir el objeto activando la casilla Flip. Podemos ver aplicaciones de estas opciones en el ejemplo siguiente:

En el ejemplo, los tanques de color verde tienen seleccionada la opción Align to U. Notamos que el primero de estos no posee la opción Flip activada y por ello queda invertido. En cambio, los tanques de color café tienen activada la opción Align to V, pero el tanque inferior posee la opción Flip activada.

Para terminar el ejercicio, en todos los tanques seleccionamos la opción Align to V y aplicaremos la opción Flip. Sin embargo, notaremos que todos apuntan hacia fuera del terreno lo cual hará que al animarlos, se dirijan en modo “marcha atrás”:

Solucionaremos esto simplemente colocando el modo Local en Reference Coordinated System, luego activando Angle Snap, seleccionando cada tanque y finalmente girando cada uno en 180° mediante Select and Rotate, ya que Surface Constraint NO restringe la orientación de los objetos. Con esto realizado todos nuestros tanques ya apuntarán hacia el frente y por ello, podremos iniciar la animación definitiva.

Una vez realizada esta acción, ya podemos testear el movimiento de nuestros tanques simplemente modificando los valores de U, en la tabla Surface Controller Parameters. Notaremos que los tanques se mueven por la superficie de manera similar a un tanque real:

Para animarlos, seleccionamos cada tanque y establecemos Auto Key, nos vamos al cuadro 200 y colocamos el valor 0 en U. Con esto nuestro tanque se moverá por la superficie desde un extremo a otro de esta. Si lo queremos, podremos animar el parámetro en V pero en este caso debemos ser cuidadosos, ya que valores altos harán poco creíble el movimiento. Realizamos esto mismo en el resto de los tanques.

El renderizado final de toda la escena desde la cámara de detalle es el siguiente:

3) Path Constraint

Este Constraint ya posee su propio tutorial donde se explica a fondo su funcionamiento y opciones, y se puede ir a este haciendo click en este enlace.

4) Position Constraint

Este es un constraint que se encarga de restringir la posición de un objeto a la de otro. Esto es sumamente útil para generar animaciones en las que necesitemos que un objeto quede siempre en una misma posición independiente si este se está orientando en un ángulo diferente. El mejor ejemplo de esto son los pedales de una bicicleta ya que estos deben permanecer en posición horizontal mientras se pedalea para girar el plato. En este caso haremos otro ejercicio diferente, ya que animaremos una biela de ferrocarril para entender el funcionamiento del constraint. Por ello, abriremos el archivo llamado 3dsmax_animacion_positionconstraint.max y al hacerlo se nos mostrará lo siguiente:

Como podemos notar, el archivo representa a un sistema de ruedas de locomotora las cuales están vinculadas a dos Dummys, los cuales a su vez están conectados entre sí mediante Wire Parameters (que veremos en un siguiente tutorial). Por ello, si tomamos el Dummy llamado Dummy eje padre y lo rotamos en Y, podremos animar todas las ruedas a la vez tal como se muestra en la imagen:

Como notamos, las bielas no se vinculan a nada y por ello flotan en el aire. Para entender la diferencia entre un vínculo y el constraint, primeramente enlazaremos cada biela a su respectivo pivote y luego moveremos las ruedas para apreciar el efecto, tal como se aprecia en la siguiente secuencia:

Enlazando las bielas a su respectivo pivote en ambas ruedas mediante Select and Link.

Si giramos el Dummy eje padre notaremos que las bielas se rotan junto con los pivotes y por ende, la animación no es realista ya que necesitamos que estas siempre estén en posición horizontal mientras las ruedas giran. Resolveremos esto desvinculando las bielas de los pivotes y esta vez aplicaremos Position Constraint. Lo que haremos será colocarnos en el cuadro 0, seleccionar cualquier biela y luego aplicaremos el constraint de la siguiente manera: iremos a Animation >> Constraints y elegiremos Position Constraint. Notaremos que al aplicarlo, veremos una línea segmentada similar a cuando vinculamos los objetos. En este caso, elegiremos su pivote y realizamos Click para terminar de asignar el restrictor.

Cuando aplicamos el Constraint notaremos que la biela se mueve un poco hacia adentro y si bien esto no afecta en la animación final, lo mejor es dejarla en la posición original en la cual fue modelada. Para ello, iremos al Panel de animación y en el panel llamado Position Constraint podremos definir los parámetros del restrictor.

Al igual que en el caso de Path Constraint, podremos agregar más objetivos de posición o mejor dicho, la posición de los objetos que queremos a los que nuestra biela se restrinja y ajustar la influencia o peso de cada uno. Podremos agregarlos mediante Add Position Target y borrarlos mediante Delete Position Target. En el caso de nuestra biela, mantendremos su posición inicial activando la casilla Keep Initial Offset.

Si giramos el Dummy eje padre notaremos que la biela esta vez se anima correctamente ya que debido a la naturaleza de Position Constraint, esta siempre permanece en posición horizontal. Ahora todo es cosa de repetir la operación con la siguiente biela y luego podremos animar para finalizar el ejercicio.

Un aspecto curioso es que si aplicamos el Position Constraint de la biela al pivote de la segunda rueda en lugar de la inicial, la posición será respecto del pivote de la segunda rueda y se puede aplicar Keep Initial Offset. En este caso puntual, no hay problema al animarlo ya que el restrictor se aplica de igual manera que el anterior.

Ahora todo es cosa de animar el Dummy eje padre y efectuar la animación final (podemos animar el giro al cuadro 30 y luego usar la curva de animación para repetir la secuencia). El renderizado final de nuestra animación es el siguiente:

En la segunda parte del tutorial veremos los siguientes restrictores de animación, los cuales son: Link Constraint, LookAt Constraint y Orientation constraint.

Este es el final de este tutorial.

Print Friendly, PDF & Email

¿Qué tan útil fue este artículo? Haga click en una estrella para puntuarlo

Puntuación media 5 / 5. contador de votos: 1

5
(1)

Contenido relacionado

Deje un comentario en este artículo