Sign in to follow this  
lipsryme

Shadow Mapping using a fullscreen quad

Recommended Posts

lipsryme    1522
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:
[CODE]

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;
}
[/CODE]


Can someone tell me what I'm fundamentally doing wrong ? [img]http://public.gamedev.net//public/style_emoticons/default/tongue.png[/img] Edited by lipsryme

Share this post


Link to post
Share on other sites
jeffkingdev    787
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.

Share this post


Link to post
Share on other sites
lipsryme    1522
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...):
http://www.youtube.com/watch?v=Xjc2lImNY18&amp;amp;feature=youtu.be
I've updated the code on my first post. Edited by lipsryme

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