Shader "Unlit/NormalTangent"
{
Properties
{
_Color ( "Color Tint" , Color) = ( 1 , 1 , 1 , 1 )
_MainTex ( "Main Tex" , 2 D) = "While" { }
_BumpMap ( "Normal Map" , 2 D) = "bump" { }
_BumpScale ( "Bump Scale" , Float) = 1.0
_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 _Color;
sampler2D _MainTex;
float4 _MainTex_ST;
sampler2D _BumpMap;
float4 _BumpMap_ST;
float _BumpScale;
fixed4 _Specular;
float _Gloss;
struct a2v {
float4 vertex : POSITION;
float3 normal : NORMAL;
float4 tangent : TANGENT;
float4 texcoord : TEXCOORD0;
} ;
struct v2f {
float4 pos : SV_POSITION;
float4 uv : TEXCOORD0;
float3 lightDir : TEXCOORD1;
float3 viewDir : TEXCOORD2;
} ;
v2f vert ( a2v v) {
v2f o;
o. pos = UnityObjectToClipPos ( v. vertex) ;
o. uv. xy = v. texcoord. xy * _MainTex_ST. xy + _MainTex_ST. zw;
o. uv. zw = v. texcoord. xy * _BumpMap_ST. xy + _BumpMap_ST. zw;
TANGENT_SPACE_ROTATION;
o. lightDir = mul ( rotation, ObjSpaceLightDir ( v. vertex) ) . xyz;
o. viewDir = mul ( rotation, ObjSpaceViewDir ( v. vertex) ) . xyz;
return o;
}
fixed4 frag ( v2f i) : SV_Target{
fixed3 tangentLightDir = normalize ( i. lightDir) ;
fixed3 tangentViewDir = normalize ( i. viewDir) ;
fixed4 packedNormal = tex2D ( _BumpMap, i. uv. zw) ;
fixed3 tangentNormal;
tangentNormal = UnpackNormal ( packedNormal) ;
tangentNormal. xy *= _BumpScale;
tangentNormal. z = sqrt ( 1.0 - saturate ( dot ( tangentNormal. xy, tangentNormal. xy) ) ) ;
fixed3 albedo = tex2D ( _MainTex, i. uv) . rgb * _Color. rgb;
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT. xyz * albedo;
fixed3 diffuse = _LightColor0. rgb * albedo * max ( 0 , dot ( tangentNormal, tangentLightDir) ) ;
fixed3 halfDir = normalize ( tangentLightDir + tangentViewDir) ;
fixed3 specular = _LightColor0. rgb * _Specular * pow ( max ( 0 , dot ( tangentNormal, halfDir) ) , _Gloss) ;
return fixed4 ( ambient + diffuse + specular, 1.0 ) ;
}
ENDCG
}
}
Fallback "Specular"
}