![Page 1: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/1.jpg)
Creating Reflections and Shadows Using Stencil
Buffers
Mark J. Kilgard NVIDIA Corporation
![Page 2: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/2.jpg)
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
![Page 3: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/3.jpg)
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
![Page 4: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/4.jpg)
4
Per-Fragment Pipeline
Pixel Ownership
Test
Stencil Test
Depth Test
Blending
Dithering
Logic
Op
Scissor Test
Alpha Test
Frame buffer
Fragment +
Associated Data
![Page 5: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/5.jpg)
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);
![Page 6: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/6.jpg)
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”);
![Page 7: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/7.jpg)
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))
![Page 8: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/8.jpg)
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
![Page 9: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/9.jpg)
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
![Page 10: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/10.jpg)
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
![Page 11: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/11.jpg)
11
DX6 Issues
• Be sure to query capability bits! • Involves creating and attaching a depth/
stencil surface
![Page 12: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/12.jpg)
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
![Page 13: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/13.jpg)
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
![Page 14: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/14.jpg)
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
![Page 15: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/15.jpg)
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
![Page 16: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/16.jpg)
16
Compare Two Versions
Good. Bad.
Notice right image’s reflection falls off the floor!
![Page 17: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/17.jpg)
17
Stencil Maintains the Floor
Clear stencil to zero. Draw floor polygon with stencil set to one. Only draw reflection where stencil is one.
![Page 18: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/18.jpg)
18
Recursive Planar Mirrors
Basic idea of planar reflections can be applied recursively. Requires more stencil bits.
![Page 19: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/19.jpg)
19
The Trick (bird’s eye view)
![Page 20: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/20.jpg)
20
Next: Planar Shadows
Shadow is projected into the plane of the floor.
![Page 21: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/21.jpg)
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]; }
![Page 22: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/22.jpg)
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();
![Page 23: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/23.jpg)
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.
![Page 24: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/24.jpg)
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.
![Page 25: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/25.jpg)
25
Everything All At Once
Lighting, texturing, planar shadows, and planar reflections all at one time. Stencil & polygon offset eliminate aforementioned artifacts.
![Page 26: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/26.jpg)
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
![Page 27: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/27.jpg)
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.
![Page 28: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/28.jpg)
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.
![Page 29: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/29.jpg)
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)
-
![Page 30: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/30.jpg)
30
A Complex Shadow Volume
![Page 31: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/31.jpg)
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!
![Page 32: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/32.jpg)
32
Complex Shadows On Objects
![Page 33: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/33.jpg)
33
The Complex Shadow Volume
![Page 34: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/34.jpg)
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
![Page 35: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/35.jpg)
35
Inverting Examples
eye position
light source
shadowing object
two inverts, left zero
one invert, left one
zero inverts, left one
![Page 36: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/36.jpg)
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!
![Page 37: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/37.jpg)
37
Multiple Objects and Lights
Notice shadows from different light sources overlap correctly.
![Page 38: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/38.jpg)
38
Counting Enters & Leaves
shadowing object
light source
eye position
zero zero
+1
+1 +2 +2
+3
![Page 39: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/39.jpg)
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
![Page 40: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/40.jpg)
40
Jittered Shadow Volumes
Multiple passes with shadow volumes and the light source slightly jiggled between passes. Accumulation buffer sums up the passes.
![Page 41: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/41.jpg)
41
Soft Shadows
Careful about banding artifacts. Slow: linear cost per shadow volume sample.
![Page 42: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/42.jpg)
42
Hybrid Shadows
Shadow volumes Planar projected shadows
![Page 43: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/43.jpg)
43
Other Stencil Uses
• Digital dissolve effects • Handling co-planar geometry such as
decals • Measuring depth complexity • Constructive Solid Geometry (CSG)
![Page 44: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/44.jpg)
44
Digital Dissolve
Stencil buffer holds dissolve pattern. Stencil test two scenes against the pattern
![Page 45: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/45.jpg)
45
Co-planar Geometry
Shows “Z fighting” of co-planar geometry
Stencil testing fixes “Z fighting”
![Page 46: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/46.jpg)
46
Visualizing Depth Complexity
Use stencil to count pixel updates, then color code results.
![Page 47: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/47.jpg)
47
Constructive Solid Geometry cone UNION sphere sphere MINUS cone
cone INTERSECT sphere
![Page 48: Creating Reflections and Shadows Using Stencil Buffers...Bonus Stenciled Halo Effect Halo does not obscure or blend with the haloed object. Halo is blended with objects behind haloed](https://reader030.vdocuments.mx/reader030/viewer/2022040918/5e93e7891400a363d124b857/html5/thumbnails/48.jpg)
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”