Phong light model in vertex shader go with a strange result

Shader "custom/diffuseinvertice" {
	Properties {
		_diffuse ( "diffuse", Color ) = (1, 1, 1, 1)
	}
	SubShader {
		Pass {
			Tags { "LightMode" = "ForwardBase" }

			CGPROGRAM 

			#pragma vertex vert
			#pragma fragment frag

			#include "lighting.cginc"

			fixed4 _diffuse;

			struct a2v {
				float4 vertex : POSITION;
				float3 normal : NORMAL;
			};

			struct v2f {
				float4 pos : SV_POSITION;
				fixed3 color : COLOR0;
			};

			v2f vert ( a2v v ){
				v2f o;
				o.pos = UnityObjectToClipPos ( v.vertex );

				float3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;

				float3 wdnormal = normalize ( mul ( v.normal, (float3x3) unity_WorldToObject ) );
				float3 wdlightdir = normalize ( _WorldSpaceLightPos0.xyz );
				float3 diffuse = _LightColor0.rgb * _diffuse *  max ( 0, dot ( wdnormal, wdlightdir ) );

				o.color =  ambient + diffuse ;

				return o;
			}

			fixed4 frag ( v2f i ) : SV_Target {
				return fixed4 ( i.color , 1.0 );
			}

			ENDCG

		}
	}
	Fallback Off
}

i have found it is the function saturate () that make the thing strange, but why?

there is no saturate in your code, so i don’t see how that could be the problem. if i’m being honest this looks pretty normal as far as vertex lighting goes. how did you intend for it to look? i may be able to help you get closer as i use vertex lighting extensively.