In the render tree, you can hook up shaders together and set their values to create an effect. Once you have things set up as you like, you can then create a compound that contains all of these shaders, just as you can with nodes in the ICE tree.
Shader compounds allow you to create an effect and save it in one container, then use it in different scenes or share it with other users. You can expose only the parameters of each shader that you want others to see and adjust.
You can create a shader compound containing any type of shader. The compound can contain many shaders connected together, or just one shader, if you like. You could put a single shader into a compound and then expose only a handful of necessary parameters that often need to be set. This is useful if you have a very large shader, such as the Particle Volume Cloud shader.
There are some shader compounds available in the render tree (for ICE particles) that you can use and examine to get started—see ICE Particle Shader Compounds [ICE] for more information. Then follow the steps below to create your own shader compound.
The next section shows you briefly how to create a shader compound, which is similar to the process for creating ICE compounds. For more details and information about ICE compounds, see Building ICE Compounds [ICE]. For the differences between shader compounds and ICE compounds, see Differences Between Shader Compounds and ICE Compounds.

Overview: Creating a Shader Compound
To create a shader compound
1. In the render tree, select all the shader nodes you want to save in the compound.
To keep the compound generic, you should leave out the Material node so that you can apply this compound to any object.

2. From the render tree toolbar, choose Compounds > Create Shader Compound.
The selected shader nodes disappear from view, and you’re left with a generic compound named ShaderCompound, which contains all the shaders that just disappeared.
3. Click the little e at the upper-left of your new compound to edit it. This opens up the compound so that you can start exposing ports for it.

You now want to expose the different ports from the shaders to make only those parameters editable.
The blue bar on the left shows where you will expose shader ports for your compound. Before you start exposing ports, you need to decide on what you want other people to be able to change in the compound.

4. To include a port in the bar, click the black circle beside Expose Input and drag it to the port you want to expose. The port is then included on the bar. Keep doing this for every port you want to expose.
5. You can rename this exposed port by right-clicking on it and choosing Properties, then entering new names:
- The Display Name is the one that is displayed in the compound node in the render tree and in the compound’s property editor. If this is blank, then the display name is the same as the name.
- The Name is the one that is displayed in the blue area on the left in the edit compound layout and is used in scripting.
Double-clicking on an exposed port or right-clicking and choosing Rename sets the scripting name only, not the display name.

6. Create the output port by dragging an output port from the shader on the furthest right (the shader into which all other shaders are plugged) to black dot on the bar on the right.

7. In the bar at the top, double-click where ShaderCompound is written and give your compound a class name (in this example, it’s Bonfire). Do the same for the Category, which is where it will show up in the groups in the preset manager, such as Particle.

If you like, you can add comments to your compound to document how everything inside it works. See Documenting Render Trees for information.
8. Click the little x box in the upper-left corner to close the compound and return to the regular render tree.
9. You can then rename the shader compound node to be the same as the name you gave it inside the compound (see below about names for why this is). Double-click the compound node and enter a new name.
You may need to expand the node’s connections to see the ports that you exposed.
10. Choose Compounds > Export Shader Compound from the render tree toolbar to export your compound so that others can use it. See Exporting Compounds for more information.
Differences Between Shader Compounds and ICE Compounds
Shader compounds are very similar to ICE compounds, so most information about ICE compounds also applies to shader compounds — see Building ICE Compounds [ICE].
Here are the main differences:
• Shader compounds have two names: the class name and the instance name. Changing one does not change the other. The class name appears in the upper left when editing a compound, as well as in the compound’s properties and in the preset manager (after exporting). The instance name appears as a label on the node in the render tree and in the node’s property editor.
• Shader compounds don’t have associated tasks and subtasks. They just have categories.
• Shader compounds always appear in a category. If no category has been specified, they appear in the Shader Compounds category.
• Shader compounds do not require a Pass Through node to share an exposed input port.
• When editing a shader compound, right-clicking on an exposed port and choosing Properties allows you to set either Name or Display Name. The name is displayed in the blue area on the left and is used in scripting. The display name is shown on the node in the render tree and in its property editor. If the Display Name box is left blank, then the display name is the same as the name. Double-clicking on an exposed port or right-clicking and choosing Rename sets the name only, not the display name.
• Because shaders do not allow an arbitrary number of connections, you cannot define multi-instance ports.
• You can define how a port appears on the node in the render tree and in the node’s property editor. Right-click on a node and choose Properties. Under Property Page Layout, you can specify whether it is Visible and assign it to a Tab and a Group. Under Render Tree Layout, you can specify whether it is Visible and assign it to a Group.
• You cannot define a picking string for exposed ports or a construction mode for shader compounds. The ApplyICEOp command does not apply to shader compounds.
• Exported shader compounds have an extension of .xsirtcompound. You cannot export them as private, and they do not store the display state of connections (because you cannot display the values of connections in the render tree).
• Modified shader compounds do not display an asterisk. The compound version manager does not work with shader compounds. There is no command to automatically increment version numbers and re-export modified compounds.
• When importing compounds containing nested compounds, the nested compounds always use the specified version. They do not use the highest minor version number of the specified of the specified major version.
Autodesk Softimage v.7.5