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"
|
|
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.
|