Realtime Shadow Mapping Shadow Mapping Shadow mapping uses

  • Slides: 17
Download presentation
Real-time Shadow Mapping

Real-time Shadow Mapping

Shadow Mapping • Shadow mapping uses two-pass rendering - render depth texture from the

Shadow Mapping • Shadow mapping uses two-pass rendering - render depth texture from the light’s point-of-view - render from the eye’s point-of-view using depth texture • Completely image-space implementation - no knowledge of scene’s geometry is required - must deal with aliasing artifacts

(First Pass(1 • The scene is rendered from the light’s point of view into

(First Pass(1 • The scene is rendered from the light’s point of view into the depth texture

(First Pass(2 • The result is a “depth texture” or “shadow map” - essentially

(First Pass(2 • The result is a “depth texture” or “shadow map” - essentially a 2 D function indicating the depth of the closest pixels to the light

Second Pass • The scene is rendered from the eye’s point of view •

Second Pass • The scene is rendered from the eye’s point of view • For each rasterized fragment - determine fragment’s XYZ position relative to the light - this light position should be setup to match the frustum used to create the depth texture - compare the depth value at light position XY in the depth texture to fragment’s light position Z

Depth Texture (Comparison(1 • Two values - A = Z value from depth texture

Depth Texture (Comparison(1 • Two values - A = Z value from depth texture at fragment’s light XY position - B = Z value of fragment’s XYZ light position • If B is greater than A, then there must be something closer to the light than the fragment so the fragment is in shadow • If A and B are approximately equal, the fragment is lit

Depth Texture (Comparison(2

Depth Texture (Comparison(2

Depth Texture (Comparison(3 The A < B shadowed fragment case

Depth Texture (Comparison(3 The A < B shadowed fragment case

Depth Texture (Comparison(4 The A = B shadowed fragment case

Depth Texture (Comparison(4 The A = B shadowed fragment case

Using Projective (Texturing(1

Using Projective (Texturing(1

Using Projective (Texturing(2 • Normal 2 D texture mapping uses (s, t) coordinates •

Using Projective (Texturing(2 • Normal 2 D texture mapping uses (s, t) coordinates • Now consider homogeneous texture coordinates - r/q holds the distance from the light - (s, t, r, q) --> (s/q, t/q, r/q) - similar to homogeneous clip coordinates where (x, y, z, w) = (x/w, y/w, z/w) • Next compare texture value at (s/q, t/q) to value r/q - if texture[s/q, t/q] r/q then not shadowed - if texture[s/q, t/q] < r/q then shadowed

Ambient Shadows • Improvement for completely black shadows

Ambient Shadows • Improvement for completely black shadows

Near and Far planes • Distance between near and far planes should be minimized

Near and Far planes • Distance between near and far planes should be minimized for better precision of Z value

Z-Fighting • Problem take place when eye space pixel coordinates are transformed into light

Z-Fighting • Problem take place when eye space pixel coordinates are transformed into light space to get the respective depth texture samples due to machine rounding errors in this stage

Aliasing Problems • There is still the problem of aliasing

Aliasing Problems • There is still the problem of aliasing

Summary

Summary

Implementation • First pass uses the Open. Scene. Graph library which based on Open.

Implementation • First pass uses the Open. Scene. Graph library which based on Open. GL • Second pass is done by hardware using cg and glsl language shaders