///////depth map struct VS_OUT { float4 hPosition : POSITION; float4 Position : TEXCOORD0; }; VS_OUT hDepthVS(float4 position : POSITION, uniform float4x4 worldView, uniform float4x4 worldViewProj) { VS_OUT OUT; OUT.hPosition = mul(worldViewProj, position); OUT.Position = mul(worldView, position); OUT.Position.z *= -1.0; return OUT; } float4 DepthPS(VS_OUT IN ):COLOR { float dist = length(IN.Position.xyz); return float4(dist, dist, dist, 1); //return 1; } ///////////////Shadow struct VS_OUT_SHADOW { float4 hPosition : POSITION; float4 Position : TEXCOORD0; float4 cPosition : TEXCOORD1; }; VS_OUT_SHADOW depthShadowVS(float4 position : POSITION, uniform float4x4 world, uniform float4x4 worldView, uniform float4x4 worldViewProj) { VS_OUT_SHADOW OUT; OUT.hPosition = mul(worldViewProj, position); OUT.Position = mul(world, position); OUT.cPosition = mul(worldView, position); return OUT; } float4 depthShadowPS(VS_OUT_SHADOW IN, uniform float4x4 lightView, uniform float4x4 lightViewProj, uniform float4x4 lightView2, uniform float4x4 lightViewProj2, uniform sampler2D depthShadowMap : register(s0), uniform sampler2D depthShadowMap2 : register(s1)):COLOR { float bias = 0.06; float4 shadowColor = float4(0.6, 0.6, 0.6, 1.0); float4 light1 = float4(1,1,1,1); float4 lightCamPos1 = mul(lightView, IN.Position); float d1 = length(lightCamPos1.xyz); float4 lightScreenPos1 = mul(lightViewProj, IN.Position); lightScreenPos1 = lightScreenPos1 / lightScreenPos1.w ; lightScreenPos1 = ( lightScreenPos1 + 1.0 ) / 2.0; lightScreenPos1.y = 1.0 - lightScreenPos1.y; float4 storedDepth1 = tex2D(depthShadowMap, lightScreenPos1.xy); if(storedDepth1.r + bias < d1) light1 = shadowColor; return light1; }