1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| Shader "MyShader/Chapter 6/specular_frag"{ Properties{ _Diffuese("Diffuse",Color)=(1,1,1,1) _Specular("Specular",Color)=(1,1,1,1) _Gloss("Gloss",Range(8.0,256))=20 } SubShader{ Pass{ Tags{"LightMode"="ForwardBase"} CGPROGRAM
#pragma vertex vert #pragma fragment frag
#include "Lighting.cginc"
fixed4 _Diffuese; fixed4 _Specular; float _Gloss;
struct a2v{ float4 vertex:POSITION; float3 normal:NORMAL; }; struct v2f{ float4 pos:SV_POSITION; float3 worldNormal:TEXCOORD0; float3 worldPos:TEXCOORD1; }; v2f vert(a2v v){ v2f o; o.pos=UnityObjectToClipPos(v.vertex); o.worldNormal=mul(v.normal,(float3x3)unity_WorldToObject); o.worldPos=(unity_ObjectToWorld,v.vertex).xyz; return o; } fixed4 frag(v2f i):SV_Target{ fixed3 ambient=UNITY_LIGHTMODEL_AMBIENT.xyz; fixed3 worldLight=normalize(_WorldSpaceLightPos0.xyz); float3 worldNormal=normalize(i.worldNormal); fixed3 diffuse=_LightColor0.rgb*_Diffuese.rgb*saturate(dot(worldNormal,worldLight));
fixed3 reflectDir=(normalize(reflect(-worldLight,worldNormal))); fixed3 viewDir=normalize(_WorldSpaceCameraPos.xyz-i.worldPos); fixed3 specular=_LightColor0.rgb*_Specular.rgb*pow(saturate(dot(reflectDir,viewDir)),_Gloss);
fixed3 color=ambient+diffuse+specular; return fixed4(color,1.0); } ENDCG
} }Fallback "DIFFUSE" }
|