Shader "Paco/NormalDirection/Vertex" { Properties { _Positive ("Positive", Color) = (0.737931,1,0,1) _Negative ("Negative", Color) = (0,0.9044118,0.8295637,1) [MaterialToggle] _UseNegative ("Use Negative", Float ) = 0 [MaterialToggle] _XZAxis ("X / Z Axis", Float ) = 0 _SmoothLight ("Smooth Light", Range(0, 1)) = 1 [MaterialToggle] _ShowNormalDirection ("Show Normal Direction", Float ) = 0.475862 } SubShader { Tags { "RenderType"="Opaque" } Pass { Name "FORWARD" Tags { "LightMode"="ForwardBase" } CGPROGRAM #pragma vertex vert #pragma fragment frag #define UNITY_PASS_FORWARDBASE #include "UnityCG.cginc" #pragma multi_compile_fwdbase_fullshadows #pragma multi_compile_fog #pragma only_renderers d3d9 d3d11 glcore gles #pragma target 3.0 uniform float4 _Negative; uniform fixed _ShowNormalDirection; uniform fixed _XZAxis; uniform float4 _Positive; uniform fixed _UseNegative; uniform float _SmoothLight; struct VertexInput { float4 vertex : POSITION; float3 normal : NORMAL; float4 vertexColor : COLOR; }; struct VertexOutput { float4 pos : SV_POSITION; float3 normalDir : TEXCOORD0; float4 vertexColor : COLOR; UNITY_FOG_COORDS(1) }; VertexOutput vert (VertexInput v) { VertexOutput o = (VertexOutput)0; o.vertexColor = v.vertexColor; o.normalDir = UnityObjectToWorldNormal(v.normal); o.pos = UnityObjectToClipPos( v.vertex ); UNITY_TRANSFER_FOG(o,o.pos); return o; } float4 frag(VertexOutput i) : COLOR { i.normalDir = normalize(i.normalDir); float3 normalDirection = i.normalDir; ////// Lighting: float2 node_2973 = normalDirection.rb; float _XZAxis_var = lerp( node_2973.r, node_2973.g, _XZAxis ); float node_8533 = (_SmoothLight*48.0+2.0); float3 NormalDir = normalDirection; float3 finalColor = lerp( lerp(i.vertexColor.rgb,saturate(( lerp(_Negative.rgb,_Positive.rgb,lerp(1.0,saturate(((100.0*_XZAxis_var)*0.5+0.5)),_UseNegative)) > 0.5 ? (1.0-(1.0-2.0*(lerp(_Negative.rgb,_Positive.rgb,lerp(1.0,saturate(((100.0*_XZAxis_var)*0.5+0.5)),_UseNegative))-0.5))*(1.0-i.vertexColor.rgb)) : (2.0*lerp(_Negative.rgb,_Positive.rgb,lerp(1.0,saturate(((100.0*_XZAxis_var)*0.5+0.5)),_UseNegative))*i.vertexColor.rgb) )),floor(saturate(lerp(_XZAxis_var,abs(_XZAxis_var),_UseNegative)) * node_8533) / (node_8533 - 1)), NormalDir, _ShowNormalDirection ); fixed4 finalRGBA = fixed4(finalColor,1); UNITY_APPLY_FOG(i.fogCoord, finalRGBA); return finalRGBA; } ENDCG } } FallBack "Diffuse" }