Shader的结构

命名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的结构_第1张图片

将shader拖入创建好的材质中

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


Subshader

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


语法:

SubShader{

            //可选的

            [Tags]


            //可选的

            [RenderSetup]


            Pass{

            }

            // Other Passes

}

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

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

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


状态设置 [RenderSetup]

常见的状态设置


Shader的结构_第2张图片

标签[Tags]

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

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

语法:

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


Shader的结构_第3张图片

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


Pass语义块

语法:

Pass{

            [Name]

            [Tags]

            [RenderSetup]

            // Other Code

}

首先定义pass的名字:

例如:  

UsePass " MyShader/MYPASSNAME "

命名需要大写



FallPass

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

语法:

Fallback "name"

//或者

Fallback off

你可能感兴趣的:(Shader的结构)