Sign in to follow this  
Followers 0
he3117

Bug in my shadow map

3 posts in this topic

Hi
I'm working on shadow mapping for my Game engine and I have a big problem.It makes me crazy and I can't find it for last week of debugging. [img]http://public.gamedev.net//public/style_emoticons/default/sad.png[/img]

The problem is my shadow maps work when objects are fix.But after moving the light or other objects it doesn't work any more.When I want to debug it by PIX it shows the correct image in PIX.[img]http://public.gamedev.net//public/style_emoticons/default/huh.png[/img] Also after resetting the device(for device lost)It shows the correct image before moving the light or other objects.After a while this shadow complettly disappears.
It seems vertex shader for deph pass uses incorrect matrix but I can't find the problem.[img]http://public.gamedev.net//public/style_emoticons/default/dry.png[/img]
P.S:I'm using deferred shading.
[source lang="cpp"]float4x4 WorldViewProjection;



struct VertexShaderInput
{
float4 Position : POSITION0;

};

struct VertexShaderOutput
{
float4 Position : POSITION0;
float2 Depth : TEXCOORD0;
};

VertexShaderOutput VertexShaderFunction(VertexShaderInput input)
{
VertexShaderOutput output;

//float4 worldPosition = mul(World,input.Position);
//float4x4 worldview = mul(World, View);
//worldview = mul(worldview, Projection);
//output.Position = mul(input.Position,worldview);
output.Position = mul( WorldViewProjection,input.Position);


//output.Depth = worldPosition-SpotlightPosition;
output.Depth.x = output.Position.z;
output.Depth.y = output.Position.w;

return output;
}
struct PixelShaderOutput
{
float4 Depth : COLOR0;
};

PixelShaderOutput PixelShaderFunction(VertexShaderOutput input): COLOR0
{

PixelShaderOutput output;
//float4 l=input.Depth-SpotlightPosition;
//input.Depth/=input.Depth.w;
//output.Depth =float4(0,0,0,0); //output Depth

output.Depth =input.Depth.x/input.Depth.y; //output Depth


return output;
}

technique buildPass
{
pass Pass1
{
VertexShader = compile vs_2_0 VertexShaderFunction();
PixelShader = compile ps_2_0 PixelShaderFunction();

}
}
[/source]




First image is the image befor rotating the car.
[attachment=12619:first.JPG]


second image is what I see after rotating the car.
[attachment=12620:second.JPG]

Third pic is what I see in PIX
[attachment=12621:pic_from_pix.jpg]
0

Share this post


Link to post
Share on other sites
Sounds like you're not clearing (setting all values to a clip-far value) your shadow map before rendering.
1

Share this post


Link to post
Share on other sites
I clear it correctly.There should be some thing wrong with matrix but I can't find it.Because PIX doesnt show any error.[img]http://public.gamedev.net//public/style_emoticons/default/ohmy.png[/img]
0

Share this post


Link to post
Share on other sites
[quote name='eppo' timestamp='1354743288' post='5007530']
Sounds like you're not clearing (setting all values to a clip-far value) your shadow map before rendering.
[/quote]

Finally I found it.:lol: The problem was Zbuffer.It couldn't clear the Zbuffer.
From MSDN:
IDirect3DDevice9::Clear will fail if you:
1-Try to clear either the depth buffer or the stencil buffer of a render target that does not have an attached depth buffer.
2-Try to clear the stencil buffer when the depth buffer does not contain stencil data.

Mine was case 2.
1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0