1 -- REFERENCIAS
Lo primero que hay que hacer, siempre, es buscar información, y aquí Wikipedia nos va a ser muy útil:
http://en.wikipedia.org/wiki/B%C3%A9zier_curve

Es decir, crearemos un punto P cuya trayectoria esté determinada por la posición de P0, P1, P2 y P3. Si os fijáis y hacemos un símil con las curvas de MAX, P0 y P3 son los vértices de la curva (knots) y P1 y P2, las tangentes.
Antes de continuar, he de deciros que no hace falta ser un matemático experimentado para poder usar estos comportamientos en nuestros 'rigs'. En muchas ocasiones, nos bastan saber dos cosas: el efecto que estamos buscando recrear y cómo interpretarlo e implementarlo en 3dsMAX.
Después de escrutar un rato la página, me doy cuenta de que la curva de arriba es de tipo 'cubic', así que busco un poco más y... ¡eureka! La fórmula de la trayectoria de una curva Bézier de tipo cúbico es ésta:

Parece una fórmula muy compleja. Pero ya vemos que voy a necesitar la posición de 4 puntos. ¿Pero qué es t? La respuesta la tenemos un poco más abajo, viendo estos gráficos:


Deducimos, pues, que t es una variable que va de 0 a 1 (como indica la última parte de la fórmula), y que determina la posición del punto P a lo largo de toda la trayectoria. Cuando t = 0, su posición será la misma que P0, y cuando t = 1, su posición coincidirá con P3. Y en los valores intermedios, ese punto P recorrerá la trayectoria marcada por la fórmula anterior.
¿Y qué podemos usar nosotros para controlar esa variable t?
2 -- IMPLEMENTACIÓN
Ya tenemos casi todos nuestros ingredientes. ¡Ahora sólo falta ponerse a cocinar! Dije que necesitábamos 4 puntos, y uno más que será el que recorra esa trayectoria. Los creamos, intentando reproducir el esquema del primer gráfico. Nombramos los puntos siguiendo también el esquema.
Ahora, elegimos un controlador 'Position Script' para la posición del punto P. Y vamos introduciendo las distintas variables en el apartado de la izquierda. Es importante que si en estas variables vamos a hacer referencia a las posiciones de los objetos, usemos 'Assign Track' en lugar de 'Assign Controller', ya que el primero lee el valor de la posición mientras que el segundo apunta hacia el controlador (que no es un valor).
También crearemos una variable t, pero como esa letra ya está reservada en MAX, usaremos otra letra, por ejemplo, u.
La fórmula 'adaptada' es ésta:
Código: Seleccionar todo
(1-u)^3 * p0 + 3 * (1-u)^2 * u * p1 + 3*(1-u) * u^2 * p2 + u^3 * p3
Código: Seleccionar todo
p0 = $p0.transform.controller.position
p1 = $p1.transform.controller.position
p2 = $p2.transform.controller.position
p3 = $p3.transform.controller.position
3 -- RESULTADO
Aquí debajo os dejo la escena resultante de todo esto. La esfera roja está animada del fotograma 0 al 30, y su trayectoria está visible, de manera que podáis apreciar mejor cómo al manipular los puntos o el 'spinner', la posición de ésta cambia de acuerdo a su fórmula.
Espero que esto os sirva para perder el miedo a los 'script controllers'... ¡porque son vuestros amigos!
