Jump to content

View more

Image of the Day

Adding some finishing touches...
Follow us for more
#screenshotsaturday #indiedev... by #MakeGoodGames https://t.co/Otbwywbm3a
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

Sign up now

Shadow Mapping using a fullscreen quad

4: Adsense

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 lipsryme   Members   


Posted 14 December 2012 - 03:59 PM

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;
		ShadowTerm = 1.0f;

	return ShadowTerm;

Can someone tell me what I'm fundamentally doing wrong ? Posted Image

Edited by lipsryme, 15 December 2012 - 02:48 PM.

#2 jeffkingdev   Members   


Posted 14 December 2012 - 07:05 PM

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!

#3 lipsryme   Members   


Posted 15 December 2012 - 07:54 AM

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.

Edited by lipsryme, 16 December 2012 - 06:15 PM.

#4 lipsryme   Members   


Posted 17 December 2012 - 07:54 AM

Anything ?

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.