iDevGames Forums
2d shadow blending problems - Printable Version

+- iDevGames Forums (http://www.idevgames.com/forums)
+-- Forum: Development Zone (/forum-3.html)
+--- Forum: Graphics & Audio Programming (/forum-9.html)
+--- Thread: 2d shadow blending problems (/thread-8733.html)



2d shadow blending problems - tesil - Mar 16, 2011 05:08 PM

I used this article...

http://archive.gamedev.net/reference/articles/article2032.asp

...to create a 2d game with dynamic hard shadows with lights.

Here's how rendering works:

For each light:
(1) clear the color buffer's alpha components to all 0s (by drawing calling glColorMask(0,0,01) and drawing a screen sized quad with a 0 alpha)
(2) draw light map (using glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA))
(3) draw shadow geometry for the current light (basically just draw polygons containing an alpha of 0.0 using (using glBlendFunc(GL_ZERO,GL_ZERO).
(4) draw sprites (using glBlendFunc(GL_DST_ALPHA, GL_ONE)).


(For simplicities sake assume that 0.0 is my default ambient light setting)

The problem is, say you have 2 lights overlapping one another. Light one is drawn first, followed by it's shadows (light 1's shadow polygon s will write 0.0s into the alpha buffer), followed by light 2 (which will brighten light 1's shadow polygons), followed by light 2's shadow polygons which will be 0.0 (darker than light 1's shadow polygons) since light 2 and its shadows are drawn after light 1 and no other light will be drawn after light 2. So you see light 2 ends up with darker shadows than light 1.

I'm sure I'm probably overlooking something obvious, but not matter how hard I try I cannot seem to overcome this problem.


RE: 2d shadow blending problems - Skorche - Mar 17, 2011 10:12 AM

You have to render the shadow mask separately. You don't render the light, then darken it by the shadows. You render a mask for the shadows, then use this mask to prevent the lighting from ever showing up in the first place.