Shader "chicai/6"{
Properties{
_Specular("Specular",Color)=(1,1,1,1)
_Glass("Glass",Range(8,20))=8
_MainTex("MainTex",2D)="white"{}
}
SubShader{
Pass{
Tags{"RenderMode"="ForwardBase"}
CGPROGRAM
fixed4 _Diffuse;
fixed4 _Specular;
float _Glass;
sampler2D _MainTex;
float4 _MainTex_ST;
#include "Lighting.cginc"
#pragma vertex vert
#pragma fragment frag
struct a2v{
float4 vertex:POSITION;
float3 normal:NORMAL;
float4 texcoord:TEXCOORD0;
};
struct v2f{
float4 position:SV_POSITION;
fixed3 nor:COLOR0;
fixed3 lightDir:COLOR1;
fixed3 viewDir:COLOR2;
float2 uv:TEXCOORD0;
};
v2f vert(a2v o){
v2f f;
f.position = UnityObjectToClipPos(o.vertex);
f.nor = normalize(mul(unity_ObjectToWorld,o.normal));
f.lightDir = normalize(WorldSpaceLightDir(o.vertex));
f.viewDir = normalize(WorldSpaceViewDir(o.vertex));
f.uv = o.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw;
return f;
}
fixed4 frag(v2f f):SV_Target{
fixed3 texCol = tex2D(_MainTex,f.uv);//计算该uv上贴图的颜色,当物体本身颜色——Diffuse
fixed3 diffuseCol = _LightColor0.rgb * texCol * (dot(f.nor,f.lightDir)/2+0.5);
fixed3 aveDir = normalize(f.lightDir+f.viewDir);//光照方向和视野方向的平分线
fixed3 specularCol = _LightColor0.rgb * _Specular * pow(max(dot(aveDir,f.nor),0),_Glass);
fixed3 allColor = diffuseCol + specularCol;
return fixed4(allColor,1);
}
ENDCG
}
}
}