# Simplygon Shading Networks
# What is a shading network ?
Shading networks are a fundamental part of Simplygon's material pipeline and are used to describe Simplygon materials in a hierarchial node-based manner. Most shading nodes supported by the Simplygon API are supported by the plug-in and the input for the nodes matches the ones in the API.
Most standard materials in Max gets automatically translated to and from Simplygon materials during export and import, but there are some cases where user input is required. DirectX materials with custom (HLSL) shaders do not follow any template / naming schema that we can use to automatically map the material properties, for these materials shading networks have to be setup manually.
Max 2021 introduces a new material model as standard material, specifically the Physical Material. As the material is very complex with many material properties we've added shading network support to open up new possibilities.
# Fundamentals
A material in Simplygon can have several material channels, for example Ambient_Color, Diffuse_Color, Specular_Color and Bump which can be found in standard materials in Max, or Ambient, Diffuse, Specular and Normals which will be used in HLSL examples later on. There are also possibility to add custom channels, if needed. Each of these material channels has its own shading network which is Simplygon’s way of describing a material.
Shading networks are responsible for the visual representation of a material, as well as a description of what will be baked during processing. A shading network starts with one node, an exit node which can be of any (shading) node type, for example a texture-, add- or multiply node.
# Supported shading nodes
Max Name | API Name | No of Inputs | Description |
---|---|---|---|
ShadingTextureNode | spShadingTextureNode | 0 | Points at a texture |
ShadingColorNode | spShadingColorNode | 1 | RGBA color |
ShadingAddNode | spShadingAddNode | 2 | Adds two input nodes together |
ShadingSubtractNode | spShadingSubtractNode | 2 | Subtracts input 1 from input 0 |
ShadingMultiplyNode | spShadingMultiplyNode | 2 | Multiplies input 1 with input 0 |
ShadingDivideNode | spShadingDivideNode | 2 | Divides input 0 with input 1 |
ShadingInterpolateNode | spShadingInterpolateNode | 3 | Interpolates input 0 and 1 based on 2 |
ShadingClampNode | spShadingClampNode | 3 | Clamps input 0 based on 1 and 2 |
ShadingSwizzlingNode | spShadingSwizzlingNode | 4 | Swizzles the channels |
ShadingVertexColorNode | spShadingVertexColorNode | 0 | Points at a vertex color set |
ShadingLayeredBlendNode | spShadingLayeredBlendNode (internal) | unlimited | Blends textures together from start to end, based on blend mode |
ShadingPowNode | spShadingPowNode | 2 | The power (input 1) of input 0 |
ShadingStepNode | spShadingStepNode | 2 | Steps up/down the values from input 0 based on input 1 |
ShadingNormalize3Node | spShadingNormalize3Node | 1 | Normalizes input 0 |
ShadingSqrtNode | spShadingSqrtNode | 1 | Sqrt of input 0 |
ShadingDot3Node | spShadingDot3Node | 2 | Dot of input 0 and input 1 |
ShadingCross3Node | spShadingCross3Node | 2 | Cross of input 0 and input 1 |
ShadingCosNode | spShadingCosNode | 1 | Cos of input 0 |
ShadingSinNode | spShadingSinNode | 1 | Sin of input 0 |
ShadingMaxNode | spShadingMaxNode | 2 | Max of input 0 and input 1 |
ShadingMinNode | spShadingMinNode | 2 | Min of input 0 and input 1 |
ShadingEqualNode | spShadingEqualNode | 2 | 1.0f if value in input 0 equals the value in input 1, otherwise 0.0f |
ShadingNotEqualNode | spShadingNotEqualNode | 2 | 1.0f if value in input 0 does not equal the value in input 1, otherwise 0.0f |
ShadingGreaterThanNode | spShadingGreaterThanNode | 2 | 1.0f if value in input 0 is greater than the value in input 1, otherwise 0.0f |
ShadingLessThanNode | spShadingLessThanNode | 2 | 1.0f if value in input 0 is smaller than the value in input 1, otherwise 0.0f |
ShadingGeometryFieldNode | spShadingGeometryFieldNode | 0 | Returns field data from geometry based on specified field type, name (or index) |
# Next steps
Get to know how to work with Shading Networks: