ShaderLab

Unity 的 shader 文件使用一种名为 ShaderLab 的声明式语言编写。实际的 shader 代码使用 HLSL/Cg 语言编写,写在 CGPROGRAM 片段里。

"Shader" 是 shader 文件的根命令,每个 shader 文件必须定义一个 "Shader", 其结构为:

Shader "name" {
    [Properties]
    [CGINCLUDE]
    SubShader
    [SubShader ...]
    [Fallback]
    [CustomEditor]
}

一个典型的例子如下:

Shader "MyShaderName" {
    Properties {
        // 属性
    }

    SubShader {    // 针对显卡 A 的 SubShader
        Pass {
            // 设置渲染状态和标签

            CGPROGRAM    // 开始 CG 代码片段
            #pragma vertex vert
            #pragma fragment frag

            // CG 代码

            ENDCG

            // 其他设置
        }
        // 其他需要的 Pass
    }

    SubShader {
        // 针对显卡 B 的 SubShader
    }

    // 上述 SubShader 都失败后用于回调的 Unity Shader
    Fallback "VertexLit"
}

results matching ""

    No results matching ""