float4 frag(VertexOut i, uint facing : SV_IsFrontFace) : SV_Target
{
	#K#FRAGMENT_SHADOW_FIRSTLINE
	
	UNITY_SETUP_INSTANCE_ID(i);
	UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);

	#K#FRAGMENT_SHADOW_DECLARATIONS

	#K#FRAGMENT_SHADOW_INIT_EARLY
	#K#FRAGMENT_SHADOW_INIT
	#K#FRAGMENT_SHADOW_INIT_LATE

	#K#FRAGMENT_SHADOW_COLOR_EARLY
	#K#FRAGMENT_SHADOW_COLOR
	#K#FRAGMENT_SHADOW_COLOR_LATE




	//UNITY_BRANCH
	if (_IgnoreFog == 0)
	{
		UNITY_APPLY_FOG(i.fogCoord, poiFragData.finalColor);
	}

	#K#FRAGMENT_SHADOW_RETURN
	
	if (_Mode == POI_MODE_OPAQUE)
	{
		poiFragData.alpha = 1;
	}
	
	clip(poiFragData.alpha - _Cutoff);

	// Encode normal into RGB channels (normalize to ensure unit length)
	float3 normal = normalize(i.normal);
	
	// Remap from [-1,1] to [0,1] range
	float3 normalColor = normal * 0.5 + 0.5;
	
	// Output RGB = encoded normal, A = 1
	return float4(normalColor, 1);
}