Understanding Softimage Custom Shaders

In Softimage, integrating shaders involves registering a set of parameters required by the shader code and hooking in the renderer (whether that is mental ray or a third-party renderer). In the past this was done by creating SPDL files, which required generating GUIDs for each property set and parameter, registering each SPDL file in Softimage, and then generating a preset from that SPDL.

As of v9.0 (2011), Softimage now supports a lightweight mechanism for registering the parameters and associating the renderer(s): the shader definition. Shader definitions tell Softimage how to build a shader node in the render tree by defining a set of parameters and associating one or more renderers with options and attributes. These definitions now take the place of the old presets, allowing you to integrate SPDL-less, or dynamic, custom shaders.

How Shader Definitions Work in Softimage

When users build a render tree in the UI, they drag presets from the preset manager onto the render tree workspace. When a shader definition is created, it tells Softimage what ShaderDef.DisplayName or ShaderDef::GetDisplayName or ShaderDef::PutDisplayName in the preset manager and where (ShaderDef.Category or ShaderDef::GetCategory or ShaderDef::PutCategory) to display it. Then, when the shader is actually instantiated, Softimage builds the shader node with its input and output parameters, including data type, restrictions on connections, default values, etc. This makes Softimage shaders extremely dynamic, since they are built in a just-in-time manner only when instantiated.

There are several ways to create shader definitions: