Skip to main content
GameDev.net gamedev.net
🔒 Locked 🎮 Unity

Shadow maping in deferred render

Started by adrian_134 Jan 14, 2012 at 6:26 PM 2 replies 1.8k views
Original Post
adrian_134
adrian_134
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.
Tsus
Tsus
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!
adrian_134
adrian_134
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.

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.