Softimage SDK Programmer's Guide > Customizing with the SDK > Custom Shaders > Shader Parameter Definitions >

# Refining UI Controls for Parameter Definitions

There are two ways you can customize the appearance of an instantiated shader definition in the UI:

- You can modify the ShaderDef.RenderTreeLayout or ShaderDef::GetRenderTreeLayout, which controls what you see on the shader node. For example, grouping ports together—see VBScript Example: Grouping Ports in the Render Tree.

- You can modify the associated ShaderDef.PPGLayout or ShaderDef::GetPPGLayout, which supports most of the functionality of the standard PPGLayout or PPGLayout object. For example, you can customize parameter-based controls (for example, specify option lists as combo list boxes), arrange shader parameters in groups and tabs, and prevent others from appearing at al.

  For an example demonstrating how to set up a combo box control, see the example. For an example showing how to prevent parameter definitions from appearing in the UI, see JScript Example: No UI for Parameter Definition.

To add a parameter definition as a connectable port in the shader node only, set the parameter definition options to be ShaderParamDefOptions.SetTexturable or ShaderParamDefOptions::SetTexturable (true) but not ShaderParamDefOptions.SetInspectable or ShaderParamDefOptions::SetInspectable (false). To add a parameter definition as a parameter on the associated property page, set the inspectable capability to true and the texturable capability to false.

You can control what appears on the property page by modifying the PPGLayout or PPGLayout object via the ShaderDef.PPGLayout or ShaderDef::GetPPGLayout property: use it to add the parameter definitions that you want to appear and simply don't add the ones you don't want to appear. However, if you don't need to prevent a non-texturable parameter definition from appearing or customize a control on the property page, you don't need to access it at all.

Similarly, the render tree layout does not need to be explicitly accessed unless you need to group connection ports on the shader node. In that case you can get the PPGLayout from the ShaderDef.RenderTreeLayout or ShaderDef::GetRenderTreeLayout property.

#### Topics in this section

- VBScript Example: Grouping Ports in the Render Tree
- JScript Example: No UI for Parameter Definition