The metadata about the shader itself is provided between the shader name and its parameter list. For instance: The supported shader annotations are: Specifies the string to use for the shader name in the user interface, when possible. Katana-specific The shader will be considered a surface shader or a displacement shader, respectively. Tagging a shader with one of these values will have 3Delight for Katana create a Network Shader node along with the surface shader or displacement shader, and connect it appropriately. The tag will also allow the shader to be listed as surface material or displacement material in a Material node. texture/3d The shader will be considered a 3D texture. The shader will not be listed in the shading node layered menu (shown when pressing the Maya-specific The IDs from You may use any ID between Maya-specific The classification string will be prepended with the standard 3Delight shader node classification string so that the nodes are correctly identified as supported shading nodes when the scene is output to the renderer. The classification string can be set to any value, but using one of the following will list the shader in the specified 3Delight category in the HyperShade: The shading node will be classified as a surface shader and will be listed under 3Delight → Surface in the HyperShade. Upon creation, Maya will create a new shading group and connect this surface shader's The shading node will be classified as a 2D Texture node and will be listed under 3Delight → 2D Textures in the HypersShade. Upon creation, Maya will automatically create and connect a place2DTexture node to the shader's uvCoord parameter. See UV Coordinate parameter below for details on how to declare such parameter. The shading node will be classified as a 3D Texture node and will be listed under 3Delight → 3D Textures in the HypersShade. Upon creation, Maya will automatically create and connect a place3DTexture node to the shader's placementMatrix attribute. The OSL shader must provide a matrix input parameter that is either named The shading node will be classified as a Utility node and will be listed under 3Delight → Utilities. Maya-specific Parameter metadata is provided between a parameter's default value and the comma that ends its declaration. For instance: The following meta-data provides details that are used when generating the attribute of the shading node that corresponds to a given shader parameter. Specifies the name of the attribute that corresponds to this parameter. There are many reasons to use these attribute - parameter mapping: because the software or OSL imposes restrictions (e.g. an attribute named "color" in Maya, which is a reserved word in OSL), because the shader has different parameter naming conventions than what is expected in the software, or because the required attribute in the software is part of a complex attribute structure that does not have an OSL counterpart. When none of the above metadata are provided, the parameter name is used directly to define the attribute name. The Specifies the name of a shader to be connected to this shader parameter when no connection exists. The only supported value is Maya-specific int skip_init Setting this metadata to 1 will will prevent the attribute value from being passed as a shader parameter value when rendering. Only incoming connections to this attribute will be defined when rendering. This allows passing implicit values to shader parameters, such as: Specifies the type of the attribute related to this shader parameter. By default, the attribute type is derived from the parameter type and the widget type. Map the shader parameter to a boolean attribute. Valid for integer shader parameters. Maya-specific Maya-specific The following meta-data provides details about the user interface presentation of the shader parameter. Specifies a string that will be shown in a help box or tool tip. This is currently only supported in Katana. Specifies the label of the widget that controls the attribute. In Maya, this only has an effect in the Attribute Editor. If no label is specified but Using Katana-specific Define the minimum and maximum values of a numeric parameter, respectively. When both are defined, the attribute gadget will be made of a numeric field and a slider. In Maya, this configures the attribute with the specified hard minimum and / or maximum value. In Katana, there is no way to enforce minimum or maximum values on attributes. Nevertheless, having a slider shown helps providing information about the parameter's useful range of values. Providing only Maya-specific This metadata provides extra options for specific widget types. See Specifies the name of a collapsable section that is used to group together related attributes. Nested pages can be defined by setting this metadata to a string containing the path to the given page. For instance: Specifies the range of of the slider widget that controls the attribute. In Katana, providing only one of This meta-data should be set to 1 for parameters that specify a texture file name. Specifies the type of gadget that will show the attribute's value(s). By default, a gadget appropriate for the attribute type is generated. In Maya, matrix attributes are not shown in the Attribute Editor. The following values are supported when it is required to override the default gadget: An option menu with a list of items that have an associated numeric value. The list of item labels and values are defined using the Maya-specific Katana-specific No widget will be created for this attribute. Note that the attribute will still be defined. The string shader parameter will be presented as an option menu with predefined menu items. The menu items are specified by the floatRamp The ramp widgets require more than one shader parameters and are explained in a dedicated section. Because retrieving the Ramp widgets The ramp widgets in Maya and Katana both require 3 different attributes. They also have diverging expectations and features. The triplet of shader parameters required to present a Maya-style float ramp can be declared as follows:Shader Metadata
surface voronoi [[ string maya_type = "2Dtexture", string maya_typeID = "0x00" ]] ( ... )string niceNamestring tags[n] = { tag1, ... tagN }
An array of n strings defining tags for the shader. The supported tags are:surfacedisplacementhiddens key in the Node Graph).string maya_typeID
Specifies the type ID used for the node registration. This is a integer that Maya uses to identify the node type, most notably when saving a scene in the Maya Binary format. Each OSL shader that defines a given shading node type should be assigned a unique type ID. You can chose a value between 0x0000 and 0x007F, or between 0x7F01 and 0x7FFF for your shading node type.0x0000 to 0x7FFF are reserved for node types that are used internally in a studio. 3Delight for Maya will generate a type ID between 0x0080 and 0x7F00 if no maya_typeID annotation is provided. You can also request your own reserved node ID range to Autodesk, for free. This is also the recommended solution if you intend to share your nodes with users outside your studio.0x0000 and 0x7FFF if you always provide the maya_typeID annotation for every custom OSL shader you define. In this case 3Delight for Maya will never need to generate a type ID.string maya_classification
Specifies the Maya shading node classification. The classification affects where the node is presented in the Hypershade tree lister and menus. Some classification types will also change the node creation mechanism to automatically create and connect related nodes - for instance, creating a surface shader will also create and connect a shading group.surfaceoutColor attribute to it. The shader must provide an output color closure parameter that is either named outColor or mapped to that attribute name using the attribute or maya_attribute metadata.texture/2dtexture/3dplacementMatrix or mapped to the placementMatrix attribute name using the attribute or maya_attribute metadata.utilityint maya_generateAETemplate
Setting this to 0 allows providing a complete custom template using a MEL file, just like any other node. Setting this metadata to 1 (or not specifying it at all) will have 3Delight for Maya generate an Attribute Editor template automatically based on the shader parameters' metadata.Parameter metadata
float i_jitter = 1.0 [[ string attribute = "jitter" ]],Attribute specification Metadata
string attributestring maya_attribute
string katana_attributemaya_attribute is Maya-specific and overrides attribute, whereas katana_attribute is Katana-specific and overrides attribute.*none special value indicates that there will not be any node attribute generated for that shader parameter.string default_connectionuvCoord. This should be used for float[2] shader parameters that receive the st coordinates; it centralizes the s, t lookup in a single shader which improves performance.int hidden
When this is set to a non-zero value, a Maya attribute will be defined for the given shader parameter, but it will not be shown in the Attribute Editor, in the Channel Box Editor, nor in the Node Editor. If you only want to avoid getting a gadget for the parameter, see the widget meta-data below (which also works in Katana).normal normalCamera = N [[ int skip_init = 1 ]],string typeboolenum
Map the shader parameter to an enum attribute. Valid for integer shader parameters. The enumeration list should be set using the options metadata. For example:string options = "No Operation:0|Multiply:1|Divide:2|Power:3" message
Valid for string shader parameters. A message attribute will be created and the connected node's name will be passed as this shader parameter's value.User Interface Metadata
string helpstring labelniceName is, the later will be used as a label too.niceName, page and label together allow a parameter named baseLayerColor to be labeled simply as Color in a Base Layer page, and appear as Base Layer Color in the Node Editor.string lock_op
string lock_left
string lock_right
Define a lock operator, its left operand and its right operand, respectively. Lock operations allow the gadget to become insensitive or locked when the operator returns true. The various operators are listed here. lock_left should be set to an attribute name, and lock_right to a value appropriate for the chosen operator. For example, this would make the gadget of an attribute insensitive when a barnDoor attribute would not be set to 1:
string lock_left = "barnDoors", string lock_op="notEqualTo", int lock_right=1float min, float maxint min, int maxmin or only max has no effect in Katana.string niceName
Specifies the attribute name to use in the user interface, when possible. This will be used in the Maya editors, notably the Node Editor and the Channel Box. It will also be used for the automatically generated Attribute Editor template, unless label is specified.string optionswidget for details.string page
string page = "Parent Page.Child Page"float slidermin, float slidermaxint slidermin, int slidermaxslidermin or slidermax will have no effect.int texturefilestring widgetcheckBoxA check box widget. Implies a boolean attribute type.filenameA combination of widgets suitable for a filename. This usually consists of a text field and with a browse button that produces a file browser dialog when clicked.mapperoptions metadata. In Maya, this widget implies an enum attribute. The enumeration list and values is expected to be defined using the options metadata. Set options to a string containing one or more <label>:<value>, separated by |. For example:
string options = "No Operation:0|Multiply:1|Divide:2|Power:3"navigation
A combination of widgets suitable to handle a connection from another node. The attribute is shown as a text field displaying the name of the connected node and a "map" button that brings up a windows allowing the user to select the type of a new node to create and connect to this attribute.newScenegraphLocation
The attribute will be shown with a gadget suitable for defining a new scene graph location; the created location path is passed as the shader parameter value.nullpopupoptions meta-data. Set options to a string containing the names of the menu items, separated by |. For example:
string options = "clamp|black|mirror|periodic"
maya_colorRamp
maya_floatRampGetting the texture coordinates
s,t coordinates is a costly process, it is best to centralize this operation in a single shader and share the results with all shaders. For a shader to benefit of this, it may declare a parameter similar to this:float uvCoord[2] = { 0, 0 }
[[
string default_connection = "uvCoord",
string label = "UV Coordinates",
string widget = "null"
]],
Maya-style float ramp widget
float i_value_Position[] = { 0, 1 }
[[
string katana_attribute = "value_Knots",
string maya_attribute = "value.value_Position",
string related_to_widget = "maya_floatRamp",
string widget = "null"
]],
float i_value_FloatValue[] = { 0, 1 }
[[
string katana_attribute = "value_Floats",
string maya_attribute = "value.value_FloatValue",
string label = "value",
string widget = "maya_floatRamp"
]],
int i_value_Interp[] = { 1, 1 }
[[
string katana_attribute = "value_Interpolation",
string attribute = "value.value_Interp",
string related_to_widget = "maya_floatRamp",
string widget = "null"
]],
Maya-style color ramp widget
float i_color_Position[] = { 0, 1 }
[[
string katana_attribute = "color_Knots",
string maya_attribute = "color.color_Position",
string related_to_widget = "maya_colorRamp",
string widget = "null"
]],
color i_color_Color[] = { 0, 1 }
[[
string katana_attribute = "color_Colors",
string maya_attribute = "color.color_Color",
string label = "color",
string widget = "maya_colorRamp"
]],
int i_color_Interp[] = { 1, 1 }
[[
string katana_attribute = "color_Interpolation",
string maya_attribute = "color.color_Interp",
string related_to_widget = "maya_colorRamp",
string widget = "null"
]],
Overview
Content Tools