Hardware-accelerated Rendering of Antialiased Shadows With Shadow Maps Stefan Brabec and Hans-Peter Seidel Max-Planck-Institut für Informatik Saarbrücken, Germany
Stefan Brabec, MPI Informatik Overview Introduction Shadow mapping using graphics hardware Hardware-based percentage closer filtering A faster approach Results Conclusions
Stefan Brabec, MPI Informatik Introduction Hardware-accelerated rendering mostly dominated by local effects – Triangle through-put – Fast lighting & texturing Most important global effect are shadows – Two main classes of shadow algorithms Shadow Volumes [Crow ’77] Shadow Maps [Williams ’78]
Stefan Brabec, MPI Informatik Shadow Mapping Sampling based approach – Generate depth map from light source position Store depth values of frontmost pixels – Final rendering pass Foreach pixel seen by the camera: –Transform to light source coordinate system –Compare corresponding entry in depth map with transformed camera depth
Stefan Brabec, MPI Informatik Shadow Mapping Shadow Maps – Make their way to hardware SGI InfiniteReality, NVIDIA GeForce3, ATI – Implemented as special texture map operation Compare value at (s/q,t/q) with r/q -> result 1 or 0 – Can also be implemented using standard OpenGL
Stefan Brabec, MPI Informatik Shadow Mapping Pros: – Does not depend on scene geometry – Can be implemented using graphics-hardware Cons: – Sampling problems (aliasing) High resolution depth maps Filtering
Stefan Brabec, MPI Informatik Shadow Mapping Percentage closer filtering [Reeves `87] – Filtering depth values makes no sense – Perform shadow test before filtering
Stefan Brabec, MPI Informatik Shadow Mapping Our Shadow Mapping Approach – Render scene as seen by light source – Encode depth values in alpha channel – Project this texture into the final scene – Subtract depth values to determine lit pixels
Stefan Brabec, MPI Informatik Shadow Mapping 1D ramp texture brings depth to color values
Stefan Brabec, MPI Informatik Hardware-based PCF How can Reeves’ scheme be adopted for hardware-based shadow mapping ? Idea: – Generate multi-channel depth map where each entry contains also values of neighborhood pixels
Stefan Brabec, MPI Informatik Shadow Mapping Problem: 1D ramp texture can only use 256 depth values because of frame buffer depth – Only for scenes with moderate complexity But: 16 bits possible with NVIDIA’s register combiners – Use two color channels (high & low 8 bits) – See NVIDIA website for more details
Stefan Brabec, MPI Informatik Hardware-based PCF Multi-channel shadow map – Use RGBA instead of alpha channel only 4 values to sample a 2x2 region Increases effective shadow map resolution by a factor of 2 in each dimension – Shadow map generation: Render scene four times where in each pass –One channel (R,G,B or A) is selected –Image-plane is jittered (stratified sampling) Copy RGBA image to texture
Stefan Brabec, MPI Informatik Hardware-based PCF Stratified sampling and pixel packing
Stefan Brabec, MPI Informatik Hardware-based PCF Computing the percentage of shadowing – Final pass using all four channels R = camera_z – light_z_sample_1 G = camera_z – light_z_sample_2 B = camera_z – light_z_sample_3 A = camera_z – light_z_sample_4 – Channel is in shadow if value > 0
Stefan Brabec, MPI Informatik Hardware-based PCF Computing the percentage of shadowing – Implemented using OpenGL Imaging Subset 64,63 corresponds to 25 % shadow Sums up to 255 for full shadow
Stefan Brabec, MPI Informatik Hardware-based PCF Larger filter sizes possible – Split up into parts of max. 4 components – Sum up shadow contributions using the accumulation buffer Problem: – Number of rendering passes (scene geometry) not really practical for dynamic scenes
Stefan Brabec, MPI Informatik Fast PCF Problem: – Previous algorithm needs four passes only for shadow map generation Unsuitable for very complex scenes Fast PCF: – Use only one rendering pass and collect neighborhood pixels
Stefan Brabec, MPI Informatik Fast PCF Fast PCF filtering and pixel packing
Stefan Brabec, MPI Informatik Fast PCF Collect pixels using convolution Currently the only hardware-accelerated operation to include information from adjacent pixels
Stefan Brabec, MPI Informatik Fast PCF Center pixel consists of RGBA values taken from lower-left 2x2 region Use larger (3x3) filter for best hardware support Assemble pixels using neighborhood channels
Stefan Brabec, MPI Informatik Fast PCF Texture coordinate offset – Shift center pixel to be centered in 2x2 region
Stefan Brabec, MPI Informatik Fast PCF Fast PCF only uses one rendering pass for shadow map generation – Suitable for larger filter sizes – Example: 4x4 footprint Four passes which will sample the lower right, lower left, upper right and upper left 2x2 region Results in 4*5=20 shadowing levels Four shadow map textures used
Stefan Brabec, MPI Informatik Results without filtering
Stefan Brabec, MPI Informatik Results normal PCF (filter size 2x2)
Stefan Brabec, MPI Informatik Results fast PCF (filter size 2x2)
Stefan Brabec, MPI Informatik Results real PCF vs. fast PCF
Stefan Brabec, MPI Informatik Results fast,multipass PCF (filter size 4x4)
Stefan Brabec, MPI Informatik Results Timings & Overview No filtering PCF 2x2 Fast PCF 2x2 PCF 4x4 30 fps 10 fps 20 fps < 0.5 fps 1 pass 4 passes 1 pass 16 passes 2 levels 5 levels 20 levels Fast PCF 4x45 fps4 passes20 levels Machine: SGI Octane VPro/8 Image Resolution: 800x600 Shadow Map: 512x512 Polygons: 7000 Frame rateGenerationShadowing
Stefan Brabec, MPI Informatik no filtering
Stefan Brabec, MPI Informatik fast PCF (filter size 2x2)
Stefan Brabec, MPI Informatik Conclusions Benefits: – Good-looking, anti-aliased shadows – Hardware-based (fast) – Standard OpenGL Drawbacks: – OpenGL Imaging Subset not everywhere available – Depth to color mapping needs more than 8 bits per channel for complex scenes
Stefan Brabec, MPI Informatik Conclusions Future Work: – Now: only constant filter sizes – Better: mipmap-like method to compute filter size using the projected area
Stefan Brabec, MPI Informatik Thank You ! Visit us at Max-Planck-Institut für Informatik Computer Graphics Group