ZP+: correct Z-pass stencil shadows

We present a novel algorithm for the rendering of hard shadows
cast by a point light source. The well-known Z-pass method for
rasterizing shadow volumes is not always correct. Our algorithm,
which we call ZP+, elegantly corrects Z-pass defects. ZP+
takes advantage of triangle strips and fast culling capabilities
of graphics hardware not available to conventional robust methods
like Z-fail. While Z-fail can be up to 80% slower than Z-pass,
our new method ZP+ is typically less than 10% slower than
Z-pass. Finally, we give a comparison of the three methods. When a
scene is geometry-bound, ZP+ is always faster than Z-fail. We
also explain why, in some situations, Z-pass (hence ZP+) is
surprisingly slower than Z-fail on more recent graphics hardware.