To define a Shader object in ShaderLab, use a Shader block. This page contains information on using Shader blocks.
For information on how a Shader object works, and the relationship between Shader objects, SubShaders and Passes, see Shader objects introduction.
A Shader object is a Unity-specific concept; it is a wrapper for shader programs and other information. It lets you define multiple shader programs in the same file, and tell Unity how to use them.
A Shader object has a nested structure; it organizes information into structures called SubShaders and Passes.
| Feature name | Built-in Render Pipeline | Universal Render Pipeline (URP) | High Definition Render Pipeline (HDRP) | Custom SRP |
|---|---|---|---|---|
| ShaderLab: Shader block | Yes | Yes | Yes | Yes |
Inside the Shader block, you can:
Properties block. See ShaderLab: defining material properties.SubShader block. See ShaderLab: defining a SubShader.Fallback block. See ShaderLab: assigning a fallback.| Signature | Function |
|---|---|
Shader "<name>"{<optional: Material properties><One or more SubShader definitions><optional: custom editor><optional: fallback>}
|
Defines a Shader object with a given name. |
This example code demonstrates the basic syntax and structure of a Shader object. The example Shader object has a single SubShader that contains a single pass. It defines Material properties, a CustomEditor, and a Fallback.
Shader "Examples/ShaderSyntax"
{
CustomEditor = "ExampleCustomEditor"
Properties
{
// Material property declarations go here
}
SubShader
{
// The code that defines the rest of the SubShader goes here
Pass
{
// The code that defines the Pass goes here
}
}
Fallback "ExampleFallbackShader"
}
For example custom shaders that are compatible with different render pipelines, see Example custom shaders