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