Титульная страница
ISO 9000 ISO 14000
GMP Consulting
 
Mastering 3D Studio MAX R3

Previous Table of Contents Next


Each material has a series of properties, which can be listed by the SHOWPROPERTIES command. For instance, type m = standardmaterial(). Now use showproperties m. You will see all properties of this material.


NOTE You need to have the material assigned to a variable before using SHOWPROPERTIES. showproperties standardmaterial() does not work.

Defining Colors

The first thing you need to adjust in a material is the color. Colors in MAXScript are defined using a point3 variable just like position or scale.

You can define any color in any material using material.color = [red,green, blue]. The property will vary depending on which color will be defined. Using the example above, you’d set the diffuse color to red with m.diffusecolor = [255,0,0].

Defining Shaders

In MAX, materials can be made using different shaders. Each shader will define a series of properties to the material.

You can define the shader using two different properties: .shadertype, which will require an index number of the shader; or .shaderbyname, which will require a string with the name of the shader. Figures 4.5 and 4.6 show examples of two different shaders.


FIGURE 14.5  Anisotropic shader options


TIP As soon as you change a material shader, the properties of that material will also change. For instance, if the shader is Strauss, you will not be able to set the .ambientcolor property, because ambient color does not exist in that shader.

Using the same example you used above, let’s set a different shader and some properties. Type m.shaderbyname = “Strauss”.


FIGURE 14.6  Oren-Nayar-Blinn shader options

Working with Maps in Materials

Besides working with materials, you also need to work with maps. MAXScript can access any information within any map in MAX. Let’s look at some maps and how can you work with them in the materials.

Texture Maps

The first, and possibly the most used, map you will see is the bitmap. To create a bitmap you simply use variable = bitmaptexture(). Since it works the same way as .standardmaterial(), you can assign it directly to the material, for instance

 m = standardmaterial()
 m.diffusemap = bitmaptexture()

Using SHOWPROPERTIES you can list all options in a bitmap. The most important one, and possibly the most used one, is .filename, which allows you to assign a filename to the bitmap.


WARNING Remember to use \\ instead of a single \ in a string to specify the bitmap file path.

Using SELECTSAVEBITMAP to Script User Interaction

It’s very difficult to memorize filenames and paths. Fortunately, you can use a MAX-Script command, SELECTSAVEBITMAP, that will ask the user to select a file and will assign the complete path to a variable. When executed, this command displays a dialog box asking the user to select a bitmap to be saved (Figure 14.7).


FIGURE 14.7  Save Bitmap File dialog box

You can use it to assign a bitmap file directly to a texture map, like this:

 bmp = bitmaptexture()
 bmp.filename = selectsavebitmap()

Showing a Map in a Viewport

It would be nice if the bitmap had an option to show the map in the viewport, but it works differently, because one material can’t have more than one map displayed in the viewport. Enabling one map automatically disables the other.

To enable a map in viewport, you should use SHOWTEXTUREMAP, which will require you to specify the material and the map that will be shown. Using the examples above, you would have

 showtexturemap m bmp on

Material Editor

In MAX, all the work done with materials happens in the Material Editor. In MAXScript, you usually can use the Material Editor to place one material as a way to show it to the user. MAXScript has several commands to read or display a material in any of the Material Editor slots.

Reading Materials

You can read one material from any of the 24 slots of the Material Editor. This can be done using GETMEDITMATERIAL. You also can use MEDITMATERIALS[index], where index will represent the number of the slot you want to access.

For instance, if you want to assign the material in the first slot to the selected objects, you can use either of these lines:

 $.material = meditmaterials[1]
 $.material = getmeditmaterial 1

Displaying Materials in the Material Editor

To display any material in the Material Editor, use the opposite process from reading a material. You can use either SETMEDITMATERIAL or MEDITMATERIAL[index]. For instance, if you want to set the first material editor’s slot with the material of the selected object, you can use either of these lines:

 meditmaterials[1] = $.material
 setmeditmaterial 1 $.material

Material Libraries

MAXScript can access the current material library or any other material library as an array of materials. CURRENTMATERIALLIBRARY returns all materials in the current library indexed as an array.

Since it is an array, you can use append to add materials to the library. You can also use

 currentmateriallibrary.count

to know how many materials are in the library, and

 currentmateriallibrary[index]

to read any material from the library.

You can use LOADMATERIALLIBRARY and SAVEMATERIALLIBRARY to load and save the current material library. These two commands will require you to specify a filename string to load or save the file.


WARNING If the Material/Map Browser is opened, the material library is not updated automatically. You must either close and re-open, or choose another filter and re-select the material library.

If you do not know the name and path of the material library, you can use FILE-OPENMATLIB, FILESAVEMATLIB, and FILESAVEASMATLIB to display a dialog box where you can choose the material library file to open or save, as shown in Figure 14.8.


FIGURE 14.8  Open Material Library dialog box

Other Materials and Maps

MAXScript allows you to create and manipulate all materials and maps. Each one has different options, and different sub-materials or maps. For instance, the Multi/ Sub-Object material is created in MAXScript using MULTIMATERIAL, and since it is made of sub-materials, you can access each of them as an array index, using multimaterial[index].

Some maps, like composite, mix, and mask, also require sub-maps and work either using an array variable, or through the different map options.


TIP You can use the Macro Recorder to record changes and parameters in different materials. These recorded lines can be copied and pasted in any script, so you won’t have to memorize lots of commands and their different options.


Previous Table of Contents Next

© 2000, Frol (selection, edition, publication)

 
Rambler's Top100