3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted...

31
3/23/04 © University of Wisconsin, CS559 S pring 2004 Last Time • Antialiasing Area-weighted sampling • Visibility Painters algorithm Depth buffer (Z-buffer) – A-buffer Scanline visibility Depth Sorting

Transcript of 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted...

Page 1: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Last Time

• Antialiasing– Area-weighted sampling

• Visibility– Painters algorithm

– Depth buffer (Z-buffer)

– A-buffer

– Scanline visibility

– Depth Sorting

Page 2: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Today

• Visibility– Area subdivision

– BSP Trees

– Cell-Portal

• Project 2 is available, due Friday April 9

• No lecture Tuesday March 30

Page 3: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Visibility Recap

• You are given a bunch of polygons do draw and you need to figure out which one is visible at every pixel

• Issues include:– Efficiency – it is slow to overwrite pixels, or scan convert things

that cannot be seen

– Accuracy – answer should be right, and behave well when the viewpoint moves

– Complexity – object precision visibility may generate many small pieces of polygon

Page 4: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Area Subdivision

• Exploits area coherence: Small areas of an image are likely to be covered by only one polygon– The practical truth of this assertion varies over the years (it’s

currently going from mostly false to more true)

• Three easy cases for determining what’s in front in a given region:1. a polygon is completely in front of everything else in that region

2. no surfaces project to the region

3. only one surface is completely inside the region, overlaps the region, or surrounds the region

Page 5: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Warnock’s Area Subdivision(Image Precision)

• Start with whole image

• If one of the easy cases is satisfied (previous slide), draw what’s in front

• Otherwise, subdivide the region and recurse

• If region is single pixel, choose surface with smallest depth

• Advantages:– No over-rendering

– Anti-aliases well - just recurse deeper to get sub-pixel information

• Disadvantage:– Tests are quite complex and slow

Page 6: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Warnock’s Algorithm

• Regions labeled with case used to classify them:1) One polygon in front2) Empty3) One polygon inside,

surrounding or intersecting

• Small regions not labeled• Note it’s a rendering

algorithm and a HSR algorithm at the same time– Assuming you can draw

squares

2 2 2

2222

2

2

3

3

3

3 33

3

3

3

3

3

333

3

3

1

1 1 11

Page 7: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

BSP-Trees (Object Precision)

• Construct a binary space partition tree– Tree gives a rendering order

– A list-priority algorithm

• Tree splits 3D world with planes– The world is broken into convex cells

– Each cell is the intersection of all the half-spaces of splitting planes on tree path to the cell

• Also used to model the shape of objects, and in other visibility algorithms– BSP visibility in games does not necessarily refer to this algorithm

Page 8: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

BSP-Tree Example

AC

B

2

4

1

3

A

B C

3 2 4 1

-

- -

+

++

Page 9: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Building BSP-Trees

• Choose polygon (arbitrary)

• Split its cell using plane on which polygon lies– May have to chop polygons in two (Clipping!)

• Continue until each cell contains only one polygon fragment

• Splitting planes could be chosen in other ways, but there is no efficient optimal algorithm for building BSP trees– Optimal means minimum number of polygon fragments in a

balanced tree

Page 10: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Building Example

• We will build a BSP tree, in 2D, for a 3 room building– Ignoring doors

• Splitting edge order is shown– “Back” side of edge is side with

the number

1

2

3 4

5

6

Page 11: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

BSP-Tree Rendering

• Observation: Things on the opposite side of a splitting plane from the viewpoint cannot obscure things on the same side as the viewpoint

• Rendering algorithm is recursive descent of the BSP Tree

• At each node (for back to front rendering):– Recurse down the side of the sub-tree that does not contain the

viewpoint• Test viewpoint against the split plane to decide which tree

– Draw the polygon in the splitting plane• Paint over whatever has already been drawn

– Recurse down the side of the tree containing the viewpoint

Page 12: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Using a BSP-Tree

• Observation: Things on the opposite side of a splitting plane from the viewpoint cannot obscure things on the same side as the viewpoint

• A statement about rays – a ray must hit something on this side of the split plane before it hits the split plane and before it hits anything on the back side

• NOT a statement about distance – things on the far side of the plane can be closer than things on the near side

Split plane

Page 13: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

BSP-Tree Rendering Example

AC

B

2

4

1

3

A

B C

3 2 4 1

-

- -

+

++

1st

View

2nd3rd 4th

Page 14: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

BSP-Tree Rendering (2)

• Advantages:– One tree works for any viewing point– Filter anti-aliasing and transparency work

• Have back to front ordering for compositing

– Can also render front to back, and avoid drawing back polygons that cannot contribute to the view

• Uses two trees – an extra one that subdivides the window

• Disadvantages:– Can be many small pieces of polygon– Over-rendering

Page 15: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Exact Visibility

• An exact visibility algorithm tells you what is visible and only what is visible– No over-rendering– Warnock’s algorithm is an example

• Difficult to achieve efficiently in practice– Small detail objects in an environment make it particularly difficult

• But, in mazes and other simple environments, exact visibility is extremely efficient

Page 16: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Cells and Portals

• Assume the world can be broken into cells– Simple shapes– Rooms in a building, for instance

• Define portals to be the transparent boundaries between cells– Doorways between rooms, windows, etc

• In a world like this, can determine exactly which parts of which rooms are visible– Then render visible rooms plus contents

Page 17: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Cell and Portal Visibility

• Start in the cell containing the viewer, with the full viewing frustum

• Render the walls of that room and its contents

• Recursively clip the viewing frustum to each portal out of the cell, and call the algorithm on the cell beyond the portal

Page 18: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Cell-Portal Example (1)

View

Page 19: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Cell-Portal Example (2)

View

Page 20: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Cell-Portal Example (3)

View

Page 21: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Cell-Portal Example (4)

View

Page 22: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Cell-Portal Example (5)

View

Page 23: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Cell-Portal Example (6)

View

Page 24: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Cell-Portal Operations

• Must clip polygons to the current view frustum (not the original one)– Can be done with additional hardware clipping planes, if you have

them

• Must clip the view frustum to the portal– Easiest to clip portal to frustum, then set frustum to exactly contain

clipped portal

• In Project 2, you implement these things in software, for a 2.5d environment

Page 25: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Cell-Portal Properties

• Advantages– Extremely efficient - only looks at cells that are actually visible:

visibility culling

– Easy to modify for approximate visibility - render all of partially visible cells, let depth buffer clean up

– Can handle mirrors as well - flip world about the mirror and pretend mirror is a portal

• Disadvantages– Restricted to environments with good cell/portal structure

Page 26: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Project 2 Intro

• You are given the following:– Rooms, defined in 2D by the edges that surround

the room

– The height of the ceiling

– Each edge is marked opaque or clear

– For each clear edge, there is a pointer to the thing on the other side

• You know where the viewer is and what the field of view is– The viewer is given as (cx,cy,cz) position

– The view frustum is given as a viewing angle and an angle for the field of view (cx,cy,cz)

X

Page 27: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Project 2 (2)

• You don’t have everything needed to do this project yet, but you can do the hardest part

• Represent the frustum as a left and right clipping line– You don’t have to worry about the top and bottom

– Each clip line starts at the viewer’s position and goes to infinity in the viewing direction

• Write a procedure that clips an edge to the view frustum– This takes a frustum and returns the endpoints of the clipped edge, or

a flag to indicate that the edge is not visible

Page 28: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Project 2 (3)

• Write a procedure that takes a room and a frustum, and draws the room– Clip each edge to the frustum

– If the edge is visible, draw the wall that the edge represents• Create the 3D wall from the 2d piece of edge

• Project the vertices

• Draw the polygon in 2D

– If the edge is clear, recurse

• Draw the floor and ceiling first, because they will be behind everything

Page 29: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Where We Stand

• So far we know how to:– Transform between spaces

– Draw polygons

– Decide what’s in front

• Next– Deciding a pixel’s intensity and color

Page 30: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Normal Vectors

• The intensity of a surface depends on its orientation with respect to the light and the viewer

• The surface normal vector describes the orientation of the surface at a point– Mathematically: Vector that is perpendicular to the tangent plane of

the surface• What’s the problem with this definition?

– Just “the normal vector” or “the normal”

– Will use n or N to denote

• Normals are either supplied by the user or automatically computed

Page 31: 3/23/04© University of Wisconsin, CS559 Spring 2004 Last Time Antialiasing –Area-weighted sampling Visibility –Painters algorithm –Depth buffer (Z-buffer)

3/23/04 © University of Wisconsin, CS559 Spring 2004

Transforming Normal Vectors

• Normal vectors are directions

• To transform a normal, multiply it by the inverse transpose of the transformation matrix

• Recall, rotation matrices are their own inverse transpose

• Don’t include the translation! Use (x,y,z,0) for homogeneous coordinates

nTTn

Tn

0pxTTn

0pxn

pxn

ttt

t

t

t

)()( :bemust then normal new The

: toequal bemust normal transposenew The

point. ed transform theis half handright The

)( : tangented transformaith equation w heConsider t

)(: thisof formmatrix a is There

0)( :ectors tangent var toperpedicul are vectorsNormal

11

1

1