Maxscript Lección 1
Maxscript hecho facil (o lo mas facil posible)

Para los que no lo conocen Maxscript es un lenguaje de programación propio de 3dsMax, que nos permite crear pequeños programas y que bien utilizados pueden potenciar notablemente las posibilidades del software.

En las siguientes líneas crearemos un script básico pero que puede ser la base de algo útil
 
1 - Primero que nada, una vez abierto el 3dsMax, crearemos de la manera tradicional unas cuantas esferas en diferentes lugares de la escena, estas nos servirán simplemente para el ejemplo ( es lo mismo si son cajas , teteras, etc) Luego seleccionemos algunas de ellas.
Una vez hecho lo anterior, vamos al Menu "Maxscript" y clickearemos en "New Script", esto abrirá una ventana 
practicamente igual al "Block de Notas" del propio Windows.

2 - En esta ventana es donde escribiremos nuestro script. Escribamos ahora por ejemplo:

total = selection.count 

Lo que acabamos de hacer es definir una "Variable". Una "Variable" es algo así como si le pusiéramos nombre a un valor x , este valor puede ser cualquiera que nosotros decidamos y no es fijo sino que lo podemos cambiar

En este caso la "Variable" total es igual a la cantidad de elementos que tengamos seleccionados en la escena.
Y esto es gracias al comando "selection" y a su propiedad "count" que nos da un numero que representa la 
cantidad de elementos que tenemos seleccionados.
Así , si tenemos seleccionados 4 objetos entonces será que total = 4
Para que sirve esto? Por ejemplo para que le apliquemos a cada objeto de una selección una nueva ubicación 
individualmente ,una nueva propiedad o modificador, controlador etc.. Vamos a ver como

3 - Escribamos debajo de la línea anterior:

For  i = 1 to total do
(

)

Lo que acabamos de escribir se llama "Loop" o "Bucle", y sirve para repetir una misma acción muchas veces.
Para que se entienda mejor lo que acabamos de escribir traducido , aproximadamente, seria algo como: 

"dado que i es igual a 1 hasta total hacer 
(

 )"

El script interpreta que debe repetir la acción (que vamos a escribir luego entre los paréntesis), contando de a uno por vez, desde i que es igual a 1 hasta llegar al valor de total, recordemos que total es el numero de objetos seleccionados. Si tenemos entonces 4 objetos seleccionados realizará esta acción 4 veces.

4 - En algún renglón entre los paréntesis del loop escribamos:

s = selection[i]

Aquí utilizamos el comando "selection" nuevamente, pero esta vez de una forma diferente.
En este caso el valor que se encuentre entre los corchetes es el número de "orden" de uno de los objetos seleccionados. 
Lo que acabamos de decirle al script es que s es igual al objeto seleccionado numero i recordemos que nuestro 
loop ira cambiando el valor
i ( que es 1 ) uno por uno hasta que alcance el valor de total ( por ejemplo 4 )

5 - Ahora escribiremos una acción para que este script haga efectivamente algo, debajo de la línea anterior, aun 
entre los paréntesis escribiremos

s.position = [100,100,100]

Ahora le estamos diciendo al script que la posicion de s ( que es nuestro objeto numero i de la selección) 
deberá estar en la posición 100 100 100 , cada 100 corresponde a un eje x , y , z respectivamente.

6 - Listo!! El script completo debe lucir así:



Para correr el script y ver si funciona debemos ir al Menu "File" / "Evaluate All" de la misma ventana. O presionar "Ctrl + E".
Si todo esta correcto los objetos que teníamos seleccionados deberían estar todos juntos en la ubicación 100,100,100 
Podemos ahora salvar el script con el nombre que nos guste para editarlo luego o correrlo directamente desde el Menú de la ventana de 3dsMax "Maxscript " / "Run Script" 

Variaciones sobre el mismo script:

Variacion 1:

Podemos escribir el script de la siguiente manera:

total = selection.count

For i = 1 to total do
(

a = random 1 100
b = random 1 100
c = random 1 100

s = selection[i]
s.position = [a,b,c]

)

Aqui incorporamos 3 Variables nuevas a , b , c , utilizamos el comando "random" que genera un numero al azar 
entre dos valores dados, en este ejemplo 1 , y 100.
Y los utilizamos para reemplazar los valores [100,100,100] del ejemplo anterior.
Esto producirá que cada vez que el loop comience nuevamente genere nuevos valores a , b , c ,  con lo que cambiará 
la posición del objeto que se encuentre elegido en ese momento.

Variacion 2:

Otra opción para utilizar un Loop sería:

For i = 1 to 100 do
(

caja = Box()

a = random 1 300
b = random 1 300
c = random 1 300

caja.position = [a,b,c]

)

Dejo que este para que investiguen solos, prueben reemplazar Box() por Sphere() O Teapot() , por ejemplo. Y variar los valores a ver que resultados obtienen.

Como verán las posibilidades aun para un script tan simple son bastantes.

Espero que les resulte interesante y útil
Saludos
Pablo Forsolloza

Home

Scripts

Lección 01

Lección 02