|
| Very introductory Maxscript tutorial 3 |
mrgrotey |
--page recreated on behalf of Dub.--
For some reason this page (the original with the same name) no longer exists, so I thought I'd recreate if from the .pdf version.
Dub, can you link to this page now on your index page? Cheers.
-----------------------------------------------------------
Part 3– Making stuff random This tutorial should take around 10 minutes to complete or this tut, we'll have a look at the random function, object positioning and also do some more loops for practice. For this tut, we'll have a look at the random function, object positioning and also do some more loops for practice. Intro Here is our hypothetical scenario. We want to build a fence across a field. We have made an array of tall boxes - 20 of them - for fence posts unfortunately they look really uniform and CG like. What to do? Maxscript to the rescue.
The Random Function Open the listener and type in the following command: random 1.0 35.0 Maxscript will return a float number between 1 and 35. Notice how putting .0 after the number made maxscript realise that we wanted it to generate floats and not integers. Now we'll make a variable with a random integer between 1 and 6 diceThrow = random 1 6 Now whenever we access the diceThrow variable we made, it will contain the number that it randomly chose when we first created the variable. Randomizing post heights Create an array of about 20 boxes. They should have their pivot on the ground and be 10 x 10 by 100 high. Make the spacing about 150 units. I'm sure that you have a rough idea in your head by now of how we will go about this. Here is the code: for obj in $ do ( randHeight = random 90.0 110.0 obj.height = randHeight ) We have the same loop as last time. For all the objects in the selection, execute the following code: randHeight = random 90.0 110.0 - Make a variable with a random float between 90 and 110 in it. obj.height = randHeight - Assign that variable to the objects height. Select all your fencepost boxes and run the code. Now all the posts should have slightly different heights! Position Create a sphere in the scene and select it. The way Maxscript accesses the position of objects is with the .position (or .pos) property. If you type: $.pos Maxscript should return: [12.3434,34.6446,0] or similar. You exact results will depend on where you made the sphere in your scene. Point 3 Data type This result is a special type of data type called a Point3 data type. It contains X Y and Z values always in that order. If we assign one to a variable: ourPoint3variable = [5,4,1] and then type this: ourPoint3variable.y Max will return 4 which is the Y component of our Point3. If we just type: ourPoint3variable Maxscript will return all the values - [5,4,1] Position (and many other things) in 3D often needs 3 values, X, Y and Z so a Point3 is a very useful data type. Moving Objects
Back to setting an objects position. We could type the following: $.pos = [0,0,0] that will move our selected sphere to the center of the world. We are giving the sphere explicit co- ordinates to go to. What if we want to move it relative to where it is now? maxscript provides a move function to do just that.
move $ [3,2,0] That is simply saying "Move the selected object +3 units in X, +2 units in Y and 0 units in Z" type: $.pos Now maxscript will return the position as [3,2,0] Execute the move line again: move $ [3,2,0] Then ask the position: $.pos You'll see that it is now at [6,4,0] Delete the sphere. (if you want to be fancy, type: delete $) Now we want to randomise the position of all the posts slightly. Randomizing Position Select all the posts again. Here is the code we are going to use. for obj in $ do ( randX = random -5.0 5.0 randY = random -5.0 5.0 move obj [randX,randY,0] ) Lets step through it. For each object in our current selection do: Create a random float between -5 and 5 and assign it to the variable randX Create a random float between -5 and 5 and assign it to the variable randY move the current object according to the following Point3. Where it says randX in the point3, maxscript will substitute in the random number it generated earlier. The same goes for the randY. we don't want the posts to move vertically so we have just put in a 0. Highlight the code and run it.
Conclusion We now have fence posts that vary randomly in height and x,y position. In the next tut, we'll also randomize their rotation so they all lean in slightly different directions. Save the max file as we'll use the same one next time.
read 6851 times 2/11/2009 11:53:50 AM (last edit: 2/11/2009 12:00:39 PM)
|
Dub. |
Done. Thanks Mr G
read 6806 times 2/11/2009 1:22:44 PM (last edit: 2/11/2009 1:22:58 PM)
|
|
|