ShaderLab语法

原文链接:https://docs.unity3d.com/Manual/SL-Shader.html

                                          ShaderLab语法

        Unity中的所有Shader文件都使用名为“ShaderLab”的声明性语言编写。在文件中,嵌套大括号语法声明了描述着色器的各种内容 - 例如,应在材质检查器中显示哪些着色器属性 ; 什么样的硬件后备要做; 使用何种混合模式等。实际的“着色器代码”是在同一着色器文件中的CGPROGRAM片段中编写的 (请参阅表面着色器和顶点和片段着色器,链接见原网页)。

        此页面和子页面描述嵌套大括号“ShaderLab”语法。代码CGPROGRAM段使用常规HLSL / Cg着色语言编写,请参阅其文档页面(链接见原网页)。

        Shader是shader文件的根命令,每个文件必须定义一个(且只有一个)shader。它指定使用这个shader的material的对象该如何渲染。


语法

        Shader "name" { [Properties] __Subshaders__ [Fallback] [CustomEditor] }

        定义一个shader。它将显示在材质的监视面板上在名字下列出,可以在材质的监视面板中选择性的定义Shader列出的一些属性。在这之后是一系列的subshader,以及可选择性的fallback和/或自定义编辑声明。

细节

属性

        Shader可以有一系列的属性,声明在shader中的任何属性在Unity中都会显示在material的监视面板中。典型的属性是对象的颜色,纹理,或是一些shader要使用的任意的值。


SubShaders&Fallback

        每个shader都有一个subshader列表,最少要有一个subshader。当加载一个shader的时候,Unity将会浏览subshader列表,并选择第一个用户终端机器支持的subshader。如果没有subshader可以被支持,那么Unity会尝试去使用fallback shader。

        不同的显卡有不同的性能。这为游戏开发者带来了永恒的难题,你希望你的游戏在最新的硬件上看起来很棒,但不希望它只对那3%的人群有效。这就是subshader有用的地方,创建一个具有您梦寐以求的所有梦幻图形效果的subshader,然后给旧显卡提供其他的subshader。这些子着色器可以以较慢的方式实现您想要的效果,或者他们可能选择不实现某些细节。

        shader“层级细节”(LOD)和“shader替换”是两种基于subshader的技术,有关详细信息,请参阅Shader LOD和Shader Replacemement。


例子

        这是最简单的shader示例:

// colored vertex lighting

Shader "Simple colored lighting"

{

    // a single color property

    Properties {

        _Color ("Main Color", Color) = (1,.5,.5,1)

    }

    // define one subshader

    SubShader

    {

        // a single pass in our subshader

        Pass

        {

            // use fixed function per-vertex lighting

            Material

            {

                Diffuse [_Color]

            }

            Lighting On

        }

    }

}

        这个shader定义了一个颜色属性_Color(在材质的监视面板中显示为Main Color),它有一个默认值为 (1,0.5,0.5,1)。接着定义了一个单独的subshader。这个subshader由一个Pass组成,开启了固定管线的顶点光照,并为它指定了一个基本的材质。

        请参阅Surface Shader示例或 Vertex和Fragment Shader示例中的更多复杂示例(链接见原网页)。


也可以看看(链接见原网页)

属性语法。

SubShader语法。

传递语法。

后备语法。

CustomEditor语法。

你可能感兴趣的:(ShaderLab语法)