Shadow Mapping using a fullscreen quad

Started by
2 comments, last by lipsryme 11 years, 4 months ago
Hey guys, if you've read my old thread where I tried to implement deferred cascaded shadow maps using MJP's examples...
Basically what I did was delete everything and start from the basics.
I've (for now) manually defined my view and orthographic projection and been trying to project this onto my scene.
The shadow map works fine. My problem (still) seems to be with the actual projection.

What I do is pretty simple:


VSO VS(VSI input)
{
VSO output = (VSO)0;

output.Position = float4(input.Position.xyz, 1.0f);
output.UV = input.UV;

output.PositionVS = mul(input.Position, InverseProjection).xyz;

return output;
}


float4 PS(VSO input) : SV_TARGET0
{
float4 output = float4(0.0f, 0.0f, 0.0f, 1.0f);

float depth = DepthTarget.Sample(PointSampler, input.UV).r;
float3 viewRay = input.ViewRay.xyz;
float4 PositionVS = float4(viewRay * depth, 1.0f);

float4x4 ViewToLightViewProj = mul(InverseView, LightViewProjection);
float4 PositionLS = mul(PositionVS, ViewToLightViewProj);

float LightDepth = PositionLS.z / PositionLS.w;

float2 ShadowUV = PositionLS.xy / PositionLS.w;
ShadowUV.x = ShadowUV.x / 2.0f + 0.5f;
ShadowUV.y = ShadowUV.y / -2.0f + 0.5f;

float ShadowTerm = 0;

float sample0 = ShadowMap.Sample(PointSampler, ShadowUV).x;
if(sample0 < LightDepth)
{
ShadowTerm = 0.0f;
}
else
{
ShadowTerm = 1.0f;
}


return ShadowTerm;
}



Can someone tell me what I'm fundamentally doing wrong ? tongue.png
Advertisement
I worked on CSM recently myself, although not in GLSL. Although the concept should be the same.

How many Cascades do you have? I noticed your not figuring out which cascade your in before doing a lookup in your shadow map. I assume your shadow map contains 3 or 4 different views?

What helped for me was to do each step individually and have something visible to see each step.

1) Draw a visualization of your view frustum with your 3 or 4 splits
2) Setup a camera you can switch to to see the orthographic view of a particular split
3) Render all splits to a single texture and display that on-screen.
4) Render red/blue/green/purple into that texture representing each split and map it on to your terrain based on your current view.
5) Finally, instead of the colors project your actual shadow map on to the terrain.

Doing each step helped me reenforce what I was doing along the way. Then you can work on each step and figure out what's wrong easier.

Good luck!
Jeff.
Hi jeffkingdev,

I'm currently not trying to do CSM at all, just a simple 1 shadow map approach to start from that and build upon if it works. :)
I've done this before in a forward approach which worked. Now there must be something different doing it in a fullscreen quad, when reconstructing the world position in the pixel shader. Any ideas ?
There's not really a lot of deferred shadow mapping with directional light tutorials out there :/

Update: I think I'm slowly getting somewhere (or not...):

I've updated the code on my first post.
Anything ?

This topic is closed to new replies.

Advertisement