Creating Reflections and Shadows Using Stencil Buffers Mark J. Kilgard NVIDIA Corporation.

Slides:



Advertisements
Similar presentations
Lecture 8 Transparency, Mirroring
Advertisements

Technische Universität München Computer Graphics SS 2014 Graphics Effects Rüdiger Westermann Lehrstuhl für Computer Graphik und Visualisierung.
CS 352: Computer Graphics Chapter 7: The Rendering Pipeline.
Ray tracing. New Concepts The recursive ray tracing algorithm Generating eye rays Non Real-time rendering.
Optimized Stencil Shadow Volumes
Understanding the graphics pipeline Lecture 2 Original Slides by: Suresh Venkatasubramanian Updates by Joseph Kider.
Graphics Pipeline.
Optimized Stencil Shadow Volumes
Game Programming 09 OGRE3D Lighting/shadow in Action
RealityEngine Graphics Kurt Akeley Silicon Graphics Computer Systems.
CS 4363/6353 BASIC RENDERING. THE GRAPHICS PIPELINE OVERVIEW Vertex Processing Coordinate transformations Compute color for each vertex Clipping and Primitive.
University of Sulaimani - School of Science - Computer Dept.
Computer Graphic Creator: Mohsen Asghari Session 2 Fall 2014.
CSL 859: Advanced Computer Graphics Dept of Computer Sc. & Engg. IIT Delhi.
Week 9 - Friday.  What did we talk about last time?  Area lighting  Environment mapping  Blinn and Newell's method  Sphere mapping  Cubic environmental.
Computer Graphics methods
Week 7 - Monday.  What did we talk about last time?  Specular shading  Aliasing and antialiasing.
Week 10 - Monday.  What did we talk about last time?  Global illumination  Shadows  Projection shadows  Soft shadows.
Two Methods for Fast Ray-Cast Ambient Occlusion Samuli Laine and Tero Karras NVIDIA Research.
Computer Graphics Visible Surface Determination. Goal of Visible Surface Determination To draw only the surfaces (triangles) that are visible, given a.
1 Dr. Scott Schaefer Shadows. 2/40 Shadows Shadows provide clues about depth Make scenes appear more realistic.
Real-Time Rendering SPEACIAL EFFECTS Lecture 03 Marina Gavrilova.
黃聰賢. Light Position Mesh Polygon Shadow Polygon  Clear color buffer and stencil buffer  Render the scene with ambient only.
Chapter 6: Vertices to Fragments Part 2 E. Angel and D. Shreiner: Interactive Computer Graphics 6E © Addison-Wesley Mohan Sridharan Based on Slides.
Practical and Robust Stenciled Shadow Volumes for Hardware-Accelerated Rendering Cass Everitt and Mark J. Kilgard Speaker: Alvin Date: 5/28/2003 NVIDIA.
Real-Time High Quality Rendering COMS 6160 [Fall 2004], Lecture 4 Shadow and Environment Mapping
© 2004 Tomas Akenine-Möller1 Shadow Generation Hardware Vision day at DTU 2004 Tomas Akenine-Möller Lund University.
Basic Ray Tracing CMSC 435/634. Visibility Problem Rendering: converting a model to an image Visibility: deciding which objects (or parts) will appear.
Computer Graphics Shadows
09/18/03CS679 - Fall Copyright Univ. of Wisconsin Last Time Bump Mapping Multi-pass algorithms.
9/20/2001CS 638, Fall 2001 Today Finishing Up Reflections More Multi-Pass Algorithms Shadows.
Shadows Computer Graphics. Shadows Shadows Extended light sources produce penumbras In real-time, we only use point light sources –Extended light sources.
Erdem Alpay Ala Nawaiseh. Why Shadows? Real world has shadows More control of the game’s feel  dramatic effects  spooky effects Without shadows the.
Computer Graphics Mirror and Shadows
Shadow Algorithms Ikrima Elhassan.
CS 638, Fall 2001 Today Light Mapping (Continued) Bump Mapping with Multi-Texturing Multi-Pass Rendering.
Technology and Historical Overview. Introduction to 3d Computer Graphics  3D computer graphics is the science, study, and method of projecting a mathematical.
NVIDIA PROPRIETARY AND CONFIDENTIAL Occlusion (HP and NV Extensions) Ashu Rege.
09/09/03CS679 - Fall Copyright Univ. of Wisconsin Last Time Event management Lag Group assignment has happened, like it or not.
09/11/03CS679 - Fall Copyright Univ. of Wisconsin Last Time Graphics Pipeline Texturing Overview Cubic Environment Mapping.
CHAPTER 11 Shadows © 2008 Cengage Learning EMEA. LEARNING OBJECTIVES In this chapter you will learn about: – –Shadow rendering algorithms – –Blinn’s shadow.
CS 638, Fall 2001 Multi-Pass Rendering The pipeline takes one triangle at a time, so only local information, and pre-computed maps, are available Multi-Pass.
Basic Ray Tracing CMSC 435/634. Visibility Problem Rendering: converting a model to an image Visibility: deciding which objects (or parts) will appear.
1 10/24/ :01 UML Graphics II Shadows Session 4.
Multi-pass Rendering. © 2002 James K. Hahn, N.H. Baek2 Multi-pass Rendering Repeat: image  Rendering pass  result imageRepeat: image  Rendering pass.
Shadows. Shadows is important in scenes, consolidating spatial relationships “Geometric shadows”: the shape of an area in shadow Early days, just pasted.
Advanced Computer Graphics Advanced Shaders CO2409 Computer Graphics Week 16.
CS-378: Game Technology Lecture #8: More Mapping Prof. Okan Arikan University of Texas, Austin Thanks to James O’Brien, Steve Chenney, Zoran Popovic, Jessica.
CS-378: Game Technology Lecture #7: More Mapping Prof. Okan Arikan University of Texas, Austin Thanks to James O’Brien, Steve Chenney, Zoran Popovic, Jessica.
Computer graphics & visualization Shadows / Transparency.
09/16/03CS679 - Fall Copyright Univ. of Wisconsin Last Time Environment mapping Light mapping Project Goals for Stage 1.
11/24/ :45 Graphics II Shadow Maps Reflections Session 5.
Computer Graphics I, Fall 2010 Implementation II.
Real-Time Dynamic Shadow Algorithms Evan Closson CSE 528.
Shadows David Luebke University of Virginia. Shadows An important visual cue, traditionally hard to do in real-time rendering Outline: –Notation –Planar.
1 Shadow Rendering Techniques: Hard and Soft Author: Jamiur Rahman Supervisor: Mushfiqur Rouf Department of CSE BRAC University.
09/23/03CS679 - Fall Copyright Univ. of Wisconsin Last Time Reflections Shadows Part 1 Stage 1 is in.
Basic Ray Tracing CMSC 435/634.
CENG 477 Introduction to Computer Graphics
Stenciling Effects Glenn G. Chappell
Discrete Techniques.
CS-378: Game Technology Lecture #7: More Mapping Prof. Okan Arikan
Week 7 - Monday CS361.
Real-Time Rendering Shadow Volumes
3D Graphics Rendering PPT By Ricardo Veguilla.
Jim X. Chen George Mason University
UMBC Graphics for Games
Last Time Presentation of your game and idea Environment mapping
Ref: OpenGL Programming Guide (The Red Book)
Frame Buffer Applications
Presentation transcript:

Creating Reflections and Shadows Using Stencil Buffers Mark J. Kilgard NVIDIA Corporation

2 Stencil Testing Now broadly supports by both major APIs –OpenGL –DirectX 6 RIVA TNT and other consumer cards now supporting full 8-bit stencil Opportunity to achieve new cool effects and improve scene quality

3 What is Stenciling? Per-pixel test, similar to depth buffering. Tests against value from stencil buffer; rejects fragment if stencil test fails. Distinct stencil operations performed when –Stencil test fails –Depth test fails –Depth test passes Provides fine grain control of pixel update

4 Per-Fragment Pipeline Pixel Ownership Test Stencil Test Depth Test Blending Dithering Logic Op Scissor Test Alpha Test Frame buffer Fragment + Associated Data

5 OpenGL API glEnable/glDisable(GL_STENCIL_TEST); glStencilFunc(function, reference, mask); glStencilOp(stencil_fail, depth_fail, depth_pass); glStencilMask(mask); glClear(… | GL_STENCIL_BUFFER_BIT);

6 Request a Stencil Buffer If using stencil, request sufficient bits of stencil Implementations may support from zero to 32 bits of stencil 8, 4, or 1 bit are common possibilities Easy for GLUT programs: glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_STENCIL); glutCreateWindow(“stencil example”);

7 Stencil Test Compares reference value to pixel’s stencil buffer value Same comparison functions as depth test: –NEVER, ALWAYS –LESS, LEQUAL –GREATER, GEQUAL –EQUAL, NOTEQUAL Bit mask controls comparison ((ref & mask) op (svalue & mask))

8 Stencil Operations Stencil side effects of –Stencil test fails –Depth test fails –Depth test passes Possible operations –Increment, Decrement (saturates) –Increment, Decrement (wrap, DX6 option) –Keep, Replace –Zero, Invert Way stencil buffer values are controlled

9 Stencil Write Mask Bit mask for controlling write back of stencil value to the stencil buffer Applies to the clear too! Stencil compare & write masks allow stencil values to be treated as sub-fields

10 DX6 Direct3D API Identical functionality as OpenGL SetRenderState controls update – D3DRENDERSTATE_STENCILENABLE –D3DRENDERSTATE_STENCILFUNC –D3DRENDERSTATE_STENCILREF –D3DRENDERSTATE_STENCILMASK –D3DRENDERSTATE_STENCILWRITEMASK –D3DRENDERSTATE_STENCILFAIL –D3DRENDERSTATE_STENCILZFAIL –D3DRENDERSTATE_STENCILPASS

11 DX6 Issues Be sure to query capability bits! Involves creating and attaching a depth/stencil surface

12 Performance With today’s 32-bit graphics accelerator modes, 24-bit depth and 8-bit stencil packed in same memory word RIVA TNT is an example Performance implication: if using depth testing, stenciling is at NO PENALTY

13 Repeating that! On card like RIVA TNT2 in 32-bit mode if using depth testing, stenciling has NO PENALTY Do not treat stencil as “expensive” -- in fact, treat stencil as “free” when already depth testing

14 Pseudo Global Lighting Effects OpenGL’s light model is a “local” model –Light source parameters –Material parameters –Nothing else enters the equation Global illumination is fancy word for real- world light interactions –Shadows, reflections, refractions, radiosity, etc. Pseudo global lighting is about clever hacks

15 Planar Reflections Dinosaur is reflected by the planar floor. Easy hack, draw dino twice, second time has glScalef(1,-1,1) to reflect through the floor

16 Compare Two Versions Good.Bad. Notice right image’s reflection falls off the floor!

17 Stencil Maintains the Floor Clear stencil to zero. Draw floor polygon with stencil set to one. Only draw reflection where stencil is one.

18 Recursive Planar Mirrors Basic idea of planar reflections can be applied recursively. Requires more stencil bits.

19 The Trick (bird’s eye view)

20 Next: Planar Shadows Shadow is projected into the plane of the floor.

21 Constructing a Shadow Matrix void shadowMatrix(GLfloat shadowMat[4][4], GLfloat groundplane[4], GLfloat lightpos[4]) { GLfloat dot; /* Find dot product between light position vector and ground plane normal. */ dot = groundplane[X] * lightpos[X] + groundplane[Y] * lightpos[Y] + groundplane[Z] * lightpos[Z] + groundplane[W] * lightpos[W]; shadowMat[0][0] = dot - lightpos[X] * groundplane[X]; shadowMat[1][0] = 0.f - lightpos[X] * groundplane[Y]; shadowMat[2][0] = 0.f - lightpos[X] * groundplane[Z]; shadowMat[3][0] = 0.f - lightpos[X] * groundplane[W]; shadowMat[X][1] = 0.f - lightpos[Y] * groundplane[X]; shadowMat[1][1] = dot - lightpos[Y] * groundplane[Y]; shadowMat[2][1] = 0.f - lightpos[Y] * groundplane[Z]; shadowMat[3][1] = 0.f - lightpos[Y] * groundplane[W]; shadowMat[X][2] = 0.f - lightpos[Z] * groundplane[X]; shadowMat[1][2] = 0.f - lightpos[Z] * groundplane[Y]; shadowMat[2][2] = dot - lightpos[Z] * groundplane[Z]; shadowMat[3][2] = 0.f - lightpos[Z] * groundplane[W]; shadowMat[X][3] = 0.f - lightpos[W] * groundplane[X]; shadowMat[1][3] = 0.f - lightpos[W] * groundplane[Y]; shadowMat[2][3] = 0.f - lightpos[W] * groundplane[Z]; shadowMat[3][3] = dot - lightpos[W] * groundplane[W]; }

22 How to Render the Shadow /* Render 50% black shadow color on top of whatever the floor appearance is. */ glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_LIGHTING); /* Force the 50% black. */ glColor4f(0.0, 0.0, 0.0, 0.5); glPushMatrix(); /* Project the shadow. */ glMultMatrixf((GLfloat *) floorShadow); drawDinosaur(); glPopMatrix();

23 Note Quite So Easy (1) Without stencil to avoid double blending of the shadow pixels: Notice darks spots on the planar shadow. Solution: Clear stencil to zero. Draw floor with stencil of one. Draw shadow if stencil is one. If shadow’s stencil test passes, set stencil to two. No double blending.

24 Note Quite So Easy (2) There’s still another problem even if using stencil to avoid double blending. depth buffer Z fighting artifacts Shadow fights with depth values from the floor plane. Use polygon offset to raise shadow polygons slightly in Z.

25 Everything All At Once Lighting, texturing, planar shadows, and planar reflections all at one time. Stencil & polygon offset eliminate aforementioned artifacts.

26 Pseudo Global Lighting Planar reflections and shadows add more than simplistic local lighting model Still not really global –Techniques more about hacking common cases based on knowledge of geometry –Not really modeling underlying physics of light Techniques are “multipass” –Geometry is rendered multiple times to improve the rendered visual quality

27 Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed object. Clear stencil to zero. Render object, set stencil to one where object is. Scale up object with glScalef. Render object again, but not where stencil is one.

28 Stenciled Shadow Volumes Triangle blocking light source. “Shadow” volume projected by triangle from the light source. Use stencil to tag whether pixel is inside or outside of the shadow volume. Two passes: light pixels outside volume; no lighting for pixels inside the volume.

29 2D Cut-away Shadow Volume shadowing object shadow volume (infinite extent) partially shadowed object light source eye position surface inside shadow volume (shadowed) surface outside shadow volume (illuminated) -

30 A Complex Shadow Volume

31 Calculating Object’s Silhouette Single triangle has a simple silhouette to extend a shadow volume from Complex objects require a silhouette calculation –OpenGL’s feedback mechanism and the GLU 1.2 tessellator can help you Dynamic shadow volumes are cool!

32 Complex Shadows On Objects

33 The Complex Shadow Volume

34 Stencil Shadow Algorithm Render scene’s depth values into the depth buffer Invert stencil bits when depth test passes when rendering the stencil volume –glStencilOp(GL_KEEP, GL_KEEP, GL_INVERT); Pixels outside the shadow volume are inverted an even number of times Pixels inside the shadow volume are inverted an odd number of times

35 Inverting Examples eye position light source shadowing object two inverts, left zero one invert, left one zero inverts, left one

36 Render In and Out of Shadow Render the scene with the light disabled, update only pixels with an odd stencil bit setting Render the scene with the light enabled, update only pixels with an even stencil bit setting Shadows get rendered!

37 Multiple Objects and Lights Notice shadows from different light sources overlap correctly.

38 Counting Enters & Leaves shadowing object light source eye position zero

39 Stencil Counting Use the GL_INCR stencil operation for front facing shadow volume polygons Use the GL_DECR stencil operation for back facing shadow volume polygons Takes two passes Can trivially extend shadow volume from every polygons Watch out for cracks! Consumes tons of pixel fill rate

40 Jittered Shadow Volumes Multiple passes with shadow volumes and the light source slightly jiggled between passes. Accumulation buffer sums up the passes.

41 Soft Shadows Careful about banding artifacts. Slow: linear cost per shadow volume sample.

42 Hybrid Shadows Shadow volumesPlanar projected shadows

43 Other Stencil Uses Digital dissolve effects Handling co-planar geometry such as decals Measuring depth complexity Constructive Solid Geometry (CSG)

44 Digital Dissolve Stencil buffer holds dissolve pattern. Stencil test two scenes against the pattern

45 Co-planar Geometry Shows “Z fighting” of co-planar geometry Stencil testing fixes “Z fighting”

46 Visualizing Depth Complexity Use stencil to count pixel updates, then color code results.

47 Constructive Solid Geometry cone UNION spheresphere MINUS cone cone INTERSECT sphere

48 Conclusions Stencil testing = improved visual quality, unique effects Games using stenciling today –Quake 3 - awesome volumetric shadows –Unreal - wicked shadow effects Christmas 1999 will have best cards supporting 32-bit rendering with stencil Assume 8/24 stencil/depth hardware when depth testing gives you stencil “for free”