//shadow pass ShadowVertexToPixel ShadowVS( float4 inPos : POSITION) { ShadowVertexToPixel Output = (ShadowVertexToPixel)0; float4x4 preWorldViewProjection = mul(xWorld, xSunViewProjection[xShadowMapIndex]); Output.Position =mul(inPos, preWorldViewProjection); Output.Depth.rba = 1; Output.Depth.g = Output.Position.z / ( 2000); return Output; } float4 ShadowPS(ShadowVertexToPixel PSIn): COLOR0 { half4 White = {PSIn.Depth.g,PSIn.Depth.g, PSIn.Depth.g ,1}; return White; } //scene pass TerrainVertexToPixel ColoredVS( float4 inPos : POSITION, float4 inColor: COLOR, float3 inNormal: NORMAL) { TerrainVertexToPixel Output = (TerrainVertexToPixel)0; float4x4 preSunWorldViewProjection = mul (xWorld, xSunViewProjection); Output.ProjectedCoords = mul(inPos, preSunWorldViewProjection); Output.Position = mul(inPos, xWorldViewProjection); Output.Color = inColor; Output.Normal = mul(normalize(inNormal), xWorld); return Output; } float4 ColoredPS(TerrainVertexToPixel PSIn) :COLOR0 { float2 projectedTexCoords; float lightingfactor = 1; projectedTexCoords[0] = (ProjectedCoords.x / ProjectedCoords.w / 2.0f) + 0.5f; projectedTexCoords[1] = (-ProjectedCoords.y / ProjectedCoords.w / 2.0f) + 0.5f; half4 depth = {0,0,0,0}; depth = tex2D(Shadowmap, projectedTexCoords); //this is the depth check if((ProjectedCoords.z/2000) < depth.r) depth.r *= 0; lightingfactor -= depth.r*1000.5f; color.a = 1; return color; }