美文网首页
Shader的结构

Shader的结构

作者: TALY | 来源:发表于2018-01-08 13:43 被阅读0次

    命名shader

    语法:

    Shader  " where/name "{  }

    "/"的左边决定"name"这个shader会放在哪个(where)面板下

    如果是shader"Custom/MyShader"{  }

    位置为:Shader   —>  Custom  —>  MyShader

    属性(承接材质和shader)properties

    语法:

    properties{

                Name("display  name",PropertyType) =    DefaultValue

                Name("display  name",PropertyType) =    DefaultValue

                //更多属性

    }

    shader中的属性名字“Name”需要在前面添加一个下划线

    而“display name”是在材质面板中显示的名字

    DefaultValue是默认值,在为改变参数情况下的值。

    将shader拖入创建好的材质中

    可以在材质面板看到定义好的属性


    Subshader

    Unity shader的编写中,SubShader至少要有一个,也可以有多个。作用在于高级的显卡可以执行有的显卡无法执行的内容。

    语法:

    SubShader{

                //可选的

                [Tags]

                //可选的

                [RenderSetup]

                Pass{

                }

                // Other Passes

    }

    定义了一系列Pass以及可选的状态([RenderSetup]) 和 标签([Tags])设置。每一个Pass都定义了一次完整的渲染流程,要尽可能的减小Pass的数量,可以降低性能消耗。

    状态和标签也可以在Pass中声明,但是SubShader中含有独有的标签设置。

    在SubShader中的状态设置,可以作用于所有的Pass。

    状态设置 [RenderSetup]

    常见的状态设置

    标签[Tags]

    属于键值对(Key/Value),Key和Value都是“string”类型

    键与值中间使用“=”衔接

    语法:

    Tags {"TagName1"="Value1"    "TagName2"="Value2"}

    图例中是SubShader独有的,不可以在Pass中进行声明。


    Pass语义块

    语法:

    Pass{

                [Name]

                [Tags]

                [RenderSetup]

                // Other Code

    }

    首先定义pass的名字:

    例如:  

    UsePass " MyShader/MYPASSNAME "

    命名需要大写

    FallPass

    如果所有的SubShader都无法执行就会执行FallPass

    语法:

    Fallback "name"

    //或者

    Fallback off

    相关文章

      网友评论

          本文标题:Shader的结构

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