Maxscript, speed up your workflow

Every day I get asked if a can whip up a script for this or a script that etc. More often than not I just walk over to the artist machine and do a very simple type in, maybe a few lines at most and that will solve their problem. Now not that I mind walking to someones desk to help them I thought I might take a second to discuss some ideas about manipulating large numbers of objects quickly, effectively and working on specific object types.  I really believe that scripting can empower artists, many artists shy away from scripting especially when there sitting next to a TD but a simple understanding of some simple scripting ideas can speed up an artists ability to work.

I do not intend this to be a introduction to scripting. I just want to show you how you can manipulate objects quickly using simple loops, basic conditional statements and the max script listener.

For Loops

Loops are how we iterate over objects, numbers, arrays etc. I found the best explanation of it in the Maxscript help file, “The for loop iterates through a range of numbers, time values, or a sequenced collection of values, such as an array or object set.”

In this example we will be iterating over materials, a specific type of material. There are a number of way one can accomplish this you could simple iterate through sceneMaterials and check to see if each material is the correct class that you want, this however would be slow and unnecessary. Instead we are going to use the getClassInstances function that will return an array of objects of a given type. For exmaple:

getClassInstances Sphere -- This would return an array of every instance of a sphere in the scene.
getClassInstances VrayMtl -- This will return an array of every Vray Material in the scene.

It is very simple to use the array returned by getClassInstances() in a loop.
for i in (getClassInstances VrayMtl) do(print i) --This will print every Vray Material in the scene

So now that we can iterate a given type of object or “class” we really want to be able to do something with them. An important concept to understand is that when we loop through the returned array each item in the array as we move through it is stored in the variable ”i”. Consider the following code:

for i in (getClassInstances Sphere) do(i.radius = 100)

That statement will set the radius of every sphere to equal 100. It does this by first collecting them using the getClassInstances() function and “moving” the variable ”i” through the array where “i” is used to access the  radius property and set to 100. We could also do something a bit more interesting like set the radius of every sphere to be random. We will use the random function in this example to give us a random integer.
for i in (getClassInstances Sphere) do(i.radius = (random 25 100))
Now each sphere will have a random radius between the 25 and 100.

Unless you really wanted to create Spheres with a random radius lets move on and learn how to do something useful.

The Maxscript Listener

Using the listener you are able to record your “actions” so to speak. This is a very easy way to query a property that you may wish to manipulate in a script. For example you might want to turn off trace reflections on all V-Ray Materials. To do this open the max script listener (Maxscript -> Maxscript Listener or hit F11). Once the listener is open go to the Macro Reorder menu and enable the macro recorder.

Open Maxscript Listener Screen Capture

Select the Maxscript listener from the menu or hit "F11"

Maxscript Listener Enabled Screen Shot

Enable the macro recorder from the MacroRecorder menu in the Listener

If you now go and open the Material editor select a V-Ray Material and Turn off Trace reflections. Imediately you should notice that Listener updating, in this example it should read something like:

meditMaterials[1].option_traceReflection = off

In the above piece of code where are interested in everything after the “.”, meditMaterials provides access to the materials in the editor (another article for that).

Now using what we learnt in the section covering loops we can now go ahead an change every V-Ray material in the scene:for i in (getClassInstances VrayMtl) do(i.option_traceReflection = false)

How easy was that? As you can see simple type in expressions or loops can save you a great deal of time. Just to recap we very quickly went over using loops with the getClassInstances() function and using the listener to ascertain what property’s we need to change. If you have any question then please just post in the comments I will do my get back to ASAP. Also remember the maxscript help file is your friend it is a fantastic help, if you are having trouble of some of the more basic concepts I suggest you start there.

I hope that shed some light on some very simple scripts that you might be able to use. If you have an idea for a tutorial use this form, I am more than happy to tackle any challenges you have in 3d or 2d.

Cheers,

Dave

Comments
18 Responses to “Maxscript, speed up your workflow”
  1. Chris says:

    Hi.

    thanks for such a great website, like it alot.

    May I ask a cheeky question, do you know how or where I can find a script that allows you to select objects in your scene,
    and it copys the name of your object and pastes it onto your Material name.
    So its an automatic material namer.

    I have tried several times, but always fail, I am not a scripter and are obviously making simple scripting mistakes.

    thanks for any help you can give

  2. Dave says:

    This would not be hard to script. I will whip something up and post it.

    Cheers,
    Dave

  3. AHosking says:

    Simple!
    for i in geometry do(i.material.name = i.name)

  4. Theda says:

    Quality articles is the secret to attract the visitors to pay a visit the site, that’s what this site is
    providing.

    Also visit my weblog – web page (Theda)

  5. If you desire to take much from this paragraph then you have
    to apply such techniques to your won blog.

    Also visit my blog best carry on luggage

  6. I truly love your website.. Great colors & theme.
    Did you make this site yourself? Please reply back as I’m attempting
    to create my very own site and would love to find out where you got this from
    or what the theme is called. Thanks!

    Look at my weblog :: fat loss factor

  7. Hello there! Would you mind if I share your blog with my zynga group?

    There’s a lot of people that I think would really enjoy your content.
    Please let me know. Cheers

  8. A common place that most people look is in the data entry field.
    Ad submission jobs are one of the most lucrative jobs online today
    and anyone from just about any country can do them successfully.
    There is no need to prepare a resume or to have to market yourself to several hundreds of companies just to get a low paying job.

  9. I am really impressed with your writing skills as well as
    with the layout on your blog. Is this a paid
    theme or did you customize it yourself? Either way keep up the nice
    quality writing, it’s rare to see a nice blog like this one today.

  10. Hi there, I read your blogs on a regular basis.
    Your writing style is awesome, kerep doing wha you’re doing!

    my blog :: Lace Front Tape

  11. Russ says:

    Hey There. I found your blog using msn. This is a very well writfen article.
    I’ll be sure to bookmark it and come back to read more of your useful
    info. Thanks for the post. I will definitely comeback.

  12. Organo Gold says:

    This is the right site for anybody who hopes to understand this
    topic. You know so much its almost hard to argue with you (not that I
    personally would want to…HaHa). You definitely put a fresh spin
    on a topic that has been discussed for decades.
    Wonderful stuff, just excellent!

    my web-site … Organo Gold

  13. obviously like your web site however you need to
    take a look at the spelling on several of your posts.
    Several of them are rife with spelling issues and I in finding it very bothersome to tell the truth nevertheless
    I will surely come again again.

  14. This is my first time go to see at here and i am really impressed to read all at one place.

    Here is my site; best skateboard decks

  15. Very rapidly this site will be famous amid all blogging and site-building users, due to it’s good posts

    Here is my web blog – best binoculars for the money

  16. Fastidious answers in return of this matter with genuine arguments and explaining
    all on the topic of that.

    Here is my page best car amplifier

Trackbacks
Check out what others are saying...
  1. [...] the rest here: Maxscript, speed up your workflow : Dave and Goliath – Sydney … Kategorien3D Animation Tags: 3D Animation, animation, goliath, leave, projects, sydney, [...]

  2. pligg.com says:

    Maxscript, speed up your workflow : Dave and Goliath – Sydney based 3d Animation, Visual Effects and Visualization…

    Maxscript, speed up your workflow : Dave and Goliath…



Leave A Comment