//shadows under car
// ---- Created with 3Dmigoto v0.6.164 on Thu Aug  7 20:35:59 2025

cbuffer _Globals : register(b0)
{
  row_major float4x4 g_SMapTM[4] : packoffset(c101);
  float4 g_DbgColor : packoffset(c117);
  float4 g_FilterTaps[8] : packoffset(c118);
  float4 g_FadingParams : packoffset(c126);
  float4 g_CSMRangesSqr : packoffset(c127);
  float2 g_SMapSize : packoffset(c128);
  float4 g_CameraOrigin : packoffset(c129);
}

cbuffer cb13 : register(b13)
{
  float4 cb13[100];
}

cbuffer cb10 : register(b10)
{
  float4 cb10[100];
}


SamplerState TMU0_Sampler_sampler_s : register(s0);
SamplerState TMU1_Sampler_sampler_s : register(s1);
Texture2D<float4> TMU0_Sampler : register(t0);
Texture2D<float4> TMU1_Sampler : register(t1);


// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);


void main(
  float4 v0 : SV_Position0,
  float4 v1 : TEXCOORD0,
  float4 v2 : TEXCOORD1,
  float4 v3 : TEXCOORD2,
  float4 v4 : TEXCOORD3,
  float4 v5 : TEXCOORD4,
  float4 v6 : TEXCOORD5,
  float4 v7 : TEXCOORD6,
  out float4 o0 : SV_Target0)
{
  float4 r0,r1,r13,r14,r10,r12;
  uint4 bitmask, uiDest;
  float4 fDest;
  
float4 s = StereoParams.Load(0);
float4 testeo = IniParams.Load(int2(90,0));   

	r0.x = TMU0_Sampler.Sample(TMU0_Sampler_sampler_s, v1.xy).x;
  
float depth = r0.x;  

   r0.xyz = v2.xyz * r0.xxx +  g_CameraOrigin.xyz ;
  

  

float fov = sqrt(cb13[0].x*cb13[0].x+cb13[0].y*cb13[0].y+cb13[0].z*cb13[0].z);
r0.x += s.x * (depth - (s.y * cb13[5].w))  * (cb13[6].x * -cb13[5].y/fov);
r0.y += s.x * (depth - (s.y * cb13[5].w))  * (cb13[6].y * -cb13[5].y/fov);
r0.z += s.x * (depth - (s.y * cb13[5].w))  * (cb13[6].z * -cb13[5].y/fov);



  
  r1.xyz = v4.xyz * r0.yyy;
  r0.xyw = r0.xxx * v3.xyz + r1.xyz;
  r0.xyz = r0.zzz * v5.xyz + r0.xyw;
  r0.xyz = v6.xyz + r0.xyz;
  //r0.z = saturate(-0.15 + abs(r0.z));
  r0.z = saturate(0.25 + abs(r0.z));

  
  r0.xy = max(v7.xy, r0.xy);
  r0.xy = min(v7.zw, r0.xy);
  

  
  r0.x = TMU1_Sampler.Sample(TMU1_Sampler_sampler_s, r0.xy).x;
  


  
  r0.y = r0.z * r0.z;
  r0.y = r0.y * r0.y;
  r0.x = r0.y * r0.y + r0.x;
  r0.x = v1.z + r0.x;
  o0.xyzw = saturate(r0.xxxx);
  

  
  return;
}



