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 } } }