Combining shadow map passes

Started by
3 comments, last by 3DModelerMan 9 years, 8 months ago

I'm working on my rendering engine, and I've got all the core features that I'm basing it around working. I've already got dynamic shader generation, const buffer management, texture management, etc. all implemented. Now I'm trying to work on shadow mapping though, and I'm not sure how to combine the results of multiple shadow passes.

I already have a system for rendering shadow maps for each light, but after I've rendered my regular diffuse+specular shading pass, how do I combine the shadow map passes? Are shadow maps generally combined using blend states? It would probably work well for simple cases, but what if I have lights illuminating part of another shadow? Then both shadows will just draw on top of each other as one combined shadow. If I just blend the shadows at half opacity though, then they won't properly block shading in un-shadowed areas.

Advertisement

Practically, while calculating the effect of each light, you should apply the shadow map as a multiplier to the diffuse/specular values. So, while calculating the lighting, you'll need to have access to the shadow map(s) and the matrices which allow you to transform a point to the shadow space.

You can't apply the shadows afterwards, ie. no blending operator will produce the correct results.

Cheers!

So the shadow maps should be generated first and the lighting for those lights done at the same time then? What about when I have to run multiple passes? This is just an example, because I probably wouldn't need this many shadow casting lights, but If I light four spot lights with shadows, and then I make a pass for directional lighting, how do I combine those? Since I'm doing shading with the shadows, do I just additively blend the lighting results?

You can render the lights additively (as you stated) to a render target. I think that it is easier to have all the shadow maps rendered at this point (ie. you'll need to update the shadow maps before calculating lighting). Of course, you'll need some texture memory for storing the shadow maps which probably isn't a big problem.

Additive blending can be used for any kind of multipass lighting with or without shadowmaps. You can even calculate multiple lights in one pass.

Cheers!

Okay, that makes sense now. Thanks for the help.

This topic is closed to new replies.

Advertisement