Conceptually an OSL shader corresponds to a node in our node system. Input parameters will show up as input pins on the OSL texture node. There is a single output parameter corresponding to the output value of the node.
The I/O types in OSL code correspond to the following Octane attribute pin types:
color → Octane Texture attribute
point → Octane Projection attribute (UV, spherical, cylindrical…)
vector, normal → Octane Float attribute (X, Y, Z)
matrix → Octane Transform attribute
float → Octane Float attribute (1D-value)
int → Octane Int attribute (1D-value)
string → Octane Filename or Enum ⁽¹⁾ attribute
Default values in the function signature are used as the default values for the input pins.
OSL allows meta data for shaders, that provide more control of how the node parameters are displayed. Octane supports the following:
Metadata for all inputs:
string label
Override the name shown in the node inspector (normally the variable name is shown)
string help
Provides a tool tip for the pin when you hover your mouse over the pin
string page
Can be used to group pins into categories
Metadata for int and float inputs:
float/int min, max
Specify the minimum and maximum values for a float or int input (note that there's no guarantee that the actual value for the variable in the shader is inside these bounds)
float/int slidermin, slidermax
Allows you to specify a more narrow value range for the sliders. Users may still enter values outside this range (but within min / max) using right mouse button drag, and by typing a value.
float/int sensitivity
Allows you to specify the steps for a float/int type variable
float/int sliderexponent
Sets up the skew factor for the slider. In Octane, only linear (sliderexponent == 1) and logarithmic (sliderexponent > 1) are supported
Metadata for int inputs:
string widget = "checkBox"
show a checkbox instead of a slider. The input value will be 0 or 1.
string widget = "boolean"
synonym for checkBox
string widget = "mapper"
string options
Use a combo box. Options are separated by pipe characters, the keys and value by a colon. Eg. "option one:1|option two:2|option three:3"
Metadata for matrix inputs:
int dim
set to either 2 or 3, specifies if the matrix should be shown as a 2D or 3D transform
Metadata for string inputs:
string widget = "popup"/string options
use a combo box, using the options in the given string. Options are separated by pipe characters, e.g. "option one|option two|option three".
int editable
If 1, this allows entering string values in a combo box which are not in the list of options.
File name inputs are always displayed as a file input, regardless of any given metadata.
To learn more about programming with the Open Shader LanguageA shading language developed by Sony Pictures Imageworks. There are multiple render engines that utilize OSL as it is particularly suited for physically-based renderers. refer to the [link to OSL wiki being drafted by Roeland]