Robust Stencil Shadow Volumes. CEDEC 2001 Tokyo, Japan

Similar documents
Acknowledgement: Images and many slides from presentations by Mark J. Kilgard and other Nvidia folks, from slides on developer.nvidia.

CSE 167: Introduction to Computer Graphics Lecture #18: More Effects. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2016

Overview. A real-time shadow approach for an Augmented Reality application using shadow volumes. Augmented Reality.

Last Time. Why are Shadows Important? Today. Graphics Pipeline. Clipping. Rasterization. Why are Shadows Important?

Real-Time Shadows. Computer Graphics. MIT EECS Durand 1

Computer Graphics Shadow Algorithms

For Intuition about Scene Lighting. Today. Limitations of Planar Shadows. Cast Shadows on Planar Surfaces. Shadow/View Duality.

Volume Shadows Tutorial Nuclear / the Lab

Real-Time Shadows. Last Time? Today. Why are Shadows Important? Shadows as a Depth Cue. For Intuition about Scene Lighting

Lecture 17: Shadows. Projects. Why Shadows? Shadows. Using the Shadow Map. Shadow Maps. Proposals due today. I will mail out comments

What for? Shadows tell us about the relative locations. Vienna University of Technology 2

Optimized Stencil Shadow Volumes. Cass Everitt & Mark J. Kilgard

Last Time. Reading for Today: Graphics Pipeline. Clipping. Rasterization

Real-Time Shadows. Last Time? Textures can Alias. Schedule. Questions? Quiz 1: Tuesday October 26 th, in class (1 week from today!

Real-Time Shadows. MIT EECS 6.837, Durand and Cutler

Real-Time Shadows. Last Time? Schedule. Questions? Today. Why are Shadows Important?

Shadow Volume History (1) Shadow Volumes. Shadow Volume History (2) Shadow Volume History (3) Shadow Volume Basics. Shadow Volume History (4)

Shadow Rendering EDA101 Advanced Shading and Rendering

Shadows in the graphics pipeline

Computergrafik. Matthias Zwicker. Herbst 2010

CMSC427 Advanced shading getting global illumination by local methods. Credit: slides Prof. Zwicker

Shadows. Real-Time Hard Shadows. Collected by Ronen Gvili. Most slides were taken from : Fredu Durand Stefan Brabec

The Traditional Graphics Pipeline

Computer Graphics. Shadows

graphics pipeline computer graphics graphics pipeline 2009 fabio pellacini 1

graphics pipeline computer graphics graphics pipeline 2009 fabio pellacini 1

Deferred Rendering Due: Wednesday November 15 at 10pm

Shadow Techniques. Sim Dietrich NVIDIA Corporation

Culling. Computer Graphics CSE 167 Lecture 12

TDA362/DIT223 Computer Graphics EXAM (Same exam for both CTH- and GU students)

Shadow Algorithms. CSE 781 Winter Han-Wei Shen

Projection Matrix Tricks. Eric Lengyel

Advanced Shading I: Shadow Rasterization Techniques

Computer Graphics 10 - Shadows

The Traditional Graphics Pipeline

Physically-Based Laser Simulation

Pipeline Operations. CS 4620 Lecture Steve Marschner. Cornell CS4620 Spring 2018 Lecture 11

Soft shadows. Steve Marschner Cornell University CS 569 Spring 2008, 21 February

Rasterization Overview

Computer Graphics. Bing-Yu Chen National Taiwan University The University of Tokyo

Texture Mapping II. Light maps Environment Maps Projective Textures Bump Maps Displacement Maps Solid Textures Mipmaps Shadows 1. 7.

CSE 167: Introduction to Computer Graphics Lecture #9: Visibility. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2018

Interpolation using scanline algorithm

Pipeline Operations. CS 4620 Lecture 14

The Traditional Graphics Pipeline

Real Time Reflections Han-Wei Shen

Computing Visibility. Backface Culling for General Visibility. One More Trick with Planes. BSP Trees Ray Casting Depth Buffering Quiz

Hidden surface removal. Computer Graphics

Page 1. Area-Subdivision Algorithms z-buffer Algorithm List Priority Algorithms BSP (Binary Space Partitioning Tree) Scan-line Algorithms

Abstract. 2 Description of the Effects Used. 1 Introduction Phong Illumination Bump Mapping

Direct Rendering of Trimmed NURBS Surfaces

Pipeline Operations. CS 4620 Lecture 10

Shadows in Computer Graphics. by Björn Kühl im/ve University of Hamburg, Germany

Computer Graphics. Bing-Yu Chen National Taiwan University

S U N G - E U I YO O N, K A I S T R E N D E R I N G F R E E LY A VA I L A B L E O N T H E I N T E R N E T

Shadows. COMP 575/770 Spring 2013

Computer Graphics. Lecture 9 Hidden Surface Removal. Taku Komura

CS 498 VR. Lecture 18-4/4/18. go.illinois.edu/vrlect18

A Shadow Volume Algorithm for Opaque and Transparent Non-Manifold Casters

Mach band effect. The Mach band effect increases the visual unpleasant representation of curved surface using flat shading.

CSE 167: Lecture #5: Rasterization. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2012

Motivation. Culling Don t draw what you can t see! What can t we see? Low-level Culling

Rendering. Converting a 3D scene to a 2D image. Camera. Light. Rendering. View Plane

TSBK03 Screen-Space Ambient Occlusion

CSE 167: Introduction to Computer Graphics Lecture #4: Vertex Transformation

Hardware-driven visibility culling

VISIBILITY & CULLING. Don t draw what you can t see. Thomas Larsson, Afshin Ameri DVA338, Spring 2018, MDH

CSE 167: Introduction to Computer Graphics Lecture #11: Visibility Culling

CS 381 Computer Graphics, Fall 2012 Midterm Exam Solutions. The Midterm Exam was given in class on Tuesday, October 16, 2012.

CS4620/5620: Lecture 14 Pipeline

FRUSTUM-TRACED RASTER SHADOWS: REVISITING IRREGULAR Z-BUFFERS

Recollection. Models Pixels. Model transformation Viewport transformation Clipping Rasterization Texturing + Lights & shadows

FRUSTUM-TRACED RASTER SHADOWS: REVISITING IRREGULAR Z-BUFFERS

Graphics and Interaction Rendering pipeline & object modelling

CSE 167: Introduction to Computer Graphics Lecture #10: View Frustum Culling

Here s the general problem we want to solve efficiently: Given a light and a set of pixels in view space, resolve occlusion between each pixel and

Midterm Exam Fundamentals of Computer Graphics (COMP 557) Thurs. Feb. 19, 2015 Professor Michael Langer

Triangle Rasterization

Applications of Explicit Early-Z Culling

Practical Shadow Mapping

Shadows. Shadows. Spatial relationship between objects. Shadows as depth cue. Spatial relationship between objects

Real Time Rendering of Expensive Small Environments Colin Branch Stetson University

Fondamenti di Grafica 3D The Rasterization Pipeline.

Illumination and Geometry Techniques. Karljohan Lundin Palmerius

Advanced Shading and Texturing

Simpler Soft Shadow Mapping Lee Salzman September 20, 2007

3D Viewing. CS 4620 Lecture 8

CSE 167: Introduction to Computer Graphics Lecture #5: Rasterization. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2015

LOD and Occlusion Christian Miller CS Fall 2011

Computer Graphics. Lecture 9 Environment mapping, Mirroring

CS 381 Computer Graphics, Fall 2008 Midterm Exam Solutions. The Midterm Exam was given in class on Thursday, October 23, 2008.

Problem Set 4 Part 1 CMSC 427 Distributed: Thursday, November 1, 2007 Due: Tuesday, November 20, 2007

Stencil Shadow Volumes

CEng 477 Introduction to Computer Graphics Fall 2007

CSE 167: Introduction to Computer Graphics Lecture #5: Projection. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2017

CS 354R: Computer Game Technology

Computer Graphics (CS 543) Lecture 10: Soft Shadows (Maps and Volumes), Normal and Bump Mapping

Hidden Surface Removal

CS 130 Final. Fall 2015

Shadows. Shadows. Thanks to: Frédo Durand and Seth Teller MIT. Realism Depth cue

Transcription:

Robust Stencil Shadow Volumes CEDEC 2001 Tokyo, Japan

Mark J. Kilgard Graphics Software Engineer NVIDIA Corporation 2

Games Begin to Embrace Robust Shadows 3 John Carmack s new Doom engine leads the way First-class lights Vital to the look of the engine Cinematic shadowing effects Scary scenes possible

Variety of Shadow Techniques 4 Projected planar shadows Shadow volumes Hybrid approaches Light maps

5 Stenciled Shadow Volumes Technique that Carmack is using for new Doom engine Shadow volumes Advantages Support omnidirectional lights Exact shadow boundaries Disadvantages Fill-rate intensive Expensive to compute shadow volumes Hard shadow boundaries, not soft shadows Difficult to implement robustly

Let Us Consider Omni-directional Shadowing 6 Situation: a light source centered in a room Dynamic characters in the room Everything should shadow everything This is a situation for stenciled shadow volumes Light source Light source

Review: Stenciled Shadow Volumes 7 A single point light source splits the world in two Shadowed regions Unshadowed regions Volumetric shadow technique A shadow volume is the boundary between these shadowed and unshadowed regions Determine if an object is inside the boundary of the shadowed region and know the object is shadowed First described by [Crow 77] By the way, Frank Crow works at NVIDIA now

Visualizing Shadow Volumes 8 Occluders and light source cast out a shadow volume Objects within the volume should be shadowed Light source Scene with shadows from an NVIDIA logo casting a shadow volume Visualization of the shadow volume

Shadow Volume Algorithm 9 High-level view of the algorithm Given the scene and a light source position, determine the shadow volume (harder than it sounds) Render the scene in two passes Draw scene with the light enabled, updating only fragments in unshadowed region Draw scene with the light disabled, updated only fragments in shadowed region But how to control update of regions?

2D Cutaway of a Shadow Volume 10 Light source Shadowing object Surface outside shadow volume (illuminated) Shadow volume (infinite extent) Eye position (note that shadows are independent of the eye position) Partially shadowed object Surface inside shadow volume (shadowed)

Tagging Pixels as Shadowed or Unshadowed 11 High-level algorithm does not say how to update only either pixels in or out of the shadow volume! The stenciling approach Clear stencil buffer to zero and depth buffer to 1.0 Render scene to leave depth buffer with closest Zs Render shadow volume into frame buffer with depth testing but without updating color and depth, but inverting a stencil bit This leaves stencil bit set within shadow!

Stencil Inverting of Shadow Volume 12 Why inverting stencil works Light source Shadowing object Two inverts, left zero One invert, left one Eye position Zero inverts, left zero

Visualizing Stenciled Shadow Volume Tagging 13 Shadowed scene Stencil buffer contents red = stencil value of 1 green = stencil value of 0 GLUT shadowvol example credit: Tom McReynolds

Computing Shadow Volumes 14 Harder than you might think Easy for a single triangle, just project out three infinite polygons from the triangle, opposite the light position But shadow volume polygons should not intersect each other for invert trick to work This makes things hard For complex objects, projecting object s 2D silhouette is a good approximation (flat objects are easy) Static shadow volumes can be pre-compiled

Computing Shadow Volumes For Polygonal Models 15 High-level: determine possible silhouette edges of the model Transform light into object space Compute the plane equation for every polygon in the model (can be pre-computed for static models) For every polygon in the model, determine if the object-space light position is behind or in front of the polygon s plane I.e., Is the planar distance from the polygon s plane to the light positive or negative? Search for edges where polygons have opposite facingness toward the light These edges are possible silhouette edges

Examples of Possible Silhouette Edges for Models 16 An object viewed from the same basic direction that the light is shining on the object has an identifiable light-view silhouette An object s light-view silhouette appears quite jumbled when viewed form a point-of-view that does not correspond well with the light s point-of-view

For Shadow Volumes With Intersecting Polygons 17 Use a stencil enter/leave counting approach Draw shadow volume twice using face culling 1st pass: render front faces and increment when depth test passes 2nd pass: render back faces and decrement when depth test passes This two-pass way is more expensive than invert And burns more fill rate drawing shadow volumes Inverting is better if all shadow volumes have no polygon intersections (very rare)

Why Increment/Decrement Stencil Volumes Work 18 Example in 2D Light source Shadowing object zero +1 zero Eye position +1 +2 +2 +3

Problems with Near Plane Clipping 19 Missed shadow volume intersection due to near clip plane clipping zero Far clip plane +1 +3 +2 +2 +1 zero Near clip plane

Capping Shadow Volumes at The Near Clip Plane 20 Missed shadow volume intersection now occurs on the near clip plane because shadow volume edge is capped; keeps shadow volume enter/leave counts correct zero +1 +3 +2 +2 +1 zero 3D version of the problem is harder than 2D case!

Shadow Volume Near Plane Clipping Artifacts Typically, shadow artifacts when light is behind objects Light source behind demon s head 21 Correct shadows: Near plane capped properly Incorrect shadows: Near plane NOT capped Incorrect shadows: Projection of silhouette edges to the near clip plane shows capping is responsible for the artifacts

Alternative to Near Plane Capping: Carmack s Reverse 22 Conventional shadow volume stencil usage Increment stencil when depth test passes for front facing shadow volume polygons Decrement stencil when depth test passes for back facing shadow volume polygons John Carmack [1998?] reverses this usage Increment stencil when depth test fails for back facing shadow volumes Decrement stencil when depth test fails for front facing shadow volume polygons

Implications of Carmack s Reverse 23 No longer have to worry about near clip plane capping But the reverse shifts the problem to that the far clip plane clipping shadow volumes Approach assumes that shadow volumes are truncated and capped after a certain finite distance that can never extend beyond the far clip plane Typically ok for attenuated lights Works ok because it is easier to move the far clip plane further out than move the near clip plane closer in

More Implications of Carmack s Reverse 24 Requires always truncating the shadow volumes and capping them some distance out Setting the far clip plane far in the distance to avoid shadow volume intersections does compromise the available depth buffer precision A light very close to a shadowing polygon can cast a shadow so large that it fails to extend far enough

Polygons Very Close to the Light Source Cause Problems 25 Capped shadow volumes work ok when the light is a reasonable distance from an occluder Capped shadow volumes eventually collapse into an increasingly marginal volume when the light gets extremely close

26 Carmack s Doom Solution Uses Carmack s reverse Support only attenuated lights Attenuation means illumination can be bounded Dynamically move far clip plane out to enclose light s maximum region of illumination Clip shadow volumes to eliminate light too close to shadowing polygon case Extra clipping work Optimize spotlights Exploits light s frustum

A New Robust Technique for Shadow Volume Capping 27 Use stenciled shadow volume conventionally Rather than using Carmack s Reverse Exploit rasterization with w=0 to draw semiinfinite polygons Details follow Adjust depth range and projection matrix to ensure crack free near clip plane capping Details follow Result: Robust stenciled shadow volume algorithm

28 Rasterize This Polygon (1,3,z0,1) (-1,-3,z1,1) (2,-2,z2,1)

29 Rasterize This Polygon (1,3,z0,1) (-1,-3,z1,1) (2,-2,z2,1)

Rasterize This Polygon, One Vertex has W=0 30 (1,3,z0,1) (-1,-3,z1,1) (2,-2,z2,0)

Rasterize This Polygon, One Vertex has W=0 31 (1,3,z0,1) (-1,-3,z1,1) (2,-2,z2,0)

32 Rasterize This Polygon (1,3,z0,1) (-1,-3,z1, 0) (2,-2,z2,0)

Rasterize This Polygon, Two Vertices have W=0 33 (1,3,z0,1) (-1,-3,z1,0) (2,-2,z2,0)

OpenGL Renders W=0 Polygons Correctly 34 OpenGL implementations are required to render triangles properly when vertices have w=0 Because of how the possible silhouettes for shadow volumes project on the near clip plane, rendering triangles with w=0 provides correct capping Because we really need to be rendering semiinfinite polygons That s what w=0 vertices are all about

Near Clip Plane Capping Cases 35 A possible silhouette is a loop of vertices on an occluding model Given a light position, this loop can be projected onto the near clip plane We are only interested in projecting AWAY from the light (shadows just project away from a light) Three possibilities 1. No vertices on the loop project away to the near clip plane (trivial case, no capping required) 2. All vertices on the loop project away to the near clip plane (easy capping case) 3. Some but not all of the loop vertices project away onto the near clip plane (hard capping case)

Handling the Trivial None Near Clip Plane Capping Case 36 None of the rays cast away from the light source intersect with the near clip plane Render a quad strip loop using possible silhouette vertices and infinite vertices (with w=0) where x, y, and z are the direction away from the light The w=0 vertices are easier to compute than trying to extend the shadow volume some sufficiently large finite distance Avoid all worries that the large finite distance used may not actually be sufficient

Handling the Easy Near Clip Plane Capping Case 37 Intersect each ray cast away from the light source with the near clip plane Render a quad strip loop using possible silhouette vertices and the near clip plane intersection positions Project all the model s triangles that are within the possible silhouette loop (i.e., facing away from the light) to the near clip plane and render them

Handling the Hard Near Clip Plane Capping Case (1) 38 In this case, the possible silhouette loop projects AWAY onto the near clip plane for some loop vertices, but not all Render a quad strip loop using possible silhouette vertices and a projected position If the ray cast from a loop vertex away from the light intersects the near clip plane, use the intersection position for the projected position Send two vertices for the quad strip loop: the loop vertex and its projected position Otherwise, Send two vertices for the quad strip loop: the loop vertex and its direction away from the light for XYZ and with w=0

Handling the Hard Near Clip Plane Capping Case (2) 39 For each triangle within the possible silhouette loop (i.e., facing away from the light) If all three vertices do not project AWAY to the near clip plane, skip this triangle If all three vertices do project AWAY to the near clip plane, render a triangle from these projected vertices If one or two vertices project AWAY to the near clip plane, but not all three, these are handled as described on the next two slides

Handling the Hard Near Clip Plane Capping Case (3) 40 If exactly one vertex projects AWAY to the near clip plane, render a triangle with this projected vertex and two vertices with w=0 as described The two remaining vertices are determined by computing the plane containing the light position, the single projected vertex position on the near clip plane, and one of the two remaining loop vertices Then take the cross product of the direction of this plane and the near clip plane Render a triangle with the single projected vertex position and two other vertices such that the XYZ of these two vertices is the direction vector result from the cross product and w=0

Handling the Hard Near Clip Plane Capping Case (4) 41 If exactly two vertices project AWAY to the near clip plane, render a quad with these two projected vertices and two other vertices with w=0 as described Determine the third vertex by computing the plane containing the light position, one of the two projected vertices, and the unprojected loop vertex Then take the cross product of the direction of this plane and the near clip plane The third vertex is such that XYZ is the direction vector results from the cross product and w=0 Compute the fourth vertex in the same manner using the remaining projected vertex

42 Hard Case Example Consider a point light source in a box open on one side, facing the viewer (a.k.a. the lantern case) Intersects the near clip plane +1 zero

43 Hard Case Example Lantern case requires w=0 capping Outward capping required Capping requires 4 w=0 quads rendered at the near clip plane +1 +1 zero +1 zero +1 +1 Side view Front view

44 Remaining Issues We must be extra careful to not introduce cracks when capping a stencil shadow volume at the near clip plane We expect to draw the model in object space so would naturally render the shadow volume and cap it in object space too The near clip plane capping must not introduce any T-junctions So far, we say that we are drawing the polygons at the near clip plane to cap our shadow volumes However, the near clip plane is a razor s edge where polygons exactly or nearly coincident with the near clip plane may indeed be clipped

Building a Ledge at the Front of the Depth Buffer 45 We would like to configure the depth buffer and projection matrix as follows: 0.05 ledge halfway Shadow volume depth range n'=0.0 n=0.1 Scene depth range f=1.0 The scene would be drawn in the range [0.1.. 1.0] The shadow volumes would be drawn in the range [ 0.0.. 1.0 ] Shadow volume capping would be drawn at 0.05, the ledge halfway plane Depth values from the scene and shadow volumes must be comparable

Shared Vertices for Shadow Volume Capping on Ledge 46 Boundary for shadow volume view frustum Boundary for scene view frustum zero Must share vertices to avoid cracks! +1 +2 +1 zero 0.05 ledge halfway Shadow volume depth range n'=0.0 n=0.1 Scene depth range f=1.0

Math for Building a Ledge At Front of Depth Buffer (1) 47 Setting depth range and projection matrix gldepthrange(f, n); gluperspective(fov, aspect, N, F); gluperspective builds 4x4 matrix Note: The Z row and only the Z row depends on F and N X and Y positions can & will be bit exact if only Z row changes fov/aspect 0 0 0 0 fov 0 0 0 0 (F+N)/(N-F) F) (2*F*N)/(N-F) F) 0 0-1 0

Math for Building a Ledge At Front of Depth Buffer (2) 48 Given n, f, N, and F, and a closer depth range near value n', can we determine a value N' for the gluperspective call that will make the depth values using n, f, N, and F comparable to the depth values generated using n', f, N', and F? Being comparable mathematically means: (f-n) 2 * (FN)/(N-F) F) z + (2*F*N)/(N-F) F) - z + (n+f) 2 = (f-n') 2 * (FN')/( )/(N'-F) z + (2*F*N')/( )/(N'-F) - z + (n'+f) +f) 2

Math for Building a Ledge At Front of Depth Buffer (3) 49 The expression (f-n) 2 (f-n') * (FN)/(N-F) F) z + (2*F*N)/(N-F) F) - z = (FN')/( )/(N'-F) z + (2*F*N')/( )/(N'-F) (n+f) 2 - z 2 does simplify so that z cancels out of the expression. This means z is comparable. Moreover, N' can be expressed in terms of n, f, N, F, and n': N' = * - (f - n) * F * N n * N - f * F - n' * (F - N) + + 2 (n'+f) +f)

Issue: How to Properly Tessellate Capping Polygons 50 Rendering polygons at near clip plane properly caps shadow volumes But proper capping is hard if you only assume that you know the outline Trivial to cap the outline of a single triangle Non-trivial if just given a complex shadow volume intersection with the near clip plane

Solution: Project Object Polygons to Near Plane 51 Tessellating from an outline is a hard problem Involved computational geometry problem But we have more information than the outline Capping tessellation on the near clip plane is really just a projection of object s back facing geometry (with respect to the light) onto the near clip plane So render the capping geometry on the near clip plane by projection object s back facing geometry to the near clip plane

Incrementing for Projected Polygons Causes Errors 52 Naively, increment stencil for projected capping polygons Consider the following two situations +1 +1 +1 +1 +1 +2 Good Case: Incrementing works correctly, all pixels inside outline are incremented Bad Case: But when interior vertex is outside of outline, incorrect double incrementing occurs outside the outline!

When Does the Bad Case Occur 53 Numerical error in transformation can lead to interior vertices that are barely outside of the outline when projected to screen space Trust me it happens If not corrected, double incrementing of regions that should not be incremented at all leads to spurious shadowed pixels Only a few pixels, but obvious Particularly obvious when animating

54 Example of Bad Case Bogus Shadowed polygonal region due to naïve capping Notice how the bogus shadowed polygon is near the capping outline

Examine the Bad Case in More Detail 55 Examine polygon facing-ness for the two example situations front-facing front-facing front-facing back-facing front-facing Good Case front-facing Bad Case

Solution: Increment Front Faces, Decrement Back Faces 56 Draw capping polygons twice Increment stencil for front faces Decrement stencil for back faces +1 +1 +1 +1-1 = 0 +1 +1 All faces front facing Region that was double incremented is now left zero because it is both incremented & decremented

57 Performance Implications Is drawing capping polygons twice expensive? Not really Most capping polygons are front-facing Rarely are back-facing polygons encountered When back-facing polygons occur, there is an extra overhead of incrementing and decrementing pixels (pixel touched twice for no net effect) Modern hardware culls wrong-facing polygons at amazing rates Hardware setup can cull 25+ million wrong-facing polygons per second Moreover, the alternative is bogus shadowing

High-level Shadow Volume Performance Optimization 58 Key performance problem with shadow volumes shadow volumes consume invisible fill rate If you plan to use shadow volumes Invest early on in developing a robust algorithm Analyze your maps to eliminate shadow volumes that cannot be seen Example: shadows completely behind walls Do not overextend shadow volumes Example: do not extend shadow volumes past walls Carmack s optimizations in these areas will make new Doom engine awesome

Combining Shadow Volumes With Bump Mapped Models 59 md2shader demo/example