void LightDir_float(out float3 Direction){
    #ifdef SHADERGRAPH_PREVIEW
    Direction = float3(0, 1, 0);
    #else
    Direction = GetMainLight().direction;
    #endif
}

half GetMainLightShadowFade_alt(float3 positionWS)
{
    float4 MainLightShadowParams = float4(1,1,1,1);

    float3 camToPixel = positionWS - _WorldSpaceCameraPos;
    float distanceCamToPixel2 = dot(camToPixel, camToPixel);

    float fade = saturate(distanceCamToPixel2 * float(MainLightShadowParams.z) + float(MainLightShadowParams.w));
    return half(fade);
}

SAMPLER(sampler_LinearClamp);
void Test_float (float3 WorldPos, out float3 ShadowCoord, out float ShadowDepth, out float4x4 ShadowMatrix, out float4 CascadeSphere, out float Fade){
	#ifdef SHADERGRAPH_PREVIEW
        ShadowCoord = float3(0, 0, 0);
		ShadowDepth = 1;
        ShadowMatrix = 0;
        CascadeSphere = 0;
        Fade = 0;
	#else
        
        ShadowSamplingData samplingData = GetMainLightShadowSamplingData();
        Fade = GetMainLightShadowFade_alt(WorldPos);

		#if defined(_MAIN_LIGHT_SHADOWS_SCREEN) && !defined(_SURFACE_TYPE_TRANSPARENT)
		float4 shadowCoord = ComputeScreenPos(TransformWorldToHClip(WorldPos));
		#else
		float4 shadowCoord = TransformWorldToShadowCoord(WorldPos);
		#endif
        ShadowCoord = shadowCoord;

        // Hard Shadows
        ShadowDepth = SAMPLE_TEXTURE2D_LOD(_MainLightShadowmapTexture, sampler_LinearClamp, shadowCoord.xy, 0).r;  

#ifdef _MAIN_LIGHT_SHADOWS_CASCADE
    int cascadeIndex = ComputeCascadeIndex(WorldPos);
#else
    int cascadeIndex = 0;
#endif

    if (cascadeIndex == 0 ){
        CascadeSphere = _CascadeShadowSplitSpheres0;
    }else if (cascadeIndex == 1 ){
        CascadeSphere = _CascadeShadowSplitSpheres1;
    }else if (cascadeIndex == 2){
        CascadeSphere = _CascadeShadowSplitSpheres2;
    }else if (cascadeIndex == 3){
        CascadeSphere = _CascadeShadowSplitSpheres3;
    }else{
        CascadeSphere = 0;
    }
    if (BEYOND_SHADOW_FAR(shadowCoord)){
        CascadeSphere = 1;
    }
    ShadowMatrix = 0;
	#endif
}
        
void SampleCascadeSpheres_float (out float4 sphere0, out float4 sphere1,out float4 sphere2,out float4 sphere3){
	#ifdef SHADERGRAPH_PREVIEW
        sphere0 = float4(1,1,1,1);
        sphere1 = float4(1,1,1,1);
        sphere2 = float4(1,1,1,1);
        sphere3 = float4(1,1,1,1);
	#else
        sphere0 = _CascadeShadowSplitSpheres0;
        sphere1 = _CascadeShadowSplitSpheres1;
        sphere2 = _CascadeShadowSplitSpheres2;
        sphere3 = _CascadeShadowSplitSpheres3;
    #endif
}