Skip to main content
SoC2006 Shadows         Extending, Demo-ing, and Documenting the Shadow Mapping System - GSoC 2006

Summer of Code 2006: Extending, Demo-ing, and Documenting the Shadow Mapping System

Student: Hamilton Chong (peridexion)

Mentor: Steve Streeting (sinbad)

Status: Incorporated into Eihort (OGRE 1.4)

Objective

I propose to extend OGRE’s real-time shadowing system and provide demos, tutorials, and documentation so that developers may easily leverage OGRE’s shadow capabilities.
This plan consists of 3 main parts:

  1. Implementing Plane Optimal Shadow Mapping: With almost no computational overhead and at most a screen resolution’s worth of shadow samples, it is possible to guarantee pixel perfect shadowing on a chosen plane of interest (quality on other planes is not guaranteed to be perfect, but in practice off-plane quality is still good). Implementation will make use of the customizable frusta for shadow setup. This allows applications with dominant and nearly planar shadow receivers (e.g., ground, wall) to achieve very good shadowing no matter the camera and light configuration.
  2. Demo code showcasing existing/new methods: as noted in the Help Requested section of the wiki, there is interest in generating more examples that help developers take advantage of shadow mapping, percentage closest filtering, and custom shadow map setups (this last one in particular).
  3. Documentation: tutorial for newbies to easily set up OGRE with shadowing. Also highlight practical and theoretical considerations when choosing between shadow variants.


The above 3 items are the key aims. As time permits, I will also work on various other add-ons to the system.

Progress

Done!

Checked in:

  • sample project that demonstrate custom shadow maps
  • OgreMain code for custom shadow camera setups
  • sample project that demonstrates custom shadow camera usage
  • documentation on shadows (algorithm, variants, analysis, implementation)




Code provides GLSL, HLSL, and Cg implementations to support both OpenGL and DirectX.