美文网首页
ShaderLab语法

ShaderLab语法

作者: Bonging | 来源:发表于2018-07-30 23:47 被阅读0次

    原文链接: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语法

          本文链接:https://www.haomeiwen.com/subject/hxoqvftx.html