# Chapter 17 - Additional GLSL Node Reference

This chapter describes the list of GLSL custom nodes that come bundled with RV. These nodes are grouped into five sections within this chapter based on the nodes "evaluationType" i.e. color, filter, transition, merge or combine. Each sub-section within a section describes a node and its parameters. For a complete description of the GLSL custom node itself, refer to the chapter on that topic i.e. "Chapter 3: Writing a Custom GLSL Node".The complete collection of GLSL custom nodes that come with each RV distribution are stored in the following two files located at:

```
 Linux & Windows:
<RV install dir>/plugins/Nodes/AdditionalNodes.gto
<RV install dir>/plugins/Support/additional_nodes/AdditionalNodes.zip

Mac:
<RV install dir>/Contents/PlugIns/Nodes/AdditionalNodes.gto
<RV install dir>/Contents/PlugIns/Support/additional_nodes/AdditionalNodes.zip  
```

The file "AdditionalNodes.gto" is a GTO formatted text file that contains the definition of all the nodes described in this chapter. All of the node definitions found in this file are signed for use by all RV4 versions. The GLSL source code that implements the node's functionality is embedded within the node definition's function block as an inlined string. In addition, the default values of the node's parameters can be found within the node definition's parameter block. The accompanying support file "AdditionalNodes.zip" is a zipped up collection of individually named node ".gto" and ".glsl" files. Users can unzip this package and refer to each node's .gto/.glsl file as examples of custom written RV GLSL nodes. Note the file "AdditionalNodes.zip" is not used by RV. Instead RV only uses "AdditionalNodes.gto" which was produced from all the files found in "AdditionalNodes.zip".These nodes can be applied through the session manager to sources, sequences, stacks, layouts or other nodes. First you select a source (for example) and from the session manager "+" pull menu select "New Node by Type" and type in the name of the node in the entry box field of the "New Node by Type" window.

### 17.1 Color Nodes

This section describes all the GLSL nodes of evaluationType "color" found in "AdditionalNodes.gto".

#### 17.1.1 Matrix3x3

This node implements a 3x3 matrix multiplication on the RGB channels of the inputImage. The inputImage alpha channel is not affected by this node.Input parameters:

| Property | Type | Default |
| --- | --- | --- |
| node.parameters.m33 | float[9] | [ 1 0 0 0 1 0 0 0 1 ] |

#### 17.1.2 Matrix4x4

This node implements a 4x4 matrix multiplication on the RGBA channels of the inputImage. The inputImage alpha channel is affected by this node.Input parameters:

| Property | Type | Default |
| --- | --- | --- |
| node.parameters.m44 | float[16] | [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ] |

#### 17.1.3 Premult

This node implements the "premultiply by alpha" operation on the RGB channels of the inputImage. The inputImage alpha channel is not affected by this node.Input parameters: None

#### 17.1.4 UnPremult

This node implements the "unpremultiply by alpha" (i.e. divide by alpha) operation on the RGB channels of the inputImage. The inputImage alpha channel is not affected by this node.Input parameters: None

#### 17.1.5 Gamma

This node implements the gamma (i.e. pixelColor^gamma) operation on the RGB channels of the inputImage. The inputImage alpha channel is not affected by this node. Input parameters:

| Property | Type | Default |
| --- | --- | --- |
| node.parameters.gamma | float[3] | [ 0.4545 0.4545 0.4545 ] |

#### 17.1.6 CDL

This node implements the Color Description List operation on the RGB channels of the inputImage. The inputImage alpha channel is not affected by this node.Parameter lumaCoefficients defaults to full range Rec709 luma values.Input parameters:

| Property | Type | Default |
| --- | --- | --- |
| node.parameters.slope | float[3] | [ 1 1 1 ] |
| node.parameters.offset | float[3] | [ 0 0 0 ] |
| node.parameters.power | float[3] | [ 1 1 1 ] |
| node.parameters.saturation | float | [ 1 ] |
| node.parameters.lumaCoefficients | float[3] | [ 0.2126 0.7152 0.0722 ] |
| node.parameters.minClamp | float | [ 0 ] |
| node.parameters.maxClamp | float | [ 1 ] |

#### 17.1.7 CDLForACESLinear

This node implements the Color Description List operation in ACES linear colorspace on the RGB channels of the inputImage. The inputImage alpha channel is not affected by this node.Parameter lumaCoefficients defaults to full range Rec709 luma values.If the inputImage colorspace is NOT in ACES linear, but in some X linear colorspace; then one must set the 'toACES' property to the X-to-ACES colorspace conversion matrix and similarly the 'fromACES' property to the ACES-to-X colorspace conversion matrix.Input parameters:

| Property | Type | Default |
| --- | --- | --- |
| node.parameters.slope | float[3] | [ 1 1 1 ] |
| node.parameters.offset | float[3] | [ 0 0 0 ] |
| node.parameters.power | float[3] | [ 1 1 1 ] |
| node.parameters.saturation | float | [ 1 ] |
| node.parameters.lumaCoefficients | float[3] | [ 0.2126 0.7152 0.0722 ] |
| node.parameters.toACES | float[16] | [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ] |
| node.parameters.fromACES | float[16] | [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ] |
| node.parameters.minClamp | float | [ 0 ] |
| node.parameters.maxClamp | float | [ 1 ] |

#### 17.1.8 CDLForACESLog

This node implements the Color Description List operation in ACES Log colorspace on the RGB channels of the inputImage. The inputImage alpha channel is not affected by this node.Parameter lumaCoefficients defaults to full range Rec709 luma values.If the inputImage colorspace is NOT in ACES linear, but in some X linear colorspace; then one must set the 'toACES' property to the X-to-ACES colorspace conversion matrix and similarly the 'fromACES' property to the ACES-to-X colorspace conversion matrix.Input parameters:

| Property | Type | Default |
| --- | --- | --- |
| node.parameters.slope | float[3] | [ 1 1 1 ] |
| node.parameters.offset | float[3] | [ 0 0 0 ] |
| node.parameters.power | float[3] | [ 1 1 1 ] |
| node.parameters.saturation | float | [ 1 ] |
| node.parameters.lumaCoefficients | float[3] | [ 0.2126 0.7152 0.0722 ] |
| node.parameters.toACES | float[16] | [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ] |
| node.parameters.fromACES | float[16] | [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ] |
| node.parameters.minClamp | float | [ 0 ] |
| node.parameters.maxClamp | float | [ 1 ] |

#### 17.1.9 SRGBToLinear

This linearizing node implements the sRGB to linear transfer function operation on the RGB channels of the inputImage. The inputImage alpha channel is not affected by this node.Input parameters: None

#### 17.1.10 LinearToSRGB

This node implements the linear to sRGB transfer function operation on the RGB channels of the inputImage. The inputImage alpha channel is not affected by this node.Input parameters: None

#### 17.1.11 Rec709ToLinear

This linearizing node implements the Rec709 to linear transfer function operation on the RGB channels of the inputImage. The inputImage alpha channel is not affected by this node.Input parameters: None

#### 17.1.12 LinearToRec709

This node implements the linear to Rec709 transfer function operation on the RGB channels of the inputImage. The inputImage alpha channel is not affected by this node.Input parameters: None

#### 17.1.13 CineonLogToLinear

This linearizing node implements the Cineon Log to linear transfer function operation on the RGB channels of the inputImage. The implementation is based on Kodak specification "The Cineon Digital Film System". The inputImage alpha channel is not affected by this node.Input parameters: (values must be specified within the range [0..1023])

| Property | Type | Default |
| --- | --- | --- |
| node.parameters.refBlack | float | 95 |
| node.parameters.refWhite | float | 685 |
| node.parameters.softClip | float | 0 |

#### 17.1.14 LinearToCineonLog

This node implements the linear to Cineon Log film transfer function operation on the RGB channels of the inputImage. The implementation is based on Kodak specification "The Cineon Digital Film System". The inputImage alpha channel is not affected by this node.Input parameters: (values must be specified within the range [0..1023])

| Property | Type | Default |
| --- | --- | --- |
| node.parameters.refBlack | float | 95 |
| node.parameters.refWhite | float | 685 |

#### 17.1.15 ViperLogToLinear

This linearizing node implements the Viper Log to linear transfer function operation on the RGB channels of the inputImage. The inputImage alpha channel is not affected by this node.Input parameters: None

#### 17.1.16 LinearToViperLog

This node implements the linear to Viper Log transfer function operation on the RGB channels of the inputImage. The inputImage alpha channel is not affected by this node.Input parameters: None

#### 17.1.17 RGBToYCbCr601

This node implements the RGB to YCbCr 601 conversion operation on the RGB channels of the inputImage. Implementation is based on ITU-R BT.601 specification. The inputImage alpha channel is not affected by this node.Input parameters: None

#### 17.1.18 RGBToYCbCr709

This node implements the RGB to YCbCr 709 conversion operation on the RGB channels of the inputImage. Implementation is based on ITU-R BT.709 specification. The inputImage alpha channel is not affected by this node.Input parameters: None

#### 17.1.19 RGBToYCgCo

This node implements the RGB to YCgCo conversion operation on the RGB channels of the inputImage. The inputImage alpha channel is not affected by this node.Input parameters: None

#### 17.1.20 YCbCr601ToRGB

This node implements the YCbCr 601 to RGB conversion operation on the RGB channels of the inputImage. Implementation is based on ITU-R BT.601 specification. The inputImage alpha channel is not affected by this node.Input parameters: None

#### 17.1.21 YCbCr709ToRGB

This node implements the YCbCr 709 to RGB conversion operation on the RGB channels of the inputImage. Implementation is based on ITU-R BT.709 specification. The inputImage alpha channel is not affected by this node.Input parameters: None

#### 17.1.22 YCgCoToRGB

This node implements the YCgCo to RGB conversion operation on the RGB channels of the inputImage. The inputImage alpha channel is not affected by this node.Input parameters: None

#### 17.1.23 YCbCr601FRToRGB

This node implements the YCbCr 601 "Full Range" to RGB conversion operation on the RGB channels of the inputImage. Implementation is based on ITU-R BT.601 specification. The inputImage alpha channel is not affected by this node.Input parameters: None

#### 17.1.24 RGBToYCbCr601FR

This node implements the RGB to YCbCr 601 "Full Range" conversion operation on the RGB channels of the inputImage. Implementation is based on ITU-R BT.601 specification. The inputImage alpha channel is not affected by this node.Input parameters: None

#### 17.1.27 Saturation

This node implements the saturation operation on the RGB channels of the inputImage. The inputImage alpha channel is not affected by this node.Parameter lumaCoefficients defaults to full range Rec709 luma values.Input parameters:

| Property | Type | Default |
| --- | --- | --- |
| node.parameters.saturation | float | [ 1 ] |
| node.parameters.lumaCoefficients | float[3] | [ 0.2126 0.7152 0.0722 ] |
| node.parameters.minClamp | float | [ 0 ] |
| node.parameters.maxClamp | float | [ 1 ] |

### 17.2 Transition Nodes

This section describes all the GLSL nodes of evaluationType "transition" found in "AdditionalNodes.gto".

### 17.2.1 CrossDissolve

This node implements a simple cross dissolve transition effect on the RGBA channels of two inputImage sources beginning from startFrame until (startFrame + numFrames -1). The inputImage alpha channel is affected by this node.Input parameters:

| Property | Type | Default |
| --- | --- | --- |
| node.parameters.startFrame | float | 40 |
| node.parameters.numFrame | float | 20 |

### 17.2.2 Wipe

This node implements a simple wipe transition effect on the RGBA channels of two inputImage sources beginning from startFrame until (startFrame + numFrames -1). The inputImage alpha channel is affected by this node.Input parameters:

| Property | Type | Default |
| --- | --- | --- |
| node.parameters.startFrame | float | 40 |
| node.parameters.numFrame | float | 20 |
