一、ShaderLab介
Shader "主色器名称"{
Propertes{} //属性定义
SubShader{} //子主色器
SubShader{} //子主色器2
…………
FallBack "备用着色器名称" //如果所有子着色器不能运行,则使用备用着色器
}
1、properties属性定义
用来定义主色器中使用的贴图资源或者数值参数等。这些属性会在inspector视图的材质界面中显示,可以方便的进行设置和修改。
2、SubShader属性定义
一个着色器包含一个或者多个子着色器。当Unity使用着色器渲染的时,会从上到下遍历子着色器,找到第一个被用户设备支持的子着色器,并使用该子着色器进行渲染。如果没有子着色器可以使用,则使用备用着色器。
3、Fallback属性定义
备用着色器一般会指定一个对硬件要求最低的shader。当所有子着色器不能运行的时候,unity会启用备用着色器来进行渲染。
二、Properties属性
1、定义语法
Properties{
属性列表
}
2、Unity着色器可定义的属性
语法 | 说明 |
---|---|
名称(“显示名称”,Vector)=默认向量值 | 定义一个四维向量属性 |
名称(“显示名称”,Color)=默认颜色值 | 定义一个颜色(取值0~1的四维向量)属性 |
名称(“显示名称”,Float)=默认浮点数值 | 定义一个浮点数属性 |
名称(“显示名称”,Range(min,max))=默认浮点数值 | 定义一个浮点数范围属性,取值min到max |
名称(“显示名称”,2D)=默认贴图名称{选项} | 定义一个2d纹理属性属性 |
名称(“显示名称”,Rect)=默认贴图名称{选项} | 定义一个矩形纹理属性(非2的n次幂) |
名称(“显示名称”,Cube)=默认贴图名称{选项} | 定义一个立方体纹理属性 |
注:
(1)表中”名称”指的是shader代码中可以使用的属性名称;
(2)表中”显示名称”指的是Inspector视图中显示的字符串名称
(3)表中”选项”指的是一些纹理的可选参数,包括以下几项
a:TexGen:纹理生成模式,可以是ObjectLinear、EyeLinear、Spheremap、CubeReflect、CubNomal中的一种;
b:LightmapModel:如果使用该选项,那么纹理将受渲染器的广州贴图参数影响。纹理将不会从材质中获取,而是取自渲染器的设置。
三、SubShader子着色器
1、定义语法
字着色器由标签(可选)、通用状态(可选)、pass列表组成
SubShader{
[Tags标签]
[CommonState通用状态]
pass def [pass def pass的定义]
}
2、Pass的定义语法
Pass{
[Name and Tags名称和标签]
[Render Setup 渲染设置]
[Texture setup 纹理设置]
}
3、pass名称和标签(Name and tags)
可以定义Pass的名字以及任意数量的标签。为Pass命名后,可以在别的着色器中通过Pass名称来应用它。
4、pass渲染设置(Render Setup)
pass里可以设置图形硬件的各种状态,例如开启Alpha混合,开启雾效等。
命令 | 说明 |
---|---|
Meterial{} | 材质,定义一个使用顶点光照管线的材质 |
Lighting | 光照,设置光照,取值为off或on |
Cull | 裁剪,设置裁剪模式,模式包括:back、Front、off |
ZTest | 深度测试,设置深度测试,包括:Less、Greater、LEqual、GEqual、Equal、NotEqual、Always。 |
ZWrite | 深度缓存写入,设置深度缓存写入的开关,取值为Off或On |
Fog{} | 雾效,设置雾效参数 |
AlphaTest | Alpha测试,设置Alpha测试,包括:Less、Greater、LEqual、GEqual、Equal、NotEqual、Always。 |
Blend | Alpha混合,设置Alpha混合模式 |
Stencil | 蒙版,用蒙版来实现像素的取舍操作,选项有:keep、Zero、Replace、Incrsat、DecrSat、Invert、Incrwrap和DecrWrap |
Color | 颜色,是指顶点光照关闭时使用的颜色值 |
ColorMask | 颜色遮罩,设置颜色遮罩,当值为0时关闭所有的颜色通道的渲染,取值为RGB |
offset | 深度偏移,设置深度偏移 |
SeparateSpecular | 高光颜色。开启或关闭顶点光照的独立高光颜色,取值为On或Off |
ColorMaterial | 颜色集,当计算顶点光照时使用每个顶点的颜色。 |
4、pass纹理设置(Texture Setup)
纹理设置语法:setTexture 纹理属性{[命令选项}
纹理设置用于固定功能管线,如果使用表面着色器或者自定义的顶点或者片段着色器,那么纹理设置将会被忽略。
setTexture的命令选项包括三种:
(1)Conbine:将两个颜色源混合,混合源可以是previous(上一次setTexture的结果)、constant(常量颜色值)、primary(顶点颜色)和texture(纹理颜色中的一种)
(2)ConstantColor设置一个颜色常量
(3)matrix:设置矩阵对纹理坐标进行变换
四、Fallback备用着色器
语法:
(1)Fallback “备用着色器名称”
(2)Fallback off
五、unity内置Surface shader关照效果计算的性能开销排序
1、Unlit:仅适用纹理颜色,不受光照影响
2、VertexLit:顶点光照
3、Diffuse:漫反射
4、Specular:在满反射的基础上增加了高光计算
5、Normal Mapped:法线贴图,增加了一张法线贴图和几个着色器指令
6、Normal Mapped Specular:带高光的法线贴图
7、Parallax Normal Mapped:视差法线贴图,增加了视察贴图的计算开销。
8、Parallax Normal Mapped Specular:带高光的视差法线贴图