ShaderLab基础语法

一、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:带高光的视差法线贴图

你可能感兴趣的:(UnityShader)