Shader的其他属性及其使用规则都在源码中注释了,在这里不在赘述
参考代码如下:
//定义Shader 的名字 不要求和文件的名字一样
//YY是Shader的目录 MyShader是Shader 的名字
Shader"YY/01 MyShader"{
//属性部分 只能有一块
//属性中的代码是没有分号的
Properties{
//属性
//"_Color"是自定义的 "Color"是自定义的 Color是固定的 (1,1,1,1)使用的是RGBA颜色系统
_Color("Color",Color) = (1,1,1,1) //对应float4类型
//向量
_Vector("Vector",Vector) = (1,2,3,4)//对应float4类型
//整型
_Int("Int",Int) = 12//对应float类型
//浮点类型
_Float("Float",Float) = 12.0//对应float类型
//设置一个范围
_Range("Range",Range(1,11)) = 6//对应float类型
//2D纹理
_2D("Texture",2D) = "white"{}//对应sampler2D类型
//立方体贴图
_Cube("Cube",Cube) = "white"{}//对应samplerCube类型
//3D纹理
_3D("Texture",3D) = "white"{}//对应sampler3D类型
}
//子Shader块 类似类 一个Shader中可以有很多Shader 为了适配不同种类的显卡
//显卡运行效果的时候 从第一个SubShader开始,如果第一个SubShader里面的效果都可实现,那么就使用第一个SubShader,如果显卡发现这个SubShader里面某些效果实现不了,它会自动运行下一个SubShader
SubShader{
//pass块类似方法 可以有很多pass块 至少有一个Pass块
//在pass内部写Shader代码
pass {
//声明包含Cg代码的块
//Cg代码中的是要使用分号隔开的
CGPROGRAM
//使用Cg语言编写Shader代码
//_Color 和属性中的变量保持一致 由于Color类型是4个分量组成 所以在这里使用float4代替
//在Cg块中使用属性的值需要在声明一次
float4 _Color;
float4 _Vector;
float _Int;
float _Range;
sampler2D _2D;
samplerCube _Cube;
sampler3D _3D;
ENDCG
} //这里面没有分号的
}
//如果上面的所有的SubShader都不满足 则执行备用方案 VertexLit 是一个Shader的名字 直接指定名称即可
FallBack "VertexLit"
}