CMSC 435 Introductory Computer Graphics Pipeline. Announcements

Similar documents
Identifying those parts of a scene that are visible from a chosen viewing position, and only process (scan convert) those parts

graphics pipeline computer graphics graphics pipeline 2009 fabio pellacini 1

graphics pipeline computer graphics graphics pipeline 2009 fabio pellacini 1

Page 1. Area-Subdivision Algorithms z-buffer Algorithm List Priority Algorithms BSP (Binary Space Partitioning Tree) Scan-line Algorithms

Rasterization. COMP 575/770 Spring 2013

COMP30019 Graphics and Interaction Scan Converting Polygons and Lines

Incremental Form. Idea. More efficient if we look at d k, the value of the decision variable at x = k

Visible Surface Detection Methods

Polygon Filling. Can write frame buffer one word at time rather than one bit. 2/3/2000 CS 4/57101 Lecture 6 1

CEng 477 Introduction to Computer Graphics Fall 2007

Visible-Surface Detection Methods. Chapter? Intro. to Computer Graphics Spring 2008, Y. G. Shin

Computer Graphics. Bing-Yu Chen National Taiwan University

Werner Purgathofer

General Hidden Surface Removal Algorithms. Binghamton University. EngiNet. Thomas J. Watson. School of Engineering and Applied Science CS 460/560

Hidden Surface Elimination: BSP trees

Chapter 8: Implementation- Clipping and Rasterization

8. Hidden Surface Elimination

Pipeline Operations. CS 4620 Lecture 10

Computer Graphics 7 - Rasterisation

Introduction Rasterization Z-buffering Shading. Graphics 2012/2013, 4th quarter. Lecture 09: graphics pipeline (rasterization and shading)

Renderer Implementation: Basics and Clipping. Overview. Preliminaries. David Carr Virtual Environments, Fundamentals Spring 2005

9. Visible-Surface Detection Methods

Topic #1: Rasterization (Scan Conversion)

CS 130 Exam I. Fall 2015

CS 130 Exam I. Fall 2015

FROM VERTICES TO FRAGMENTS. Lecture 5 Comp3080 Computer Graphics HKBU

Overview. Pipeline implementation I. Overview. Required Tasks. Preliminaries Clipping. Hidden Surface removal

8. Hidden Surface Elimination

Pipeline Operations. CS 4620 Lecture Steve Marschner. Cornell CS4620 Spring 2018 Lecture 11

CS4620/5620: Lecture 14 Pipeline

Hidden surface removal. Computer Graphics

Announcements. Midterms graded back at the end of class Help session on Assignment 3 for last ~20 minutes of class. Computer Graphics

CSE328 Fundamentals of Computer Graphics: Concepts, Theory, Algorithms, and Applications

Visible Surface Determination: Intro

Pipeline Operations. CS 4620 Lecture 14

CSE528 Computer Graphics: Theory, Algorithms, and Applications

3D Rendering Pipeline (for direct illumination)

3D Rasterization II COS 426

2D Graphics Primitives II. Additional issues in scan converting lines. 1)Endpoint order. Want algorithms to draw the same pixels for each line

Computer Graphics and GPGPU Programming

The Traditional Graphics Pipeline

Hidden Surfaces II. Week 9, Mon Mar 15

Computer Graphics I Lecture 11

CHAPTER 1 Graphics Systems and Models 3

Clipping. Angel and Shreiner: Interactive Computer Graphics 7E Addison-Wesley 2015

Computer Graphics. Bing-Yu Chen National Taiwan University The University of Tokyo

- Rasterization. Geometry. Scan Conversion. Rasterization

Computer Graphics Geometry and Transform

CSE 167: Introduction to Computer Graphics Lecture #5: Rasterization. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2015

Realtime 3D Computer Graphics Virtual Reality

4.5 VISIBLE SURFACE DETECTION METHODES

The Traditional Graphics Pipeline

Computer Graphics. Rendering. by Brian Wyvill University of Calgary. cpsc/enel P 1

Graphics Hardware and Display Devices

Rasterizing triangles

Visibility: Z Buffering

9. Illumination and Shading

Class of Algorithms. Visible Surface Determination. Back Face Culling Test. Back Face Culling: Object Space v. Back Face Culling: Object Space.

Interpolation using scanline algorithm

CSE 167: Lecture #5: Rasterization. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2012

2D rendering takes a photo of the 2D scene with a virtual camera that selects an axis aligned rectangle from the scene. The photograph is placed into

Shading. Introduction to Computer Graphics Torsten Möller. Machiraju/Zhang/Möller/Fuhrmann

More Visible Surface Detection. CS116B Chris Pollett Mar. 16, 2005.

Introduction to Visualization and Computer Graphics

The Traditional Graphics Pipeline

Graphics and Interaction Rendering pipeline & object modelling

Mach band effect. The Mach band effect increases the visual unpleasant representation of curved surface using flat shading.

Institutionen för systemteknik

Interactive Computer Graphics A TOP-DOWN APPROACH WITH SHADER-BASED OPENGL

Rendering approaches. 1.image-oriented. 2.object-oriented. foreach pixel... 3D rendering pipeline. foreach object...

From Vertices to Fragments: Rasterization. Reading Assignment: Chapter 7. Special memory where pixel colors are stored.

Topics. From vertices to fragments

Rendering. Basic Math Review. Rasterizing Lines and Polygons Hidden Surface Remove Multi-pass Rendering with Accumulation Buffers.

Clipping & Culling. Lecture 11 Spring Trivial Rejection Outcode Clipping Plane-at-a-time Clipping Backface Culling

Two basic types: image-precision and object-precision. Image-precision For each pixel, determine which object is visable Requires np operations

OpenGL Graphics System. 2D Graphics Primitives. Drawing 2D Graphics Primitives. 2D Graphics Primitives. Mathematical 2D Primitives.

Einführung in Visual Computing

Computer Graphics. Lecture 9 Hidden Surface Removal. Taku Komura

Topics and things to know about them:

Rendering. Converting a 3D scene to a 2D image. Camera. Light. Rendering. View Plane

Rasterization. CS 4620 Lecture Kavita Bala w/ prior instructor Steve Marschner. Cornell CS4620 Fall 2015 Lecture 16

CS 248 Assignment 2 Polygon Scan Converter. CS248 Presented by Abe Davis Stanford University October 17, 2008

Computer Graphics II

Questions??? Announcements Assignment 3 due today

CS559: Computer Graphics. Lecture 12: Antialiasing & Visibility Li Zhang Spring 2008

CS 464 Review. Review of Computer Graphics for Final Exam

Chapter 3. Sukhwinder Singh

Surface shading: lights and rasterization. Computer Graphics CSE 167 Lecture 6

Clipping and Scan Conversion

Principles of Computer Graphics. Lecture 3 1

How do we draw a picture?

From Vertices To Fragments-1

GLOBAL EDITION. Interactive Computer Graphics. A Top-Down Approach with WebGL SEVENTH EDITION. Edward Angel Dave Shreiner

Hidden Surface Removal

Rendering. Illumination Model. Wireframe rendering simple, ambiguous Color filling flat without any 3D information

Computer Graphics - Week 7

Lets assume each object has a defined colour. Hence our illumination model is looks unrealistic.

More Hidden Surface Removal

CS 498 VR. Lecture 18-4/4/18. go.illinois.edu/vrlect18

Direct Rendering of Trimmed NURBS Surfaces

Transcription:

CMSC 435 Introductory Computer Graphics Pipeline Penny Rheingans UMBC Wed-Sat on travel Announcements Limited email access Guest lecture Thurs by Wes Griffin on OpenGL Project 2 Status/issues 1

Graphics Pipeline Object-order approach to rendering Sequence of operations Vertex processing Transforms Viewing Vertex components of shading/texture Rasterization Break primitives into fragments/pixels Clipping Fragment processing Fragment components of shading/texture Blending Line Drawing Given endpoints of line, which pixels to draw? 2

Line Drawing Given endpoints of line, which pixels to draw? Line Drawing Given endpoints of line, which pixels to draw? Assume one pixel per column (x index), which row (y index)? Choose based on relation of line to midpoint between candidate pixels 3

Line Drawing Implicit representation f(x,y)=(y 0 -y 1 )x + (x 1 -x 0 )y + x 0 y 1 - x 1 y 0 = 0 Slope m = (y 1 -y 0 )/(x 1 -x 0 ) (assume 0 m 1) Midpoint algorithm y=y0 d = f(x 0 +1, y 0 +0.5) for x = x 0 to x 1 do draw (x,y) if (d < 0) then y = y+1 d = d + (x 1 - x 0 ) + (y 0 - y 1 ) else d = d + (y 0 - y 1 ) Problem Scan conversion How to generate filled polygons (by determining which pixel positions are inside the polygon) Conversion from continuous to discrete domain Concepts Spatial coherence Span coherence Edge coherence 4

Scanning Rectangles for ( y from y0 to yn ) for ( x from x0 to xn ) Write Pixel (x, y, val) Scanning Rectangles (2) for ( y from y0 to yn ) for ( x from x0 to xn ) Write Pixel (x, y, val) 5

Scanning Rectangles (3) for ( y from y0 to yn ) for ( x from x0 to xn ) Write Pixel (x, y, val) Scanning Arbitrary Polygons vertices: (4, 1), (7, 13), (11, 2) 6

Scanning Arbitrary Polygons (2) vertices: (4, 1), (7, 13), (11, 2) Intersect scanline w/pgon edges => span extrema Scanning Arbitrary Polygons (3) vertices: (4, 1), (7, 13), (11, 2) Intersect scanline w/pgon edges => span extrema Fill between pairs of span extrema 7

Scanning Arbitrary Polygons (4) vertices: (4, 1), (7, 13), (11, 2) For each nonempty scanline Intersect scanline w/pgon edges => span extrema Fill between pairs of span extrema Example Cases (2) 4 intersections w/ scanline 6 at x = 1, 6, 6, 12 1/7 8

Example Cases (3) 3 intersections w/scanline 5 at x = 1, 1, 11 5/7 Example Cases (4) 3 intersections w/scanline 5 at x = 1, 1, 11 5/7 ==> Count continuing edges once (shorten lower edge) now x=1, 11 5/7 9

Example Cases (5) 4 intersections w/ scanline 1at x = 5, 5, 10, 10 Example Cases (6) 4 intersections w/ scanline 1 at x = 5, 5, 10, 10 => Don't count vertices of horizontal edges. Now x = 5, 10 10

Scanline Data Structures Sorted edge table: all edges sorted by min y holds: max y init x inverse slope Active edge table: edges intersecting current scanline holds: max y current x inverse slope Scanline Algorithm 1. Bucket sort edges into sorted edge table 2. Initialize y & active edge table y = first non- empty scanline AET = SET [y] 3. Repeat until AET and SET are empty Fill pixels between pairs of x intercepts in AET Remove exhausted edges Y++ Update x intercepts Resort table (AET) Add entering edges 11

Example: vertices (4,1), (1,11), (9,5), (12,8), (12,1) Example: vertices (4,1), (1,11), (9,5), (12,8), (12,1) bucket sort edges into sorted edge table sort on miny: 1 store: max Y: 11 min X: 4 1/m : (Xmax - Xmin) / (Ymax - Ymin) = (1-4) / (11-1) = -3 / 10 12

Example: vertices (4,1), (1,11), (9,5), (12,8), (12,1) bucket sort edges into sorted edge table Example: vertices (4,1), (1,11), (9,5), (12,8), (12,1) bucket sort edges into sorted edge table initialize active edge list to first non empty scanline 13

Example: vertices (4,1), (1,11), (9,5), (12,8), (12,1) bucket sort edges into sorted edge table initialize active edge list to first non empty scanline for each non empty scanline fill between pairs (x=4,12) Example: vertices (4,1), (1,11), (9,5), (12,8), (12,1) bucket sort edges into sorted edge table initialize active edge list to first non empty scanline for each non empty scanline fill between pairs (x=4,12) remove exhausted edges update intersection points resort table add entering edges 14

Example: vertices (4,1), (1,11), (9,5), (12,8), (12,1) bucket sort edges into sorted edge table initialize active edge list to first non empty scanline for each non empty scanline fill between pairs (x=3 1/10,12) remove exhausted edges update intersection points Example: vertices (4,1), (1,11), (9,5), (12,8), (12,1) bucket sort edges into sorted edge table initialize active edge list to first non empty scanline for each non empty scanline fill between pairs (x=3 1/10,12) remove exhausted edges update intersection points resort table add entering edges 15

Example: vertices (4,1), (1,11), (9,5), (12,8), (12,1) bucket sort edges into sorted edge table initialize active edge list to first non empty scanline for each non empty scanline fill between pairs (x = 2 8/10, 9; 9,12) remove exhausted edges update intersection points resort table add entering edges Example: vertices (4,1), (1,11), (9,5), (12,8), (12,1) bucket sort edges into sorted edge table initialize active edge list to first non empty scanline for each non empty scanline fill between pairs (x=2 5/10, 7 2/3; 10,12) remove exhausted edges update intersection points resort table add entering edges 16

Fill Variants Fill between pairs: for ( x = x1; x < x2; x++ ) framebuffer [ x, y ] = c Pattern Fill Fill Variants (2) Fill between pairs: for ( x = x1; x < x2; x++ ) if ( ( x + y ) % 2 ) framebuffer [ x, y ] = c1 else framebuffer [ x, y ] = c2 17

Colorwash Red to blue Fill Variants (3) Fill between pairs: for ( x = x1; x < x2; x++ ) framebuffer [ x, y ] = C0 + dc * ( x1 - x ) For efficiency carry C and dc in AETand calculate color incrementally Vertex colors Red, green, blue Fill Variants (4) Fill between pairs: for ( x = x1; x < x2; x++ ) framebuffer [ x, y ] = Cy1x1 + [(x - x1)/(x2 - x1)*(cy1x2 - Cy1x1)]/dCx For efficiency carry Cy and dcy in AET calculate dcx at beginning of scanline 18

Barycentric Coordinates Use non-orthogonal coordinates to describe position relative to vertices p = a + " b # a ( ) +$ ( c # a) p (",#,$) = "a + #b +$c Coordinates correspond to scaled signed distance from lines through pairs of vertices Barycentric Example 19

Barycentric Coordinates Computing coordinates ( " = y # y a b)x + ( x b # x a )y + x a y b # x b y a ( y a # y b )x c + ( x b # x a )y c + x a y b # x b y a ( " = y # y a c)x + ( x c # x a )y + x a y c # x c y a ( y a # y c )x b + ( x c # x a )y b + x a y c # x c y a " =1# $ #% Alternative Computation 20

Barycentric Rasterization For all x do For all y do Compute (α, β, γ) for (x,y) If (α [0,1] and β [0,1] and γ [0,1] then c = αc 0 + βc 1 + γc 2 Draw pixel (x,y) with color c Barycentric Rasterization x min = floor(x i ) x max = ceiling(x i ) y min = floor(y i ) y max = ceiling(x i ) for y = y min to y max do for x = x min to x max do α = f 12(x,y)/f 12(x 0,y 0) β = f 20(x,y)/f 20(x 1,y 1) γ = f 01(x,y)/f 01(x 2,y 2) If (α [0,1] and β [0,1] and γ [0,1] then c = αc 0 + βc 1 + γc 2 Draw pixel (x,y) with color c 21

Barycentric Rasterization Computing coordinates " = f 01 (x, y) f 01 (x 2, y 2 ) = ( y # y 0 1)x + ( x 1 # x 0 )y + x 0 y 1 # x 1 y 0 ( y 0 # y 1 )x 2 + ( x 1 # x 0 )y 2 + x 0 y 1 # x 1 y 0 " = f 20 (x, y) f 20 (x 1, y 1 ) = ( y # y 2 0)x + ( x 0 # x 2 )y + x 2 y 0 # x 0 y 2 ( y 2 # y 0 )x 1 + ( x 0 # x 2 )y 1 + x 2 y 0 # x 0 y 2 " = f 12 (x, y) f 12 (x 0, y 0 ) = ( y # y 1 2)x + ( x 2 # x 1 )y + x 1 y 2 # x 2 y 1 ( y 1 # y 2 )x 0 + ( x 2 # x 1 )y 0 + x 1 y 2 # x 2 y 1 Visibility We can convert simple primitives to pixels/fragments How do we know which primitives (or which parts of primitives) should be visible? 22

Back-face Culling Polygon is back-facing if V N > 0 Assuming view is along Z (V=0,0,1) V N + (0 + 0 + zn) Simplifying further If zn > 0, then cull Works for non-overlapping convex polyhedra With concave polyhedra, some hidden surfaces will not be culled Painter s Algorithm First polygon: (6,3,10), (11, 5,10), (2,2,10) Second polygon: (1,2,8), (12,2,8), (12,6,8), (1,6,8) Third polygon: (6,5,5), (14,5,5), (14,10,5),( 6,10,5) 23

Painter s Algorithm Given List of polygons {P 1, P 2,. P n) An array of Intensity [x,y] Begin Sort polygon list on minimum Z (largest z- value comes first in sorted list) For each polygon P in selected list do For each pixel (x,y) that intersects P do Intensity[x,y] = intensity of P at (x,y) Display Intensity array Painter s Algorithm: Cycles Which order to scan? Split along line, then scan 1,2,3 24

Painter s Algorithm: Cycles Which to scan first? Split along line, then scan 1,2,3,4 (or split another polygon and scan accordingly) Moral: Painter s algorithm is fast and easy, except for detecting and splitting cycles and other ambiguities Depth-sort: Overlapping Surfaces Assume you have sorted by maximum Z Then if Zmin > Z max, the surfaces do not overlap each other (minimax test) Correct order of overlapping surfaces may be ambiguous. Check it. 25

Depth-sort: Overlapping Surfaces No problem: paint S, then S Problem: painting in either order gives incorrect result Problem? Naïve order S S S ; correct order S S S Depth-sort: Order Ambiguity 1. Bounding rectangles in xy plane do not overlap Check overlap in x x min > x max or x min > x max -> no overlap Check overlap in y y min > y max or y min > y max -> no overlap 2. Surface S is completely behind S relative to viewing direction. Substitute all vertices of S into plane equation for S, if all are inside ( < 0), then there is no ambiguity 26

Depth-sort: Order Ambiguity 3. Surface S is completely in front S relative to viewing direction. Substitute all vertices of S into plane equation for S, if all are outside ( >0), then there is no ambiguity Depth-sort: Order Ambiguity 4. Projection of the two surfaces onto the viewing plane do not overlap Test edges for intersection Rule out some pairs with minimax tests (can eliminate 3-4 intersection, but not 1-2) Check slopes -- parallel lines do not intersect Compute intersection points: s = [(x 1-x 2)(y 1-y 1) - (x 1-x 1)(y 1-y 2)]/D t = [ (x 1 - x 2)(y 1 - y' 1) - (x 1 - x' 1)(y 1 - y 2)]/D D = (x' 1 - x' 2)(y 1 - y 2) - (x 1 - x 2)(y' 1 - y' 2) 27

First polygon Z-Buffer (1, 1, 5), (7, 7, 5), (1, 7, 5) scan it in with depth Second polygon (3, 5, 9), (10, 5, 9), (10, 9, 9), (3, 9, 9) Third polygon (2, 6, 3), (2, 3, 8), (7, 3, 3) Z-Buffer Algorithm Originally Cook, Carpenter, Catmull Given List of polygons {P 1, P 2,., P n} An array x-buffer[x,y] initialized to +infinity An array Intensity[x,y] Begin For each polygon P in selected list do For each pixel (x,y) that intersects P do Caluclate z-depth of P at (x,y) If z-depth < z-buffer[x,y] then Intensity[x,y] = intensity of P at (x,y) Z-buffer[x,y] = z-depth Display Intensity array 28

Z-Buffer: Calculating Z-depth From plane equation, depth at position (x,y): z = (-Ax - By - D)/C Incrementally across scanline (x+1, y) z = (-A(x+1) - By - D)/C = (-Ax - By - D)/C - A/C = z - A/C Incrementally between scanlines (x, y+1) z = (-A(x ) - B(y+1) - D)/C = z - (A/m + B)/C Good Z-Buffer Characteristics Easy to implement Requires no sortng of surfaces Easy to put in hardware Bad Requires lots of memory (about 9MB for 1280x1024 display) Can alias badly (only one sample per pixel) Cannot handle transparent surfaces 29

A-Buffer Method Basically z-buffer with additional memory to consider contribution of multiple surfaces to a pixel Need to store Color (rgb triple) Opacity Depth Percent area covered Surface ID Misc rendering parameters Pointer to next Taxonomy of Visibility Algorithms Ivan Sutherland -- A Characterization of Ten Hidden Surface Algorithms Basic design choices Space for operations Object Image Object space Loop over objects Decide the visibility of each Timing of object sort Sort-first Sort-last 30

Taxonomy of Visibility Algorithms Image space Loop over pixels Decide what s visible at each Timing of sort at pixel Sort first Sort last Subdivide to simplify Scanline Algorithm Simply problem by considering only one scanline at a time intersection of 3D scene with plane through scanline 31

Scanline Algorithm Consider xz slice Calculate where visibility can change Decide visibility in each span Scanline Algorithm 1. Sort polygons into sorted surface table (SST) based on Y 2. Initialize y and active surface table (AST) Y = first nonempty scanline AST = SST[y] 3. Repeat until AST and SST are empty Identify spans for this scanline (sorted on x) For each span determine visible element (based on z) fill pixel intensities with values from element Update AST remove exhausted polygons y++ update x intercepts resort AST on x add entering polygons 4. Display Intensity array 32

Scanline Visibility Algorithm Scanline α AST: ABC Spans 0 -> x 1 x 1 -> x 2 x 2 -> max background ABC background Scanline Visibility Algorithm Scanline β AST: ABC DEF Spans 0 -> x 1 x 1 -> x 2 x 2 -> x 3 x 3 -> x 4 x 4-> max background ABC background DEF background 33

Scanline Visibility Algorithm Scanline γ AST: ABC DEF Spans 0 -> x 1 x 1 -> x 2 x 2 -> x 3 x 3 -> x 4 x 4-> max background ABC DEF DEF background Scanline Visibility Algorithm Scanline γ + 1 Spans 0 -> x 1 x 1 -> x 2 x 2 -> x 3 x 3 -> x 4 x 4-> max Scanline γ + 2 Spans 0 -> x 1 x 1 -> x 2 x 2 -> x 3 x 3 -> x 4 x 4-> max background ABC DEF DEF background background ABC background DEF background 34

Characteristics of Scanline Algorithm Good Little memory required Can generate scanlines as required Can antialias within scanline Fast Simplification of problem simplifies geometry Can exploit coherence Bad Fairly complicated to implement Difficult to antialias between scanlines Taxonomy Revisted Another dimension Point-sampling continuous 35

BSP Tree: Building the Tree BSPTree MakeBSP ( Polygon list ) { if ( list is empty ) return null else { root = some polygon ; remove it from the list backlist = frontlist = null for ( each remaining polygon in the list ) { if ( p in front of root ) addtolist ( p, frontlist ) else if ( p in back of root ) addtolist ( p, backlist ) else { splitpolygon (p,root,frontpart,backpart) addtolist ( frontpart, frontlist ) addtolist ( backpart, backlist ) } } return (combinetree(makebsp(frontlist),root, MakeBSP(backlist))) } } Building a BSP Tree 36

Building a BSP Tree Use pgon 3 as root, split on its plane Pgon 5 split into 5a and 5b Building a BSP Tree Split left subtree at pgon 2 37

Building a BSP Tree Split right subtree at pgon 4 Building a BSP Tree Alternate tree if splits are made at 5, 4, 3, 1 38

BSP Tree: Displaying the Tree DisplayBSP ( tree ) { if ( tree not empty ) { if ( viewer in front of root ) { DisplayBSP ( tree -> back ) DisplayPolygon ( tree -> root ) DisplayBSP ( tree -> front ) } else { DisplayBSP ( tree -> front ) DisplayPolygon ( tree -> root ) DisplayBSP ( tree -> back ) } } } BSP Tree Display Built BSP tree structure 39

BSP Tree Display For view point at C at 3 : viewpoint on front -> display back first at 4 : viewpoint on back -> display front first BSP Tree Display For view point at C at 3 : viewpoint on front -> display back first at 4 : viewpoint on back -> display front first (none) display self display back 40

BSP Tree Display For view point at C at 3 : viewpoint on front -> display back first at 4 : viewpoint on back -> display front first (none) display self display back at 5b : viewpoint on back -> display front (none) display self display back (none) BSP Tree Display For view point at C at 3 : viewpoint on front -> display back first at 4 : viewpoint on back -> display front first (none) display self display back at 5b : viewpoint on back -> display front display self display back (none) display self 41

BSP Tree Display For view point at C at 3 : viewpoint on front -> display back first at 4 : viewpoint on back -> display front first (none) display self display back at 5b : viewpoint on back -> display front display self display back (none) display self display front BSP Tree Display For view point at C at 3 : viewpoint on front -> display back first at 4 : viewpoint on back -> display front first (none) display self display back at 5b : viewpoint on back -> display front display self display back (none) display self display front at 2 : viewpoint on back -> display front first 42

BSP Tree Display For view point at C at 3 : viewpoint on front -> display back first at 4 : viewpoint on back -> display front first (none) display self display back at 5b : viewpoint on back -> display front display self display back (none) display self display front at 2 : viewpoint on back -> display front first at 5a : viewpoint on back -> display front (none) display self display back (none) BSP Tree Display For view point at C at 3 : viewpoint on front -> display back first at 4 : viewpoint on back -> display front first (none) display self display back at 5b : viewpoint on back -> display front display self display back (none) display self display front at 2 : viewpoint on back -> display front first at 5a : viewpoint on back -> display front (none) display self display back (none) display self at 1 : viewpoint on back -> display front (none) display self display back (none) 43

Shading Revisited Illumination models compute appearance at a location How do you efficiently fill areas? Diffuse Shading Models Flat shading Gouraud shading 44

Flat Shading Algorithm For each visible polygon Evaluate illumination with polygon normal For each scanline For each pixel on scanline Fill with calculated intensity Interpolated Shading Algorithm For each visible polygon For each vertex Evaluate illumination with vertex normals For each scanline Interpolate intensity along edges (for span extrema) For each pixel on scanline Interpolate intensity from extrema 45

Vertex Normals The normal vector at vertex V is calculated as the average of the surface normals for each polygon sharing that vertex Gouraud Calculations I a = I 1 +(I 2 -I 1 )/(y a -y 1 )/(y 2 -y 1 ) I b = I 1 +(I 3 -I 1 )/(y b -y 1 )/(y 3 -y 1 ) I p = I a +(I b -I a )/(x p -x a )/(x b -x a ) 1. Calculate intensity at vertices (I 1, I 2, I 3 ) 2. Interpolate vertex intensities along edges (I a, I b ) 3. Interpolate intensities at span extrema to pixels (I p ) 46

Barycentric Rasterization x min = floor(x i) x max = ceiling(x i) y min = floor(y i) y max = ceiling(y i) for y = y min to y max do for x = x min to x max do α = f 12(x,y)/f 12(x 0,y 0) β = f 20(x,y)/f 20(x 1,y 1) γ = f 01(x,y)/f 01(x 2,y 2) If (α [0,1] and β [0,1] and γ [0,1] then c 0 = evaluate_illumination(x0,y0,z0) c 1 = evaluate_illumination(x1,y1,z1) c 2 = evaluate_illumination(x2,y2,z2) c = αc 0 + βc 1 + γc 2 Draw pixel (x,y) with color c Problems with Interpolated Shading Polygon silhouette Perspective distortion Orientation dependence Problems at shared vertices Unrepresentative vertex normals 47

Phong Shading Ideally: shade from normals of curved surface Approximate with normals interpolated between vertex normals N a = P a -P 0 / P 1 -P 0 N 1 + P 1 -P a / P 1 -P 0 N 0 Phong Algorithm For each visible polygon For each scanline Calculate normals at edge intersections (span extrema) by linear interpolation For each pixel on scanline Calculate normal by interpolation of normals at span extrema Evaluate illumination model with that normal 48

Barycentric Rasterization x min = floor(x i ) x max = ceiling(x i ) y min = floor(y i ) y max = ceiling(y i ) for y = y min to y max do for x = x min to x max do α = f 12(x,y)/f 12(x 0,y 0) β = f 20(x,y)/f 20(x 1,y 1) γ = f 01(x,y)/f 01(x 2,y 2) If (α [0,1] and β [0,1] and γ [0,1] then n = αn 0 + βn 1 + γn 2 Normalize (n) c = evaluate_illumination(x,y,n) Draw pixel (x,y) with color c Artistic Illumination Concept: intentionally mimic artistic effects which may not match photorealism (NPR) Examples Line drawing Shading effects Cool-warm (tone shading) Toon Media Emulation 49

Silhouette Drawing Want to draw silhouette edge to emphasize shape Silhouette defined by points where surface normal is orthogonal to view vector V N = 0 Implementation for polygonal meshes: draw edge when pgons change from forward to back if (V N 0 )(V N 1 ) 0 Draw silhouette (edge between pgons) Add sharp creases if (N 0 N 1 ) threshold Draw silhouette (edge between pgons) Diffuse Only Kd = 1, ka=0 Gooch 98 50

Highlights and Edges Gooch 98 Phong Shading and Edges Kd=.5 Ka =.1 Gooch 98 51

Tone Shading Model with Mixing Tone and Color 52

Constant Luminance Tone Gooch 98 Luminance/Tone Rendering B=0.4, y=0.4 α=.2, β =.6 Gooch 98 53

Luminance/Tone Rendering B=0.55, y=0.8 α =.25, β=.5 Gooch 98 Hue/Tone Interactions Gooch 98 54

Tone/Metal Gooch 98 Tone/Color Gooch 98 55