Monday, May 24, 2010

Adrian Got Shadow Mapping

I've finally finished adding another feather in the HD league. Shadows are a good way of showing the object positions etc in the world. I've finally added the ShadowMapping pass to our codebase and have actually cleaned up the code a little to treat the Shaders as objects rather than just the GLuint handles. Any way It's far from perfect, the aliasing effect is pretty evident.. the depth map is pretty high res (equal to the size of the rendering buffer) but the artifacts are there because of the huge frustum size that i had to specify for the light so as to fit the whole map.

Any way It's a good start. Ill' be looking out for ways to fix this but for now I think this is a good feature to have. Finally one of the games i created.. has shadows :D

It took me a while to get the thing working.. i was stuck with various silly problems.. but im' glad i got it done. For some tech details.. here is the sequence that i use to get the shadow rendering done. (Note .. the shadow map is rendered before every frame even for the static objects (map) but that's the only solution when we don't have a proper terrain etc to do shadow mapping offline and use that.)

  • Create FrameBuffer with DepthBuffer only
  • Enable and Set PolygonOffset(1.0, 1.0) // generally used value.
  • Render The scene you want to get a shadow of (map + hero) from lights perspective
  • Store the light matrix.(Light_MVP)
  • Disable PolygonOffset
  • Use Vertex and Fragment shaders for setting the color based on shadow map. (depth buffer sent as texture and is the ShadowMap)
  • Send the Light_MVP to shader using mat4 uniform variable. (not using the texture matrix hack, coz this is cleaner to me).
You can check out the code @code.google.com/p/adrian

No comments:

Post a Comment