Friday, July 31, 2009

Materials Shift

I just upload another of my scripts online.

MatShift is a thin pack of ops for shifting materials between Scene, Material Editor slots and current Library. Combined them with existing Max's built-in ops into MEditor and MBrowser are enough for this kind of tasks. Even "Reset Material Editor Slots" exist into MEditor > Utilities. It slightly change materials names to "Standard_1" and so on. With my ops I restore also materials names like "01 - Default" ... that I prefer. Enjoy the script as is or feel free to modify it.

  • the script tested on 3ds Max 2009
  • if you prefer to install the script as macros - just read 1st comment line inside the code

Get the script (.MS) from here

Thursday, July 30, 2009

3D modeling with a multi-touch display prototype

A preview demonstration of modeling in 3D using a SpaceClaim's prototype multi-touch user interface that will be added to SpaceClaim this fall.

Take a look at the video on You Tube and read commentary about,
or watch it here:

Wednesday, July 29, 2009

Animated Tree

Animated Tree is an demo scene file (.max) by piXelelement.

Animating tree simulating the action of smooth breeze using Physique and Noise controllers. Get .MAX file from here.

Tuesday, July 28, 2009

G-Buffer ID

There is another maxscript from me with 4 assistant operations for effects tasks which required G-Buffer ID's. All of them works on selection or all scene objects and support Undo. Plus Load/Save to log file to backup and restore your G-Buffer ID's settings. Save also works on selected or all scene objects. Only Load ops not support Undo. Get MAXScript form here and enjoy! :)

Sunday, July 26, 2009

Using expressions

Summary: This tutorial shows how to use Expression and Script Controllers to control flare intensity dependent on distance from camera.

Also packed as PDF and well explained, this tutorial is a good introduction to Script Controllers (Expressions and Float Scripts).

Get it from

Saturday, July 25, 2009

Attach by Material Updated

Today ask me to update the script to works with other geometry objects, not only with Editable Meshes. Well, why not? :) So, in this heat here (about 40 C (104 F)), I did this feature :)

Must to say, previous version is slightly faster (you know, no conversion involved), so I just leave it online in ScriptSpot. Previous version 1.0 is here and the new one v.1.1 is here.


Friday, July 24, 2009

MAXScript snippets

I accidentally hit a collection of interesting MAXScript snippets into IllusionCatalyst web site. Some codes there required a little bit optimization but the collection will be useful for reference (primarily for advanced maxscripters).

Attach Mesh by Material

Well, follow request in ScriptSpot forum - quote:
Is there a script which convert meshes in a scene to a single mesh based on their material. For example I have 100 meshes with 5 materials assigned, as a result I should have 5 meshes.

I am not sure if there are similar so I wrote a script from scratch and
upload it in ScriptSpot. The script features:

  • Support Multi/Sub-Object materials (keeps ID, condense materials)
  • Ready for install as macros or use as is (Read notes inside the code)
  • Tested on 3ds Max 2009 (but should works in most of previous verions)

For more see the forum topic or Donload the script from here.

Wednesday, July 22, 2009

Wired steering wheel

This video tutorial is rather pretentious description and very low concentration. Here describes how to rig front wheels turn to the steering wheel (or dummy) using wired parameters. Wiring is a nice but if we use it we cant apply other constraint to your weels, so this method is not a good idea, right? Mach better in this case will be just to share weels rotation control.

Here's what I mean (It will take only seconds) - In TrackView copy Z_rotation controller of the left (or right) weel and paste as Instance to the other front weel. And if you want to affect also steering wheel, just do the same for it - paste Z_rotation controller. That's all. Also rotation proportion of the steering wheel and front weels can be controlled by scripted expression by multipliable rotation with some value, to say pi (3.14).

Here is a test from scratch without wiring or scripts, just instances Z_rotation only used:

I hope this help :)

Tuesday, July 21, 2009

3DLuvr tutorials

Another CG site that which offers 3ds Max tutorials I found recently is . Seems that the site is not update in years. Also I would say that the tutorials there are not very clear and well covered, but here a link to 3DLuvr to check and decide for themselves.

Sunday, July 19, 2009

Swap background color

As people say, who look for a occupation he find it. So today I tried to help Scriptspot's user for script wanted, and I hope to be able to help him. So I wrote off simple utility to set background color for ViewPort and/or Renderer.

Saturday, July 18, 2009

3ds Max video tutorials is another source site for CG video tutorials, including for 3ds Max.

Texturing for games

Five leading artists provide tips for creating quality textures for modern games.
Read article at 3D World magazine.

Friday, July 17, 2009

Merge materials

Marco Brunetta posted a script by user request at forum that merge array of material (.mat) files into one .mat file. I'm not tested it but the code look well. It use dotNetObject "System.Windows.Forms.OpenFileDialog" instead of standard Max's OpenFileDialog that allow multiple files to be selected.

(Here is the script file)

Thursday, July 16, 2009

Measuring conversions

3ds Max's help quote:
If you do need to change the system unit, change it before you create or import geometry. Do not change the system unit in an existing scene.

Taking into consideration the above quote, what to do when we have to get a value in a different unit? For example, to calculate object speed in kilometers per hour. Max's default unit = 1.0 inches (1 inches = 2.54 centimeters). Would have been nice to have handy in Max similar measure calculator, but for now I use sites like , Google also have nice convertor, for example just enter in Google search: "1 km in inches" and will return result: "1 kilometer = 39 370.0787 inches".

Make a boat with Loft

Modeling tutorial by Dzordz.

Tuesday, July 14, 2009

Particles to Splines

particles2splines is a maxscript by Andrei Kletskov posted today at ScriptSpot.
List of all Kletskov's scripts are available on his web site.
Most of them looks like uncompleted and need debugging but its a nice starting-point.

Saturday, July 11, 2009

Arda Kutlu scripts

Arda Kutlu offer a bunch of maxscripts for free at him web site.
Some of them are realy cool. There is the link to read more.

Keyboard Override

Some usual Keyboard Override discomfiture discussed here.

Thursday, July 9, 2009

Set Random Camera

"Set Random Camera" is a scripted utility that does exactly what its title says.
You can use the button or keyboard Control key to set random camera active.
It monitors the cameras Deleted but if you create a new camera and want to include it
in random cycles, instead restart utility, just press update button.

Wednesday, July 8, 2009

Car Rigging

I found some links about car rigging in ScriptSpot forum
but i'm not tested 'em to know if they rocks. There is the links:

Monday, July 6, 2009

Enhancement of poly extrude

Interesting question about poly extrude technique was posted in ScriptSpot forum (read more here), how to enrich extrusion. Now it works by polygon, by group and by normals. But will be nice to have scale mod. I post some idea, which similar to step by step tutor, but it's far from the final solve. Here need someone to spend more time to resolve the problem by script.

Snapshot As EPoly

I post at this snippet code to snapshot as Editable Poly selected and/or other scene object(s) without lost/changing your current selection. The script is ready for use as is or just to put into function, or if you prefer installed scripts then download macroscript (.mcr) too. The script not needed any UI 'cause it just run query dialog box if something selected and if confirm by hit Yes it snapshot selected as Editable Poly, and if you hit No (or nothing selected), it run SelectByName dialog to chose another object(s).

There is MAXScript ( and macroScript (snapshotAsEPoly.mcr).

If you need some help about script installation in 3ds Max, just read this topic or spend a mins to read about in Max help Reference and you've got the freedom to edit and menage macros at any time :) I personally dislike macros for several reasons, else they do not bite yet :)

Saturday, July 4, 2009

Animating text in a Text Shape

In official max help reference shipped with 3dsmax exist nice "How to" topic. Search for "MAXScript FAQ > How do I change the text in a Text Shape dynamically?".

Normally, the text of a Text shape is not animatable. The resulting mesh will be
evaluated once at the beginning of the rendering and will not change as it is
considered static (not changing over time). A workaround is to assign a script
controller to a property of the text shape which will do two things: tell the
renderer that the text shape is animated and thus requires reevaluation on each frame, and set the actual text in the text property.

Changing the text object's text property in anything other than a controller applied to the text object can lead to a renderer crash!

Also there is a good 'how to' example with dependsOn expression:

b=box name:"ControlBox" wirecolor:blue
t=text name:"ControlledText" wirecolor:red
scrpt="dependsOn $'""';$'""'.text=$'""'.height as string\n0"
animate on at time 100 b.height*=2
max tool zoomextents all

As you see, there assigned script to kerning controller of the text shape. By right click over text shape and choose Dope Sheet open Track View and double click over Kerning to see script controller dialog. There you can add/edit expressions. Also have options/buttons to Save, Load, Debug, Evaluete, and this is more friendly environment for beginner scripters. On the left side are variable options. You can create new or use existing (there 4 already defined) variables.

And there is some simple example from me, that use default F variable to make a frame counter animation:

-- check if exist and create new shape if not
if not isValidNode $Text01 then (t = text name:"Text01" wirecolor:yellow)
-- make renderable end change size to 10
t.baseobject.renderable = true;t.size = 10
-- assign script controller to object kerning
-- define expression and assign it
expr = "$Text01.text=F as string\n0"
t.kerning.controller.script = expr
playAnimation() -- test result

P.S. - final note about 0 (zero) in the end of expression.
It's used to define the end of script.

Wednesday, July 1, 2009

Live Ball

I wrote simple scripted animation just for fun.
There is the MAXScript and finnal rendered result: