Shader"practice/diffuse and specular"{
Properties{
_Diffuse("diffuseColor",color)=(1,1,1,1)
_Specular("SpecularSize",Range(0,1))=0.01
}
SubShader{
Pass{
Tags{"LightMode"="ForwardBase"}
CGPROGRAM
#pragma vertex vert //取得一个直射光的颜色
#pragma fragment frag
#include"Lighting.cginc"
fixed4 _Diffuse;
float _Specular;
struct a2v{
float4 vertex:POSITION;
float3 normal:NORMAL;
};
struct v2f{
float4 position:SV_POSITION:
fixed3 color:COLOR;
};
v2f vert(a2v v){
v2f;
f,position=mul(UNITY_MATRIX_MVP,v.vertex);
fixed3 ambient =UNITY_LIGHTMODER_AMBIENT;//环境光
//计算漫反射和颜色应用
fixed3 normalDir=normalize(mul(v.normal,unity_WorldToObject));
fixed3 lightDir=normalize(_WorldSpaceLightPos0.xyz);
fixed diffuse =_LightColor0.rgb*max(dot(normalDir,lightDir),0)*_Diffuse;//色彩=光的rgb*cos(法线和光线的夹角)*物体的颜色
//计算高光的颜色(实则在所有的点再重新计算一遍)
fixed3 reflectDir=normalize( reflect(-lightDir,normalDir) );
fixed3 viewDir=normalize(_WorldSpaceCameraPos.xyz-mul(v.vertex,unity_WorldToObject));
fixed3 specular=_LightColor0*pow(max(dot(reflectDir,viewDir),0),1/specular); //Specular=直射光 * pow( max(cosθ,0),10) θ:是反射光方向和视野方向的夹角
f.color=diffuse+ambient+specular;
return f;
}
fixer4 frag(v2f f):SV_Target{
return fixed(f.color,1);
}
ENDCG
}
]
Fallback"Mobile/VertexLit"
}