# Shading network

An alternate way to define a specific material channel is by using a shading network. If a shading network is set for a material channel, this will be used instead of the legacy layered texture system.

Material nodes are systems that are used to generate a color for each surface element on a model. Some nodes will solely be used to create colors from pre-defined values or from the sampling of textures. Some nodes are designed to modify the values generated by other nodes. The nodes that modify color values have one or multiple input slots.

Every node outputs the same type of RGBA data, so every node can be plugged into any input slot. If an input slot doesn't have a node plugged into it, the slot will evaluate to a default value. This value can be set for every node's specific slot.

A node may appear multiple times in the same node tree but may not be an ancestor to itself. The material node network is identified by the last node in the network, which is referred to as the exit node. When each surface element is evaluated (for casting/rendering etc.) the entire node tree will be traversed from the exit node.

To use a node network as a material, the exit node is assigned to a selected channel in the IMaterial object using SetShadingNetwork() for the IMaterial.

# Node listing

  • ShadingTextureNode
    No input slots. Contains a texture name and a UV-set. The name set here is supposed to be a uniquely identifying name that is also present in the scenes texture table.

  • ShadingColorNode
    No input slots. Contains a color.

  • ShadingVertexColorNode
    No input slots. Contains an index to a vertex color.

  • ShadingInterpolateNode
    Three input slots. Will interpolate between the colors (pointwise) of slot0/slot1 using slot3.

  • ShadingClampNode
    Three input slots. Will clamp the color (pointwise) of slot0 using the slot1/slot2.

  • ShadingAddNode
    Two input slots. Will add the colors (pointwise) of slot0 and slot1.

  • ShadingSubtractNode
    Two input slots. Will subtract the color (pointwise) of slot0 with slot1.

  • ShadingMultiplyNode
    Two input slots. Will multiply the colors (pointwise) of slot0 and slot1.

  • ShadingDivideNode
    Two input slots. Will divide the color (pointwise) of slot0 with slot1.

  • ShadingNormalize3Node
    One input slot. Will normalize the color of slot0.

  • ShadingPowNode
    Two input slots. Will give slot0 (base) raised with slot1 (exponent).

  • ShadingSqrtNode
    One input slot. Will give the root of slot0.

  • ShadingSwizzlingNode
    Four input slots. Four output slots. Re-routes the input to the specified output.

  • ShadingDot3Node
    Two input slots. Returns the Dot of slot0 and slot1 (dot, dot, dot, 1.0f).

  • ShadingCross3Node
    Two input slots. Returns the Cross of slot0 and slot1 (cross.x, cross.y, cross.z, 1.0f).

  • ShadingCosNode
    One input slot. Returns Cos of the values of slot0.

  • ShadingSinNode
    One input slot. Returns Sin of the values of slot0.

  • ShadingMaxNode
    Two input slots. Returns the largest value of slot0 and slot1.

  • ShadingMinNode
    Two input slots. Returns the smallest value of slot0 and slot1.

  • ShadingEqualNode
    Two input slots. Returns 1.0f if value in slot0 equals the value in slot1, otherwise 0.0f.

  • ShadingNotEqualNode
    Two input slots. Returns 1.0f if value in slot0 does not equal the value in slot1, otherwise 0.0f.

  • ShadingGreaterThanNode
    Two input slots. Returns 1.0f if value in slot0 is greater than the value in slot1, otherwise 0.0f.

  • ShadingLessThanNode
    Two input slots. Returns 1.0f if value in slot0 is smaller than the value in slot1, otherwise 0.0f.

# Example - Create and set shading network

    # Node concept diagram

    The following figure shows two textures nodes plugged into an interpolating node. The texture nodes don't have input slots, but they have settable paramaters.

    Node concept

    # Generating HLSL/GLSL shader code from material nodes

    When a material node network has been created and assigned to a channel of a material. Simplygon can generate a shader used to render the material.