visibility iii: occlusion queries cs 446: real-time rendering & game technology david luebke...

24
Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Upload: gervais-craig

Post on 02-Jan-2016

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Visibility III: Occlusion Queries

CS 446: Real-Time Rendering& Game Technology

David LuebkeUniversity of Virginia

Page 2: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Real-Time Rendering 2 David Luebke

REMINDER: I’ve reorganized the next few demosFeb 23: Erin GolubFeb 28: Sean AriettaMar 2: Jiayuan Meng

If this is a problem, let me know!

Today: Project Offset

Demo Time: Paul Tschirhart

Page 3: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Real-Time Rendering 3 David Luebke

Assignment 3

• Olsson 002a: I feel your pain– Working on fixing these problems, and on

communicating their urgency…

Page 4: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Real-Time Rendering 4 David Luebke

Recap: General Occlusion Culling

• Need general occlusion culling algorithms:– Aggregate occlusion (trees in forest)– Dynamic scenes (waving trees in forest; crowd scene)

• Many general occlusion culling algorithms use an image-space approach– Idea: solve visibility in 2D, on the image plane

Page 5: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Real-Time Rendering 5 David Luebke

Recap: Hierarchical Z-Buffer

• Replace Z-buffer with a Z-pyramid– Lowest level: full-resolution Z-buffer– Higher levels: each pixel represents the max depth of

the four pixels “underneath” it• Basic idea: hierarchical rasterization of the polygon,

with early termination where polygon is occluded

Page 6: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Real-Time Rendering 6 David Luebke

Recap: Hierarchical Z-Buffer

• Z-pyramid exploits image-space coherence: – A polygon occluded at a pixel is probably occluded at nearby pixels

• HZB can also exploit object-space coherence– Polygons near occluded polygon are probably occluded– Idea: Z-query (hierarchical) bounding volumes before rendering

their contents• HZB can also exploit temporal coherence

– Polygon visible last frame probably visible this frame– Idea: start each frame by rendering what was visible last frame

Page 7: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Real-Time Rendering 7 David Luebke

Hierarchical Z-Buffer: Discussion

• HZB needs hardware support to be really competitive• Hardware vendors haven’t entirely bought in:

– Z-pyramid (and hierarchies in general) a pain in hardware– Unpredictable Z-query times generate bubbles in rendering pipe

• But we’re getting there…– ATI HyperZ, similar tech now in NVIDIA

• Supports image-space coherence• 8x8 one-level hierarchical z-buffer • “Under the hood”, not exposed to programmer

– At the user level, hardware now supports occlusion queries• Supports object-space coherence, temporal coherence

Page 8: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Real-Time Rendering 8 David Luebke

Modern Occlusion Culling

• Occlusion query posited in original HZP paper– Want an “occlusion test”: would this polygon be visible if

I rendered it?– How could you use such a test?

• Test portal polygons before rendering adjacent cell• Test object bounding boxes before rendering object

– Yay! GL_HP_OCCLUSION_TEST extension– Problems:

• CPU/GPU synchronization == bad• Might want to know “how visible” is the polygon

Page 9: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Real-Time Rendering 9 David Luebke

Modern Occlusion Culling

• GL_ARB_OCCLUSION_QUERY to the rescue– Non-blocking query

• “Is this occlusion query done yet?”• Multiple queries in flight

– Returns number of fragments visible• Note: can actually render object or not• Allows object-space, temporal coherence• Still lots of issues for efficient culling

Page 10: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Real-Time Rendering 10 David Luebke

111 uses for Occlusion Queries

• Occlusion culling (duh)• Others?

– Approximate culling– LOD size estimation– Lens flare effects– Transparency– Collision detection (!)– Convergence testing

Page 11: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Occlusion Culling Grab Bag

• Portal textures – Dan Aliaga and others

• From-region visibility– Generalizes view-independent cell-portal problem

• Special case: 2.5D from-region visibility– Michael Wimmer and others

• Linear-time view-independent portal cull box approach?– Nina Amenta and others

• Modeling issues for cells-and-portals– Daniel Cohen-Or and others

Page 12: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Advanced Texturing

CS 446: Real-Time Rendering& Game Technology

David LuebkeUniversity of Virginia

Page 13: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Real-Time Rendering 13 David Luebke

Terminology

• A note on terminology:– The following terms are used loosely in the literature– Don’t take my definitions as canonical

Page 14: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Billboards

• A billboard is a textured polygon (usually a quad) that rotates to face the viewer– Build a rotation matrix for each billboard– Screen-aligned billboard: quad is parallel to the screen and has

a constant up vector• Similar to old-school 2D sprites• Useful for text, HUDs, lens flare, etc• Build rotation matrix with camera u, n = -v, r=uXv

– World-oriented billboard• Sprite’s native up vector not always appropriate• World-oriented billboard: use the world up vector• Still faces viewer n = -v, r=uXv

Page 15: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Real-Time Rendering 15 David Luebke

Billboards

• Viewpoint-aligned– v = vector to eye (Fig. 8.5)– Resulting quads capture perspective distortions across

view-frustum– Ex: clouds (Fig 8.6)

• Axially-alligned– Rotates around a fixed world-space axis– Ex: trees (Fig 8.7)– Problem: from above, look like cardboard cutouts

Page 16: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Point Sprites

• A point sprite is a screen-aligned textured square (i.e., a billboard) placed by rendering a single vertex – Ideal for particle systems– When GL_POINT_SPRITE_NV is enabled:

• Point antialiasing state ignored – all points quads• Points are rendered with point width as usual• Tex coords of points can be replaced by special “point sprite”

tex coords s,t,r between 0,1– Tex coord r is special, can set to zero (default) or use to ‘play

back’ an animation stored in 3D tex (COORD_REPLACE_NV)– See http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_point_sprite.txt– See http://www.codesampler.com/oglsrc.htm; search for “point sprite”

Page 17: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Imposters

• Imposter : general term for texture that replaces geometry– Billboards == imposters that rotate to face viewer– Often used in the context of LOD

• A dynamic imposter is an imposter created on the fly to “cache” rendered imagery– Once rendered, cost of rendering an imposter is just a single

textured quad (note poor texture cache coherence though)– Can use for a few frames before updating– Can use for a few instances of the object

• Works best on distant objects (why?)• Great example: portal textures

Page 18: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Real-Time Rendering 18 David Luebke

Imposters & “Depth Sprites”

• Can render an object with a depth texture, so depth buffer affects/is affected by the rendering (Fig 8.16)– Can also do depth-affected lighting – Needs to be orthogonal or nearly orthogonal to look right– Under the right circumstances, might allow combining

imposters with dynamic geometry• Ex: portal texture with monster moving around the textured cell

Page 19: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Real-Time Rendering 19 David Luebke

Imposters Continued

• Sometimes “imposter” used to refer to what I’ll call depth meshes– UNC MMR system– Imposters for urban environments

Page 20: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Real-Time Rendering 20 David Luebke

Imposters Continued

• Can represent an object as collection of imposters– Common trick for trees, usually manually placed– Billboard clouds apply this idea to other (all) objects

– The trick is to compute these automatically…

Page 21: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Multitexturing

• Modern hardware can read from multiple textures at once, even with mipmapping– Light maps– Detail texturing– Decals

x =From UT2004 © Epic Games Inc

Page 22: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Real-Time Rendering 22 David Luebke

Textures: Other Important Stuff

• Render to texture – framebuffer objects (FBOs)• Environment maps

– Sphere map, cube maps (hardware supported)• Shadow maps

– Basically, a depth texture from light source point of view – More later

• Relief textures– Demo now, details later

Page 23: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Real-Time Rendering 23 David Luebke

Textures: Still More Stuff

• Normal maps – especially for bump mapping– Gloss maps, reflectance maps, etc

• Generally:– Think of textures as global memory for fragment programs, with

built-in filtering– Just starting to be able to access

textures in vertex programs too (NVIDIA hardware only, today)

• Deferred shading• Projective texture mapping

Page 24: Visibility III: Occlusion Queries CS 446: Real-Time Rendering & Game Technology David Luebke University of Virginia

Real-Time Rendering 24 David Luebke

Next topic: Cg

• Many of the tricks we discuss in this class do not depend on programmable graphics hardware

• But, most are easier to implement this way!• So, the next topic is a brief intro to Cg

– My apologies to those of you who’ve seen this– My apologies to those of you who haven’t