Jump to content
  • Advertisement
Sign in to follow this  
adrian_134

Shadow maping in deferred render

This topic is 2524 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello!

I have problem with shadow maping in deferred render. For shading object, in pixel shader directional light i use this code:

// Compute screen-space position
float4 position;
position.x = input.TexCoord.x * 2.0f - 1.0f;
position.y = -(input.TexCoord.x * 2.0f - 1.0f);
position.z = depthVal;
position.w = 1.0f;
// Transform to world space
position = mul(position, InvertViewProjection);
position /= position.w;

// ----------------------- Shadow ---------------
float4 lightScreenPos = mul(position, lightViewProjection);
lightScreenPos /= lightScreenPos.w;

// Find sample position in shadow map
float2 lightSamplePos;
lightSamplePos.x = lightScreenPos.x / 2.0f + 0.5f;
lightSamplePos.y = -lightScreenPos.y / 2.0f + 0.5f;


float m = 0.2f;
float depthInMap = tex2D(shadowTextureSampler, lightSamplePos);
float distance = lightScreenPos.z;
if((distance - 0.0001f) <= depthInMap)
{
m = 1.0f; // Is in light
}
diffuseLight.rgb *= m;

I want get m = 1.0f when is in light or 0.2f when is in shadow but when i using this code all my objects are in shadow or are illuminated this is the screen:
http://www.coubetech...blika.pl/11.jpg

When i turn and move my camera i getting somfing like this:
http://www.coubetech....pl/dserror.jpg

I thing the problem is in the pixel shader becouse this code working correctly for forward rendering (picture in left side). I don't know where is the problem, meybe in lightScreenPos calculations, but what could be wrong ? Directional light working correctly, i have problem only with shadow map.

Share this post


Link to post
Share on other sites
Advertisement
Hi there!

Have you noticed your typo here?

position.y = -(input.TexCoord.x * 2.0f - 1.0f);


I'd rather expect something like this:

position.y = -(input.TexCoord.y * 2.0f - 1.0f);


Cheers!

Share this post


Link to post
Share on other sites
Thank you, now it's working very good. I was looking for the problem very long timg, i don't know how i can't saw this notice. Thank you very much.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!