Shader类型区分:
- 没有嵌套CG语言,也就是代码段中没有CGPROGARAM和ENDCG关键字的,就是固定功能着色器。
- 嵌套了CG语言,代码段中有surf函数的,就是表面着色器。
- 嵌套了CG语言,代码段中有#pragma vertex name和 #pragma fragment frag声明的,就是顶点着色器&片段着色器。
Shader基本框架:
Shader "Shader名称"
{
//-------------------------------【属性】-----------------------------------------
Properties
{
}
//---------------------------------【子着色器1】----------------------------------
SubShader
{
//----------------通道---------------
Pass
{
}
}
//---------------------------------【备胎】----------------------------------------
//备胎设为Unity自带的普通漫反射
Fallback" Diffuse "
}
Properties:
name ("display name", Range (min, max)) =number
定义浮点数属性,在检视器中可通过一个标注最大最小值的滑条来修改。
name ("display name", Color) =(number,number,number,number)
定义颜色属性
name ("display name", 2D) = "name" {options }
定义2D纹理属性
name ("display name", Rect) = "name"{ options }
定义长方形(非2次方)纹理属性
name ("display name", Cube) = "name"{ options }
定义立方贴图纹理属性
name ("display name", Float) = number
定义浮点数属性
name ("display name", Vector) =(number,number,number,number)
定义一个四元素的容器(相当于Vector4)属性
Material:使用的地方是在SubShader中的一个Pass{ }中新开一个Material{ }块,包含了包含材质如何和光线产生作用的一些设置
Diffuse Color(R,G,B,A)
漫反射颜色构成。这是对象的基本颜色。
Ambient Color(R,G,B,A)
环境色颜色构成.这是当对象被RenderSettings.中设定的环境色所照射时对象所表现的颜色。
Specular Color(R,G,B,A)
对象反射高光的颜色。(R,G,B,A)四个分量分别代表红绿蓝和Alpha,取值为0到1之间。
Shininess Number
加亮时的光泽度,在0和1之间。0的时候你会发现更大的高亮也看起来像漫反射光照,1的时候你会获得一个细微的亮斑。
Emission Color
自发光颜色,也就是当不被任何光照所照到时,对象的颜色。(R,G,B,A)四个分量分别代表红绿蓝和Alpha,取值为0到1之间。
SubShader的Tags块
Tags { "TagName1" ="Value1" "TagName2" = "Value2" }
队列标签(Queue tag):
后台(Background) - 这个渲染队列在所有队列之前被渲染,被用于渲染天空盒之类的对象。
几何体(Geometry,默认值)- 这个队列被用于大多数对象。 不透明的几何体使用这个队列。
透明(Transparent) - 这个渲染队列在几何体队列之后被渲染,采用由后到前的次序。任何采用alpha混合的对象(也 就是不对深度缓冲产生写操作的着色器)应该在这里渲染(如玻璃,粒子效果等)
覆盖(Overlay) - 这个渲染队列被用于实现叠加效果。任何需要最后渲染的对象应该放置在此处。(如镜头光晕等)