Shadowing Techniques

advertisement
4.3. LIGHTING AND SHADING
Exploration of advanced lighting and shading techniques
Exploration of different shadowing techniques
Video not available in on-line slides
Shadowing Techniques
Applying shadows to a rendered scene increases realism and provides an
important visual cue for object depth and position.
The two most common shadowing approaches within real-time game
engines are:
•
Shadow maps
•
Shadow volumes
Shadow Volumes
This is a geometry based approach, extruding
geometry in the forward direction of the light
to generate a closed ‘shadow’ volume.
By testing against the shadow volume the
shadowed portions of the scene can be
determined (the stencil buffer can be used to
record the lit area).
Shadow volumes are pixelaccurate and don’t suffer from
any aliasing problems. However,
the computational cost is
geometry dependent and the
approach is fill-rate intensive
(shadow maps are often faster).
Shadow Volumes
View the DirectX SDK Shadow Volume sample
Shadow Maps
A shadow map is a rendering
from the light’s perspective
where the depths to ‘lit’
fragments are stored.
The shadow map texture is
used, when rendering the scene
from the camera’s perspective,
to compare the distance from
the pixel to be lit with the depth
value encoded in the shadow
map.
If the depth is larger than the
value stored in the shadow map
then the pixel is in shadow.
Shadow Maps
The quality of the shadow
map is dependent upon the
size of the generated
shadow map.
Shadow Maps: Creating the Shadow Map
• Render the scene from the light's
point of view (point light - suitable
perspective projection, directional orthographic projection). The
depth map is typically stored as a
texture.
• As only the depth information is
needed, all unnecessary lighting,
texturing, etc. can be excluded
from the shadow map render. Not
all objects need be drawn to the
shadow map, with only important
‘shadow casting’ objects selected.
Shadow Maps: Creating the Shadow Map
• If the light does not move and
the shadow casting geometry
does not move, then the shadow
map need not be recalculated
and can be cached/reused.
Multiple lights require multiple
depth maps.
• A depth offset shifting the
objects away from the light is
typically applied to remove
stitching problems (where the
depth map value is very close to
the depth of the surface being
drawn).
Shadow Maps: Using the Shadow Map
When drawing the scene from the normal camera viewpoint the shadow
map is used to:
• Find the position of the pixel as seen from the light
• Compares the position-to-light distance to the stored depth map value
• Draw the pixel as in shadow or in light, as needed
Shadow Mapping
View the DirectX SDK Shadow Mapping example
Shadow Maps: Extensions
The principle behind shadow mapping is straightforward. The
implementation can be problematic as:
• It can be difficult to select an appropriate bias value
• It can be hard to remove artefacts at shadow edges or handle small
viewing angles.
Shadow Maps: Extensions
Screen Space Blurred Shadow Mapping
Percentage Closer Filtering
Shadows are rendered to a texture (in
screen space) and the texture then blurred
and later applied to the screen. Very easy
to implement, but can suffer from shadow
bleeding and the cost of the extra passes.
The result of the depth comparison
are filtered, e.g. when comparing
depths, some depths around the
target position are also compared,
with the result averaged.
Shadow Maps: Extensions
Cascaded Shadow Mapping
View the DirectX SDK Cascaded Shadow Maps
and Variance Shadows examples
Exploration of in-game ambient occlusion
Ambient Occlusion
Ambient occlusion adds realism by taking into account attenuation of light
due to occlusion. It attempts to approximate the way light radiates in real
life (including off what are normally considered non-reflective surfaces).
Ambient occlusion is a global method (unlike Phong shading which is a
local method), meaning the illumination at each point is a function of other
geometry in the scene.
Ambient Occlusion
Ambient occlusion is most often calculated by casting rays in every direction
from the surface. Rays which reach the background or “sky” increase the
brightness of the surface, whereas a ray which hits any other object
contributes no illumination.
As a result, points
surrounded by a
large amount of
geometry are
rendered dark,
whereas points with
little geometry on
the visible
hemisphere appear
well lit.
Video not available in on-line slides
Screen Space Ambient Occlusion
SSAO is a recent
technique (introduced
within the game
Crysis) which is
capable of creating an
approximation of
ambient occlusion by
using the depth of the
rendered scene.
It works by comparing the current fragment depth with a selection of
random sample depths around it to see if the current depth is occluded or
not. The current fragment is occluded if the sample is closer to the eye than
the surrounding fragments.
Whilst the approach is very simple, it is also highly effective.
Screen Space Ambient Occlusion: Approach
• For every pixel, a shader samples the
surrounding depth values to measure
occlusion from each of the sampled points.
• Sampling is performed using a randomly-
rotated kernel (repeated every N screen
pixels), ensuring that only high-frequency
noise is introduced in the final output.
• The noise can be mostly removed using a
NxN post-process blurring step taking into
account depth discontinuities.
• The approach permits the number of
depth samples to be reduced to about 16
per pixel (enabling real-time application)
whilst providing a high quality result.
Directed reading concerning lighting and shadowing
Directed reading: Shadowing
• Read Projective Texture Mapping – for information on
projective texturing (underpinning shadow mapping)
• Read DevMaster - Shadow Mapping and Shadow Volumes
– for an excellent introduction to shadowing
• Read GDC - Shadow Mapping GPU-based Tips and
Techniques – exploring different approaches to shadow
mapping
Directed reading: Shadowing
• Read GPU Gems - Efficient Shadow
Volume Rendering – for information
on how to render shadow volumes
• Read GDC - Advanced Soft Shadow
Mapping Techniques – exploring
shadow map softening techniques
• Read High-Quality Adaptive Soft
Shadow Mapping – for an example of
ongoing research
• Read GPU Gems - Shadow Map
Antialiasing – for information on
efficient dithering
Directed reading: Ambient Occlusion
• Read GPU Gems – Ambient Occlusion –
providing a good overview of AO
• Read GPU Gems 2 – Ambient Occlusion
and Indirect Lighting – exploring forms
of indirect lighting
• Read Hardware Accelerated Ambient
Occlusion Techniques on GPUs –
provided an excellent account of GPU
screen-space AO
• More generally explore
gamerendering.com on other aspects of
lighting: http://www.gamerendering.com/category/lighting/
Summary
Today we
explored:
 Different
types of
shadow
techniques
 Ambient
occulusion
Download