//从这里指定Shader的名字,不要求跟文件名保持一致
Shader "MyShader/Demo1"{
//属性
Properties{
_Color("Color",Color) = (1,1,1,1)//float4
_Vector("Vector",Vector)=(1,1,1,1)//float4
_Float("Float",Float)=0.1//float
_Int("Int",Int)=123//float
_Range("Range",Range(0,12))=1//float
_Texture("Texture",2D) = "red"{}
_Cube("Cube",Cube) = "white"{}
_3D("Texture3D",3D) = "black"{}
}
/*SubShader可以写很多个,显卡运行效果的时候,从第一个SubShader开始如果效果都可以实现,那么就使用第一个SubShader,如果显卡这个SubShader里面有写效果
实现不了,他会自动选择可以实现的*/
SubShader{
//至少有一个Pass
Pass{
//在这里填写Shader代码
CGPROGRAM
//使用CG语言编写shader代码 属性的定义需要在shader中再声明一下才可以使用
float4 _Color;//float half fixed
float3 t1;//half3 fixed3
float2 t2;//half2 fixed2
float4 _Vector;
float _Float;
float _Int;
float _Range;
sampler2D _Texture;
samplerCube _Cube;
sampler3D _Texture;
//float 32位来存储
//half 16位存储 -6W~+6W
//fixed 11位 -2~+2 比如颜色0-1就可以使用fixed存储
ENDCG
}
}
FallBack "VertexLit"
}
Properties中属性的定义作用是可以在程序运行过程中或者editor下调整输入参数,或者在代码中Get,Set,而在Shader中真正的使用则还需要再次声明一下
所有使用float的地方都可以使用 half或者fixed代替,区别在于三者的精度不同,比如坐标我们可以使用float4来表示,而颜色的范围只有0-1,使用32位的float来存储就是浪费显存,使用fixed就比较合适。