We are using {.col-span-2}
Unity Shader Graph CHEAT SHEET
This is a visual cheat-sheet for the Unity Shader Graph. This tool is used to create custom shaders material in Unity, a popular game engine.
#Shader Graph Nodes
#1. Attributes
- Inputs
- - / No inputs
{.left-text} - Outputs
- - Vector3Provides vertex position
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - / No inputs
{.left-text} - Outputs
- - Vector3Provides surface normal
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - / No inputs
{.left-text} - Outputs
- - Vector3World space position
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - / No inputs
{.left-text} - Outputs
- - Vector3Local space position
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - / No inputs
{.left-text} - Outputs
- - Vector4Screen space position
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - / No inputs
{.left-text} - Outputs
- - Vector3Camera world space position
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - / No inputs
{.left-text} - Outputs
- - FloatTime (T) - The total elapsed time since the start of the shader FloatSin Time (T/8π) - A sine wave based on time FloatCos Time (T/8π) - A cosine wave based on time FloatDelta Time - Time passed between the previous frame and the current frame
{.left-text}
{.shortcuts .marker-round .cols-2}
#2. Math Operations
- Inputs
- - Float
VectorFirst value Float
VectorSecond value
{.left-text} - Outputs
- - SAIT Sum of the two inputs
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Float
VectorMinuend Float
VectorSubtrahend
{.left-text} - Outputs
- - SAIT Difference of the two inputs
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Float
Vector
MatrixFirst value Float
Vector
MatrixSecond value
{.left-text} - Outputs
- - SAIT The product of the two inputs
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - FloatBase FloatExponent
{.left-text} - Outputs
- - FloatResult of base raised to the power of the exponent
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - FloatInput value
{.left-text} - Outputs
- - FloatSquare root of the input
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Float
VectorInput value
{.left-text} - Outputs
- - SAIT Absolute value of the input
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Vector3
Vector4First vector Vector3
Vector4Second vector
{.left-text} - Outputs
- - FloatDot product result
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Vector3First vector Vector3Second vector
{.left-text} - Outputs
- - Vector3Cross product result
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - FloatInput in radians
{.left-text} - Outputs
- - FloatSine of the input
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - FloatInput in radians
{.left-text} - Outputs
- - FloatCosine of the input
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Float
VectorStart value Float
VectorEnd value Float
VectorInterpolation factor (T)
{.left-text} - Outputs
- - SAIT Interpolated result
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Float
VectorThreshold Float
VectorInput
{.left-text} - Outputs
- - SAIT Step result
{.left-text}
{.shortcuts .marker-round .cols-2}
#3. Color Processing
- Inputs
- - / No inputs
{.left-text} - Outputs
- - Vector4RGBA color value
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Vector4First color Vector4Second color
{.left-text} - Outputs
- - Vector4Sum of the two colors
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Vector4First color Vector4Second color
{.left-text} - Outputs
- - Vector4Product of the two colors
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Vector4Start color Vector4End color FloatInterpolation factor (T)
{.left-text} - Outputs
- - Vector4Interpolated color
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Vector4Input color FloatSaturation factor
{.left-text} - Outputs
- - Vector4Adjusted color
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Vector4Input color FloatContrast factor
{.left-text} - Outputs
- - Vector4Adjusted color
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Vector4Input color FloatHue shift amount
{.left-text} - Outputs
- - Vector4Color with shifted hue
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Vector4Input color
{.left-text} - Outputs
- - Vector4Inverted color
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Vector4Input color Vector4Target color Vector4Replacement color
{.left-text} - Outputs
- - Vector4Color with replaced values
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Vector4Input color FloatTemperature value FloatTint value
{.left-text} - Outputs
- - Vector4Adjusted color
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Vector4Input color FloatRed channel multiplier FloatGreen channel multiplier FloatBlue channel multiplier
{.left-text} - Outputs
- - Vector4Modified color
{.left-text}
{.shortcuts .marker-round .cols-2}
#4. Texture Processing
- Inputs
- - Texture (sampler)Texture input Vector2UV coordinates
{.left-text} - Outputs
- - Vector4Color data from the texture
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - / No inputs
{.left-text} - Outputs
- - Vector2UV coordinates
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Vector2Tiling values Vector2Offset values
{.left-text} - Outputs
- - Vector2Modified UV coordinates
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - FloatDistortion strength Vector2UV coordinates
{.left-text} - Outputs
- - Vector2Warped UV coordinates
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Texture (sampler) Input texture Vector2UV coordinates FloatDepth value
{.left-text} - Outputs
- - Vector2Adjusted UV coordinates
{.left-text}
{.shortcuts .marker-round .cols-2}
#5. Effects
- Inputs
- - Vector3View direction FloatPower of the effect
{.left-text} - Outputs
- - FloatFresnel effect value
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Texture (sampler)Input texture FloatDissolve threshold
{.left-text} - Outputs
- - Vector4Dissolve effect output
{.left-text}
{.shortcuts .marker-round .cols-2}
- Inputs
- - Vector3Incident direction Vector3Surface normal
{.left-text} - Outputs
- - Vector3Reflected direction
{.left-text}
{.shortcuts .marker-round .cols-2}
#Custom Function Node
- Step 1: Add Custom Function Node in Shader Graph
- Right-click in Shader Graph and choose "Create Node" > "Custom Function".
- Choose between "String" (for inline HLSL code) or "File" (for an external HLSL file).
- Step 2: Configure the Node in Shader Graph
- Set the name of the node.
- If using "File", ensure the external HLSL file name exactly matches the function name defined in the HLSL file.
This ensures the function is correctly referenced in the Shader Graph pipeline.
Example : If the file is namedCustomFunction.hlsl, the function inside it should also be namedCustomFunction.
- Step 3: Add Inputs/Outputs in Shader Graph
- Define the required
InputsandOutputsfor the custom function in Shader Graph. These will automatically generate ports for you to connect other nodes.Example :- Inputs:
Float(time),Vector3(position) - Outputs:
Vector3(new position)
In the custom HLSL code, theinandoutparameters correspond to these inputs and outputs:inrepresents the data coming into the function (e.g.,time,position).outdefines the return value (e.g., modifiedposition).
- Inputs:
- Define the required
- Step 4: Write HLSL Code
- If using the "String" option:
- Directly write the HLSL code inside the custom function node editor in Shader Graph.
- Ensure that the
inandoutparameters match the inputs and outputs you defined in Shader Graph. Example of inline code (using "String" mode):float3 CustomPosition(in float time, in float3 position, out float3 newPosition) { newPosition = position + float3(sin(time), cos(time), 0.0); return newPosition; }
- If using the "File" option:
- Write the HLSL code in an external
.hlslfile and reference the file in Shader Graph. Example of an external HLSL file (using "File" mode):- 1. Create an HLSL file named
CustomPosition.hlsl. - 2. Write the custom function inside the file. The
inandoutparameters should match the Shader Graph inputs and outputs.
float3 CustomPosition(in float time, in float3 position, out float3 newPosition) { newPosition = position + float3(sin(time), cos(time), 0.0); return newPosition; }- 3. Save the file in your project directory, for example,
Assets/Shaders/CustomPosition.hlsl. - 4. Link the file in Shader Graph:
- In the Custom Function Node, switch to "File" mode and reference
CustomPosition.hlsl.
- 1. Create an HLSL file named
- Write the HLSL code in an external
- If using the "String" option:
- Step 5: Use the Node in Shader Graph
- Connect the custom function node’s input ports to other nodes, such as
TimeandPosition, to feed data into the custom function. - Connect the output port to apply the function result in the Shader Graph pipeline.
Example Pipeline :- Inputs:
Time(as a float) andPosition(as a vector) - Outputs:
Modified Position(vector with new position)
- Inputs:
- Connect the custom function node’s input ports to other nodes, such as
{.marker-timeline .shortcuts}
#Also see
- Unity Shader Graph documentation (docs.unity3d.com)
- Tianle Yuan's Unity Visual Effect notes (yuantianle.com)