jueves, 19 de enero de 2012

Scripting en 3ds max

Ya soy un experto en 3d max, por qué debería aprender programación?


En realidad no todos los artistas llegan a necesitar hacer scripts, pero es una valiosa herramienta que os puede volver más productivo. Supongamos que necesitamos sacar renders de todos los personajes de un juego para una presentación,  la forma más fácil es crear o bajar un script que permita sacar renders en las cuatro vistas estándar de todos los modelos en una carpeta. Otros casos en los que puede ser de utilidad:

  • Automatizar animaciones sencillas que puedan mejorar la apariencia de un proyecto, como por ejemplo: una pared de ladrillos que se vaya construyendo así misma.
  • Realizar riggings complicados de manera automática.
  • Cambiar todos los materiales de una escena de v-ray a mental-ray o viceversa.
  • Mover los pivotes de muchos objetos a la vez.
  • Automatizar tareas repetitivas en animación, modelado, físicas, etc.
  • Crear GUIs y herramientas personalizadas.

Basta de parloteo,  en donde escribo los comandos?


Bueno, para crear un script se pueden usar varias ventanas dentro de 3D Max, la forma más sencilla es escribir un comando en la esquina inferior izquierda de la interfaz por defecto:


En la parte rosa se escribe un comando y se ve el resultado de este en el área blanca, por cierto, se puede usar como una calculadora improvisada. También se puede escribir un comando más útil como por ejemplo:

Box width:5 length:5 height:5

Esto creará una caja con los parámetros especificados en las coordenadas (0,0,0)

Hay alguna forma más fácil de averiguar cuales son los comandos?

El editor Listener Window permite la grabación de Macros, es decir que las acciones que se realicen mediante la interfaz gráfica se transcribirán como código en esta ventana.



Para activar la grabación de macros hay que abrir la Listener Window e ir al menú Macrorecorder  y activar la opción EnableAl activarlo se generaran comandos maxscript cuando se ejecuten acciones en la GUI, por ejemplo al crear varias primitivas se verá algo como esto:



La ventana tiene dos secciones, en el área rosa se ingresan los comandos y los resultados aparecen en el área blanca, si aparecen mensajes en rojo quiere decir que hubo un error en los comandos ingresados.


Un pequeño ejemplo: crear una caja y moverla


Si se va crear un script con varias líneas es recomendable usar el Editor Window en vez del Listener Window, se puede acceder a este haciendo clic derecho, sobre la zona de código y seleccionando Editor Window, una vez abierta esta ventana escribir los siguientes comandos:



La explicación del script anterior va a continuación:

  • Las líneas que comienzan con los caracteres "--" son llamados comentarios y no hacen nada, simplemente sirven para documentar el código.
  • Cuando se crea la caja se guarda una referencia a esta en una variable llamada b. Las variables son como cajones que guardan información hasta cuando uno la necesite.
  • La línea siguiente cambia la posición de la caja, para especificar la posición hay que especificar las coordenadas entre paréntesis cuadrados así [1, 2, 3], en donde las posiciones hacen referencia a las coordenadas x, y, z.
  • Algo parecido sucede con la escala, la cual también se especifica usando paréntesis cuadrados.
Pero eso lo puedo hacer sin scripting

El ejemplo anterior puede ser replicado fácilmente usando otras herramientas, pero que pasaría si no fuera una sola pirámide, sino cientos, y además tuvieran que ser animadas una después de otra, es un ejemplo un poco extremo, pero ilustra el punto.
Algún ejemplo más útil que me pueda convencer de que esto sirve para algo?

Supongamos que tenemos que crear una pirámide azteca algo abstracta, se puede usar el script siguiente para cumplir el propósito:

La explicación del código va así, el comando  for sirve para repetir los comandos que se ingresen entre los paréntesis, en este caso va a repetir la creación de una caja 10 veces, la variable i (o cualquiera que se especifique ) sirve para saber dentro del código en que paso va la repetición, en este caso sirve para variar el ancho de cada piso de la pirámide. 
Me gusto, ahora en donde donde continuo
Existen algunos conceptos fundamentales en programación como son las variables, las estructuras de control (if-else, while, for), con esos conceptos básicos se pueden crear herramientas interesantes.
Aunque para aprovechar el poder de los scripts no es necesario crearlos uno mismo, existen muchos desarrolladores que los crean y los obsequian a la comunidad sin esperar nada a cambio, uno de los sitios en donde se encuentra gran cantidad de scripts es:
  • ScriptSpot : es un gran repositorio de scripts para 3ds max, se encuentra de todo.
  • Cg Tuts (en inglés): en este se encuentran algunos tutoriales interesantes de maxscript, MEL (Maya embedded language) y Python