命名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