From BlenderWiki

Jump to: navigation, search
Note: This is an archived version of the Blender Developer Wiki. The current and active wiki is available on wiki.blender.org.

Joseph Eagar

joeedh@gmail.com

Proposal to Add Deep Shadow Maps to Blender

Introduction

Deep shadow maps is the technique of creating filtered shadow buffers with color and transparency information. They allow much more realistic shadows, including the ability to actually mipmap a shadow buffer, a very important feature for larger shadow buffers, and also the ability to create motion-blurred shadow buffers.

Because of their ability to store transparency information, Deep Shadow Maps are also well-suited for rendering shadows of volumetric objects, such as clouds or smoke.

Since by their nature, Deep Shadow Maps consume a great deal of memory, a caching/compression scheme will be implemented to conserve RAM.

The caching scheme for deep shadow maps will be extended to image buffers, if time permits.

User Impact

Users will be beneficially impacted by Deep Shadow Maps. Transparent/colored shadows will no longer be a ray tracing-only option. Hair shadows will render much more realistically.

Deliverables/Schedule

  • Create a simple Deep Shadow Map implementation, with transparent/colored shadows.
  • Implement a compressed cache scheme to conserve RAM.
  • Implement mipmapping for deep shadow maps.
  • Implement motion blurring for deep shadow maps.
  • Extend cache system to image buffers.
  • If time permits, write volumetric system for rendering halo shadows.

Details

Deep shadow maps are, at their most basic form, an abuffer with slightly different oversampling techniques then used in normal rendering.

"Abuffers" are simple zbuffer rasterizers that store multiple Z-samples per pixel, one for each transparent face encountered. In the case of deep shadow maps, each pixel inside the map stores alpha and color for every Z-sample visible from the light source

Deep shadow maps can be filtered in a way similar to anti-aliasing. They can be mipmapped, allowing for more accurate, faster shadows during rendering. Since they support transparency, deep shadow maps can also be rendered with motion blur, allowing for properly motion-blurred shadows.

The disadvantage of deep shadow maps is their RAM consumption; because they have to store so much data, they take a great deal of RAM. To compensate for this, a tiling caching system will be implemented. This system will swap shadow map tiles out to disk as needed to keep RAM consumption below a user-defined limit.

Bio

I am a 20 year old student, attending Northern Arizona University in Arizona, USA. I have experience working with Blender's codebase, including the render code.

I've been coding in C for 5 years, and I've been working with Blender's code for the past 3. I've coded a ray tracing system, a scanline renderer, a fairly complete GUI library, and a (incomplete) DAG node-based audio editor system.

In addition to C, I'm also proficient in C++ (5 years), Python (4 years), Visual Basic 6.0, with lesser experience in PHP and Perl.