Date post: | 01-Jan-2016 |
Category: |
Documents |
Upload: | arleen-bennett |
View: | 215 times |
Download: | 2 times |
10/26/04 © University of Wisconsin, CS559 Fall 2004
Last Time
• Drawing lines
• Polygon fill rules
• Midterm Oct 28
10/26/04 © University of Wisconsin, CS559 Fall 2004
Today
• Filling polygons
• Anti-aliasing
• Hidden Surface Removal– Painter’s Algorithm
– Z-buffer
– A-buffer
– Depth Sorting?
• Homework 4 due
10/26/04 © University of Wisconsin, CS559 Fall 2004
Sweep Fill Algorithms
• Algorithmic issues:– Reduce to filling many
spans
– Which edges define the span of pixels to fill?
– How do you update these edges when moving from span to span?
– What happens when you cross a vertex?
10/26/04 © University of Wisconsin, CS559 Fall 2004
Algorithm
• For each row in the polygon:– Throw away irrelevant edges
– Obtain newly relevant edges
– Fill span
– Update current edges
• Issues:– How do we update existing edges?
– When is an edge relevant/irrelevant?
– What are the endpoints of a span
• All can be resolved by referring to our convention about what polygon a pixel belongs to
10/26/04 © University of Wisconsin, CS559 Fall 2004
When are Edges Relevant (1)
• Use figures and convention to determine which edges are needed for which scanlines (rows of pixels)
• Edges from ymin to ymax are relevant for what y values?
• What about horizontal edges?
ymin
ymax
10/26/04 © University of Wisconsin, CS559 Fall 2004
When are Edges Relevant (2)
1
2
3
43,4
1,3
1,2
Convex polygon:Always only two edges active
10/26/04 © University of Wisconsin, CS559 Fall 2004
Spans
• Fill rows from bottom to top, one at a time
• Have pixels xmin, xmax for each span
• Fill [xmin, xmax)
– Include xmin, exclude xmax
xmin,xmax
10/26/04 © University of Wisconsin, CS559 Fall 2004
Tracking xmin and xmax
• Use a variant of the midpoint method, but not quite the same– Which pixel, with respect to the edge, do we wish to choose for xmin
and xmax?
– What is the decision variable?
10/26/04 © University of Wisconsin, CS559 Fall 2004
yi
yi+1
xi+1
Midpoint Method For Polygon Edges
• Consider a left edge with slope [0-1]
• Always want to choose point on line or below
• Consider the point (xi+1,yi+1). Is it above or below the line?
xi
Choose (xi+1,yi+1)
yi
yi+1
xi+1xi
Choose (xi+1,yi)
10/26/04 © University of Wisconsin, CS559 Fall 2004
Sweep Fill Details
• For convex polygons there are always 2 edges, a left and a right– Fixes the amount of memory required, good for hardware
• Can generate memory addresses (for pixel writes) efficiently– You know address of leftmost pixel, and address of rightmost, can fill
all in between quickly
• Other values may also be updated, such as z, w or color information– Use a midpoint-like rule for these too– Modern hardware, with floating point frame buffers, just interpolates
10/26/04 © University of Wisconsin, CS559 Fall 2004
Extending to Arbitrary Polygons
• Can be more than one span in any row
• Keep sorted list of edges across row, fill between pairs of edges
10/26/04 © University of Wisconsin, CS559 Fall 2004
Anti-Aliasing
• Recall: We can’t sample and then accurately reconstruct an image that is not band-limited– Infinite Nyquist frequency
– Attempting to sample sharp edges gives “jaggies”, or stair-step lines
• Solution: Band-limit by filtering (pre-filtering)– What sort of filter will give a band-limited result?
• But when doing computer rendering, we don’t have the original continuous function
10/26/04 © University of Wisconsin, CS559 Fall 2004
Alpha-based Anti-Aliasing
• Set the of a pixel to simulate a thick line– The pixel gets the line color, but with
<=1
• This supports the correct drawing of primitives one on top of the other– Draw back to front, and composite
each primitive over the existing image
– Only some hidden surface removal algorithms support it
1/8
1/8
.914
.914
.914
1/8
1/8
1/4
1/4
1/41/40 0
00
0000
0
0
0
0 0 0
10/26/04 © University of Wisconsin, CS559 Fall 2004
Calculating
• Consider a line as having thickness (all good drawing programs do this)
• Consider pixels as little squares
• Set according to the proportion of the square covered by the line
• The sub-pixel coverage interpretation of
1/8
1/8
.914
.914
.914
1/8
1/8
1/4
1/4
1/41/40 0
00
0000
0
0
0
0 0 0
10/26/04 © University of Wisconsin, CS559 Fall 2004
Weighted Sampling
• Instead of using the proportion of the area covered by the line, use convolution to do the sampling– Equivalent to filtering the line then
point sampling the result
• Place the “filter” at each pixel, and integrate product of pixel and line
• Common filters are cones (like Bartlett) or Gaussians
10/26/04 © University of Wisconsin, CS559 Fall 2004
Post-Filtering (Supersampling)
• Sample at a higher resolution than required for display, and filter image down– Easy to implement in hardware
– Typical is 2x2 sampling per pixel, with simple averaging to get final
• What kind of filter?
• More advanced methods generate different samples (eg. not on regular grid) and filter properly– Issues of which samples to take, and how to
filter them
10/26/04 © University of Wisconsin, CS559 Fall 2004
Where We Stand
• At this point we know how to:– Convert points from local to window coordinates
– Clip polygons and lines to the view volume
– Determine which pixels are covered by any given line or polygon
– Anti-alias
• Next thing:– Determine which polygon is in front
10/26/04 © University of Wisconsin, CS559 Fall 2004
Visibility
• Given a set of polygons, which is visible at each pixel? (in front, etc.). Also called hidden surface removal
• Very large number of different algorithms known. Two main classes:– Object precision: computations that operate on primitives– Image precision: computations at the pixel level
• All the spaces in the viewing pipeline maintain depth, so we can work in any space– World, View and Canonical Screen spaces might be used– Depth can be updated on a per-pixel basis as we scan convert
polygons or lines– Actually, run Bresenham-like algorithm on z and w before
perspective divide
10/26/04 © University of Wisconsin, CS559 Fall 2004
Visibility Issues
• Efficiency – it is slow to overwrite pixels, or rasterize things that cannot be seen
• Accuracy - answer should be right, and behave well when the viewpoint moves
• Must have technology that handles large, complex rendering databases
• In many complex environments, few things are visible– How much of the real world can you see at any moment?
• Complexity - object precision visibility may generate many small pieces of polygon
10/26/04 © University of Wisconsin, CS559 Fall 2004
Painters Algorithm (Image Precision)
• Algorithm:– Choose an order for the polygons
based on some choice (e.g. depth to a point on the polygon)
– Render the polygons in that order, deepest one first
• This renders nearer polygons over further
• Difficulty: – works for some important
geometries (2.5D - e.g. VLSI)– doesn’t work in this form for most
geometries - need at least better ways of determining ordering
zs
xs
Fails
Which point for choosing ordering?
10/26/04 © University of Wisconsin, CS559 Fall 2004
The Z-buffer (1) (Image Precision)
• For each pixel on screen, have at least two buffers– Color buffer stores the current color of each pixel
• The thing to ultimately display– Z-buffer stores at each pixel the depth of the nearest thing seen so
far• Also called the depth buffer
• Initialize this buffer to a value corresponding to the furthest point (z=1.0 for canonical and window space)
• As a polygon is filled in, compute the depth value of each pixel that is to be filled– if depth < z-buffer depth, fill in pixel color and new depth– else disregard
10/26/04 © University of Wisconsin, CS559 Fall 2004
The Z-buffer (2)
• Advantages:– Simple and now ubiquitous in hardware
• A z-buffer is part of what makes a graphics card “3D”
– Computing the required depth values is simple
• Disadvantages:– Over-renders – rasterizes polygons even if they are not visible
– Depth quantization errors can be annoying
– Can’t easily do transparency or filter-based anti-aliasing (Requires keeping information about partially covered polygons)