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 apunte veremos todos los Constraints de animación a excepción de Path Constraint, ya que este último es estudiado en su apunte respectivo.
Este apunte utiliza un archivo de base, el cual puede ser descargado desde el siguiente vínculo (en formato MAX 2021):
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:
- Attachment Constraint: Asocia la posición de un objeto a la cara de otro.
- Surface Constraint: Limita la posición de una superficie 2D a la superficie de otro elemento 3D.
- Path constraint: Limita el movimiento de un objeto a lo largo de un recorrido.
- Position constraint: Limita la posición de un objeto a la posición de otro.
- Link Constraint: Genera uno o más vinculos entre el objeto que tiene la restricción y otros.
- LookAt constraint: Limita la orientación de un objeto a la posición de otro.
- 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 apunte estudiaremos el restrictor llamado Position Constraint.
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:
Como pudimos apreciar, los restrictores son fundamentales para lograr animaciones creíbles y realistas puesto que el principio de estos es justamente emular la realidad ya sea mediante la modificación de la jerarquía, posición, orientación o escala de uno o más objetos. El o los constraints a aplicar a los objetos 3D dependerán exclusivamente del tipo de animación que deseemos realizar en 3DSMAX.