Version: 2019.4
ShaderLab: assigning a custom editor
ShaderLab: assigning tags to a SubShader
How do you use documentation throughout your workflow? Share your experience with us by taking this survey.

ShaderLab: defining a SubShader

To define a SubShader in ShaderLabUnity’s language for defining the structure of Shader objects. More info
See in Glossary
, you use a SubShader block. This page contains information on using SubShader blocks.

For information on how a ShaderA program that runs on the GPU. More info
See in Glossary
object works, and the relationship between Shader objects, SubShaders and Passes, see Shader objects introduction.

Overview

A Shader object contains one or more SubShaders. SubShaders let you define different GPU settings and shader programs for different hardware, render pipelines, and runtime settings. Some Shader objects contain only a single SubShader; others contain multiple SubShaders to support a range of different configurations.

Render pipeline compatibility

Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP
ShaderLab: SubShader block Yes Yes Yes Yes

Using the SubShader block

In ShaderLab, you define a SubShader by placing a SubShader block inside a Shader block.

Inside the SubShader block, you can:

Signature Function
SubShader
{
    <optional: LOD>
    <optional: tags>
    <optional: commands>
    <One or more Pass definitions>
}
Defines a SubShader.

You can define as many Passes as you like within a SubShader.

Examples

This example code demonstrates the syntax for creating a Shader object that contains a single SubShader, which in turn contains a single Pass.

Shader "Examples/SinglePass"
{
    SubShader
    {
        Tags { "ExampleSubShaderTagKey" = "ExampleSubShaderTagValue" }
        LOD 100

         // ShaderLab commands that apply to the whole SubShader go here. 

        Pass
        {                
              Name "ExamplePassName"
              Tags { "ExamplePassTagKey" = "ExamplePassTagValue" }

              // ShaderLab commands that apply to this Pass go here.

              // HLSL code goes here.
        }
    }
}
ShaderLab: assigning a custom editor
ShaderLab: assigning tags to a SubShader