Unity5中的Shader:
Standard Suface Shader,标准光照类型
Unlit Shader,不包含光照(但包含雾效)的顶点/片元着色器
Image Effect Shader,屏幕后期处理效果
Compute Shader,用Gpu的并行性来计算一些Cpu较为吃力的运算
Shader结构
名字: Shader “Custom/MyShader”
属性: Properties{
Name(“display name”,PropertyType)=DefaultValue
//更多属性
}
Name通常用下滑线开始
Display出现在材质面板上的名字
PropertyType指定类型
属性类型 | 默认值的定义语法 | 例子 |
Int | number | _Int(“Int”,Int)=2 |
Float | number | _Float(“Float”,Float)=1.5 |
Range(min max) | number | _Range(“Range”,Range(0.0,5.0))=3.0 |
Color | (number,number,number,number) | _Color(“Color”,Color)=(1,1,1,1) |
Vector | (number,number,number,number) | _Vector(“Vector”,Vector)=(2,3,6,1) |
2D | “defaulttexture”{} | _2D(“2D”,2D)=“”{} |
Cube | “defaulttexture”{} | _Cube(“Cube”,Cube)=”white”{} |
3D | “defaulttexture”{} | _3D(“3D”,3D)=”black”{} |
SubShader
SubShader{
//可选的
[Tags]
//可选的
[RenderSetup]
Pass{
}
//Other Passes
}
状态名称 | 设置指令 | 解释 |
Cull | Cull Back|Front|Off | 设置剔除模式:剔除背面/正面/关闭剔除 |
ZTest | ZTest Less Greater|LEual|GEqual|Equal|NotEqual|Always | 设置深度测试时使用的函数 |
ZWrite | ZWrite On|Off | 开启/关闭深度写入 |
Blend | Blend SrcFactor DstFactor | 开启并设置混合模式 |
Tags{“TagName1”=”Value1””TagName2”=”Value2”}
标签类型 | 说明 | 例子 |
Queue | 控制渲染顺序 | Tags{“Queue”=”Transparent”} |
RenderType | 对着色器进行分类,可用于着色器替换 | Tags{“RenderType”=”Opaque”} |
DisableBatching | 指明SubShader是否使用批处理 | Tags{“DisableBatching”=”True”} |
ForceNoShaderCasting | 是否投射阴影 | Tags{“ForceNoShaderCasting”=”True”} |
IgoreProjecotor | 是否受Projector的影响 | Tags{“IgoreProjector”=”True”} |
CanUseSpriteAtlas | 当SubShader用于Sprite时false | Tags{“CanUseSprteAtlas”=”False”} |
PreviewType | 预览该材质,默认为球形 | Tags{“PreviewType”=“Plane”} |
Pass语义块:
Pass{
[Name]
[Tags]
[RenderSetup]
}
Name“MyPassName”
标签
标签类型 | 说明 | 例子 |
LightMode | 定义Pass在流水线中的角色 | Tags{“LightMode”=“ForwardBase”} |
RequireOptions | 指定满足条件时渲染Pass | Tags{“RequireOptions”=”SoftVegetation”} |
UsePass 调用其它UnityShader中的Pass
Grapass 抓取屏幕并存储在一张纹理中
Fallback
Fallback “name”
//或者
Fallback Off
表面着色器
实际上就是顶点/片元着色器,只不过时unity对其进行了更高层次的抽象
顶点/片元着色器
顶点/偏远着色器是写在Pass语义块内,而非SubSubder
固定函数着色器
对于老式设备不支持可编程管线着色器