Creating a Shader

1.1 Creating an Arnold Shader

See Creating a Simple Plugin for how to create a simple Arnold shader.

To make this shader available in the Maya user interface, application specific metadata must be added to it.

1.2 Using the shader in Maya

1.2.1 Adding Maya Metadata to your shader with a metadata file

The preferred way to add metadata is to create a metadata file that will be automatically used when the shader is loaded. This way, it will be easier to make modifications without having to recompile the shader. This will also keep the Maya specific metadata in the MtoA folders, rather than in the shaders themselves (which you might want to re-use outside Maya). 

This is shown in the following code:


If you do not give the shader a, the shader is automatically assigned a name that is its Arnold node name prefixed by ai. In this case, the name would be aiSimple. 

1.2.2 Choosing a Maya ID for the shader

From Autodesk help:

For plug-ins that will forever be internal to your site use the constructor that takes a single unsigned int parameter. The numeric range 0 - 0x7ffff (524288 ids) has been reserved for such plug-ins. 
The example plug-ins provided with Maya in the plug-in development kit will use ids in the range 0x80000 - 0xfffff (524288 ids). If you customize one of these example plug-ins, you should change the id to avoid future conflicts.
Plug-ins that are intended to be shared between sites will need to have a globally unique id. The Autodesk Developer Network (ADN) will provide such id's in blocks of 256. You will be assigned one or more 24-bit prefixes. Once this has been obtained, use the MTypeId constructor that takes two unsigned int parameters. The prefix goes in the first parameter, and you are responsible for managing the allocation of the 256 ids that go into the second parameter. For this text, we will use IDs beginning from 0x70000, but feel free to use the IDs that could suit you better. Also, if you are developing a quality shader that you would like to share with the MtoA community, feel free to ask us for an ID granted by Autodesk to MtoA.

1.2.3 Creating the Maya interface for your shader

If you also want to create a Maya interface for this shader, create the following file:

In the addControl method, the first argument is the shader attribute name or the metadata of that attribute. So in this case the parameter could be: constantColor or color.
Note that the name of the defined class should be: AE<shader_name>Template and the file name <shader_name> where <shader_name> is the value of the metadata of the shader.

1.2.4 Where to place your files

So that your shader works correctly in Maya, it is very important that you name and place the files in the correct locations. You should have three files:

Compiled Shader

This is the shader you compiled, and it will be responsible for the shader behavior. In this example, it is simpleShader.dll in Windows. You can copy it to: %MTOA_PATH%\shaders\ or to any other folder that is included in the environment variable %ARNOLD_PLUGIN_PATH%

Metadata File

This is the file where all the metadata information is located. This will add information that Maya needs about the shader. The name of this file must be the same as the compiled file, but with a .mtd extension. In this example, the file name is simpleShader.mtd . This file will have to be copied to the same folder where the compiled shader is located. 

Template File 

This is the file where the Maya Template for this shader is defined. The name of this file and the class name inside it has to follow the rules from the previous section. In this example it is This file can be copied to this folder: %MTOA PATH%\scripts\mtoa\ui\ae\ or to any other folder that is included in the environment variable %MTOA_TEMPLATES_PATH% 

Now, with everything in its correct place, when you use the aiSimple shader in Maya, you will be able to see this Attribute Editor for it.

Figure 3: Simple Template

1.2.5 Adding Maya Metadata to your shader in its source code (Advanced)

It is also possible, though not recommended, to place Maya metadata in the code, instead of using a metadata file. The following example code shows the syntax for this, but remember that a separate metadata file is more flexible. 
A good use for this method could be to add needed metadata that is not specific to any plugin.


  • No labels