Advanced Rendering II, Clipping I Week 8, Wed Mar 10 - - PowerPoint PPT Presentation

advanced rendering ii clipping i week 8 wed mar 10
SMART_READER_LITE
LIVE PREVIEW

Advanced Rendering II, Clipping I Week 8, Wed Mar 10 - - PowerPoint PPT Presentation

University of British Columbia CPSC 314 Computer Graphics Jan-Apr 2010 Tamara Munzner Advanced Rendering II, Clipping I Week 8, Wed Mar 10 http://www.ugrad.cs.ubc.ca/~cs314/Vjan2010 News Project 3 out due Fri Mar 26, 5pm


slide-1
SLIDE 1

University of British Columbia CPSC 314 Computer Graphics Jan-Apr 2010 Tamara Munzner http://www.ugrad.cs.ubc.ca/~cs314/Vjan2010

Advanced Rendering II, Clipping I Week 8, Wed Mar 10

slide-2
SLIDE 2

2

News

  • Project 3 out
  • due Fri Mar 26, 5pm
  • raytracer
  • template code has significant functionality
  • clearly marked places where you need to fill in

required code

slide-3
SLIDE 3

3

News

  • Project 2 F2F grading done
  • if you have not signed up, do so immediately

with glj3 AT cs.ubc.ca

  • penalty already for being late
  • bigger penalty if we have to hunt you down
slide-4
SLIDE 4

4

Reading for Advanced Rendering

  • FCG Sec 8.2.7 Shading Frequency
  • FCG Chap 4 Ray Tracing
  • FCG Sec 13.1 Transparency and Refraction
  • (10.1-10.7 2nd ed)
  • Optional - FCG Chap 24: Global Illumination
slide-5
SLIDE 5

5

Review: Specifying Normals

  • OpenGL state machine
  • uses last normal specified
  • if no normals specified, assumes all identical
  • per-vertex normals

glNormal3f(1,1,1); glVertex3f(3,4,5); glNormal3f(1,1,0); glVertex3f(10,5,2);

  • per-face normals

glNormal3f(1,1,1); glVertex3f(3,4,5); glVertex3f(10,5,2);

  • normal interpreted as direction from vertex location
  • can automatically normalize (computational cost)

glEnable(GL_NORMALIZE);

slide-6
SLIDE 6

6

Review: Recursive Ray Tracing

  • ray tracing can handle
  • reflection (chrome/mirror)
  • refraction (glass)
  • shadows
  • ne primary ray per pixel
  • spawn secondary rays
  • reflection, refraction
  • if another object is hit, recurse to find

its color

  • shadow
  • cast ray from intersection point to

light source, check if intersects another object

  • termination criteria
  • no intersection (ray exits scene)
  • max bounces (recursion depth)
  • attenuated below threshold

Image Plane Light Source Eye Refracted Ray Reflected Ray Shadow Rays

slide-7
SLIDE 7

7

Review/Correction: Recursive Ray Tracing

RayTrace(r,scene)

  • bj := FirstIntersection(r,scene)

if (no obj) return BackgroundColor; else begin if ( Reflect(obj) ) then reflect_color := RayTrace(ReflectRay(r,obj)); else reflect_color := Black; if ( Transparent(obj) ) then refract_color := RayTrace(RefractRay(r,obj)); else refract_color := Black; return Shade(reflect_color,refract_color,obj); end;

slide-8
SLIDE 8

8

Review: Reflection and Refraction

  • refraction: mirror effects
  • perfect specular reflection
  • refraction: at boundary
  • Snell’s Law
  • light ray bends based on

refractive indices c1, c2

n d t n

slide-9
SLIDE 9

9

Review: Ray Tracing

  • issues:
  • generation of rays
  • intersection of rays with geometric primitives
  • geometric transformations
  • lighting and shading
  • efficient data structures so we don’t have to

test intersection with every object

slide-10
SLIDE 10

10

Ray-Triangle Intersection

  • method in book is elegant but a bit complex
  • easier approach: triangle is just a polygon
  • intersect ray with plane
  • check if ray inside triangle

normal: n = (b a) (c a) ray : x = e +td plane : (p x) n = 0 x = p n n p n n = e +td t = (e p) n d n p is a or b or c

a b c e d x n

slide-11
SLIDE 11

11

Ray-Triangle Intersection

  • check if ray inside triangle
  • check if point counterclockwise from each edge (to

its left)

  • check if cross product points in same direction as

normal (i.e. if dot is positive)

  • more details at

http://www.cs.cornell.edu/courses/cs465/2003fa/homeworks/raytri.pdf

(b a) (x a) n 0 (c b) (x b) n 0 (a c) (x c) n 0

a b c x n CCW

slide-12
SLIDE 12

12

Ray Tracing

  • issues:
  • generation of rays
  • intersection of rays with geometric primitives
  • geometric transformations
  • lighting and shading
  • efficient data structures so we don’t have to

test intersection with every object

slide-13
SLIDE 13

13

Geometric Transformations

  • similar goal as in rendering pipeline:
  • modeling scenes more convenient using different

coordinate systems for individual objects

  • problem
  • not all object representations are easy to transform
  • problem is fixed in rendering pipeline by restriction to

polygons, which are affine invariant

  • ray tracing has different solution
  • ray itself is always affine invariant
  • thus: transform ray into object coordinates!
slide-14
SLIDE 14

14

Geometric Transformations

  • ray transformation
  • for intersection test, it is only important that ray is in

same coordinate system as object representation

  • transform all rays into object coordinates
  • transform camera point and ray direction by inverse of

model/view matrix

  • shading has to be done in world coordinates (where

light sources are given)

  • transform object space intersection point to world

coordinates

  • thus have to keep both world and object-space ray
slide-15
SLIDE 15

15

Ray Tracing

  • issues:
  • generation of rays
  • intersection of rays with geometric primitives
  • geometric transformations
  • lighting and shading
  • efficient data structures so we don’t have to

test intersection with every object

slide-16
SLIDE 16

16

Local Lighting

  • local surface information (normal…)
  • for implicit surfaces F(x,y,z)=0: normal n(x,y,z)

can be easily computed at every intersection point using the gradient

  • example:
  • =

z z y x F y z y x F x z y x F z y x / ) , , ( / ) , , ( / ) , , ( ) , , ( n

2 2 2 2

) , , ( r z y x z y x F

  • +

+ =

  • =

z y x z y x 2 2 2 ) , , ( n

needs to be normalized! needs to be normalized!

slide-17
SLIDE 17

17

Local Lighting

  • local surface information
  • alternatively: can interpolate per-vertex

information for triangles/meshes as in rendering pipeline

  • now easy to use Phong shading!
  • as discussed for rendering pipeline
  • difference with rendering pipeline:
  • interpolation cannot be done incrementally
  • have to compute barycentric coordinates for

every intersection point (e.g plane equation for triangles)

slide-18
SLIDE 18

18

Global Shadows

  • approach
  • to test whether point is in shadow, send out

shadow rays to all light sources

  • if ray hits another object, the point lies in

shadow

slide-19
SLIDE 19

19

Global Reflections/Refractions

  • approach
  • send rays out in reflected and refracted direction to

gather incoming light

  • that light is multiplied by local surface color and

added to result of local shading

slide-20
SLIDE 20

20

Total Internal Reflection

http://www.physicsclassroom.com/Class/refrn/U14L3b.html

slide-21
SLIDE 21

21

Ray Tracing

  • issues:
  • generation of rays
  • intersection of rays with geometric primitives
  • geometric transformations
  • lighting and shading
  • efficient data structures so we don’t have to

test intersection with every object

slide-22
SLIDE 22

22

Optimized Ray-Tracing

  • basic algorithm simple but very expensive
  • optimize by reducing:
  • number of rays traced
  • number of ray-object intersection calculations
  • methods
  • bounding volumes: boxes, spheres
  • spatial subdivision
  • uniform
  • BSP trees
  • (more on this later with collision)
slide-23
SLIDE 23

23

Example Images

slide-24
SLIDE 24

24

Radiosity

  • radiosity definition
  • rate at which energy emitted or reflected by a surface
  • radiosity methods
  • capture diffuse-diffuse bouncing of light
  • indirect effects difficult to handle with raytracing
slide-25
SLIDE 25

25

Radiosity

  • illumination as radiative heat transfer
  • conserve light energy in a volume
  • model light transport as packet flow until convergence
  • solution captures diffuse-diffuse bouncing of light
  • view-independent technique
  • calculate solution for entire scene offline
  • browse from any viewpoint in realtime

heat/light source thermometer/eye reflective objects energy packets

slide-26
SLIDE 26

26

Radiosity

[IBM] [IBM]

  • divide surfaces into small patches
  • loop: check for light exchange between all pairs
  • form factor: orientation of one patch wrt other patch (n x n matrix)

escience.anu.edu.au/lecture/cg/GlobalIllumination/Image/continuous.jpg escience.anu.edu.au/lecture/cg/GlobalIllumination/Image/discrete.jpg

slide-27
SLIDE 27

27

Better Global Illumination

  • ray-tracing: great specular, approx. diffuse
  • view dependent
  • radiosity: great diffuse, specular ignored
  • view independent, mostly-enclosed volumes
  • photon mapping: superset of raytracing and radiosity
  • view dependent, handles both diffuse and specular well

raytracing photon mapping

graphics.ucsd.edu/~henrik/images/cbox.html

slide-28
SLIDE 28

28

Subsurface Scattering: Translucency

  • light enters and leaves at different locations
  • n the surface
  • bounces around inside
  • technical Academy Award, 2003
  • Jensen, Marschner, Hanrahan
slide-29
SLIDE 29

29

Subsurface Scattering: Marble

slide-30
SLIDE 30

30

Subsurface Scattering: Milk vs. Paint

slide-31
SLIDE 31

31

Subsurface Scattering: Skin

slide-32
SLIDE 32

32

Subsurface Scattering: Skin

slide-33
SLIDE 33

33

Non-Photorealistic Rendering

  • simulate look of hand-drawn sketches or

paintings, using digital models

www.red3d.com/cwr/npr/

slide-34
SLIDE 34

34

Clipping

slide-35
SLIDE 35

35

Reading for Clipping

  • FCG Sec 8.1.3-8.1.6 Clipping
  • FCG Sec 8.4 Culling
  • (12.1-12.4 2nd ed)
slide-36
SLIDE 36

36

Rendering Pipeline

Geometry Database Model/View Transform. Lighting Perspective Transform. Clipping Scan Conversion Depth Test Texturing Blending Frame- buffer

slide-37
SLIDE 37

37

Next Topic: Clipping

  • we’ve been assuming that all primitives (lines,

triangles, polygons) lie entirely within the viewport

  • in general, this assumption will not hold:
slide-38
SLIDE 38

38

Clipping

  • analytically calculating the portions of

primitives within the viewport

slide-39
SLIDE 39

39

Why Clip?

  • bad idea to rasterize outside of framebuffer

bounds

  • also, don’t waste time scan converting pixels
  • utside window
  • could be billions of pixels for very close
  • bjects!
slide-40
SLIDE 40

40

Line Clipping

  • 2D
  • determine portion of line inside an axis-aligned

rectangle (screen or window)

  • 3D
  • determine portion of line inside axis-aligned

parallelpiped (viewing frustum in NDC)

  • simple extension to 2D algorithms
slide-41
SLIDE 41

41

Clipping

  • naïve approach to clipping lines:

for each line segment for each edge of viewport find intersection point pick “nearest” point if anything is left, draw it

  • what do we mean by “nearest”?
  • how can we optimize this?

A B C D

slide-42
SLIDE 42

42

Trivial Accepts

  • big optimization: trivial accept/rejects
  • Q: how can we quickly determine whether a line

segment is entirely inside the viewport?

  • A: test both endpoints
slide-43
SLIDE 43

43

Trivial Rejects

  • Q: how can we know a line is outside

viewport?

  • A: if both endpoints on wrong side of same

edge, can trivially reject line

slide-44
SLIDE 44

44

Clipping Lines To Viewport

  • combining trivial accepts/rejects
  • trivially accept lines with both endpoints inside all edges
  • f the viewport
  • trivially reject lines with both endpoints outside the same

edge of the viewport

  • otherwise, reduce to trivial cases by splitting into two

segments

slide-45
SLIDE 45

45

Cohen-Sutherland Line Clipping

  • outcodes
  • 4 flags encoding position of a point relative to

top, bottom, left, and right boundary

  • OC(p1)=0010
  • OC(p2)=0000
  • OC(p3)=1001

x= x=x xmin

min

x= x=x xmax

max

y= y=y ymin

min

y= y=y ymax

max

0000 0000 1010 1010 1000 1000 1001 1001 0010 0010 0001 0001 0110 0110 0100 0100 0101 0101 p1 p1 p2 p2 p3 p3

slide-46
SLIDE 46

46

Cohen-Sutherland Line Clipping

  • assign outcode to each vertex of line to test
  • line segment: (p1,p2)
  • trivial cases
  • OC(p1)== 0 && OC(p2)==0
  • both points inside window, thus line segment completely visible

(trivial accept)

  • (OC(p1) & OC(p2))!= 0
  • there is (at least) one boundary for which both points are outside

(same flag set in both outcodes)

  • thus line segment completely outside window (trivial reject)
slide-47
SLIDE 47

47

Cohen-Sutherland Line Clipping

  • if line cannot be trivially accepted or rejected,

subdivide so that one or both segments can be discarded

  • pick an edge that the line crosses (how?)
  • intersect line with edge (how?)
  • discard portion on wrong side of edge and assign
  • utcode to new vertex
  • apply trivial accept/reject tests; repeat if necessary
slide-48
SLIDE 48

48

Cohen-Sutherland Line Clipping

  • if line cannot be trivially accepted or rejected,

subdivide so that one or both segments can be discarded

  • pick an edge that the line crosses
  • check against edges in same order each time
  • for example: top, bottom, right, left

A B D E C

slide-49
SLIDE 49

49

Cohen-Sutherland Line Clipping

  • intersect line with edge

A B D E C

slide-50
SLIDE 50

50

  • discard portion on wrong side of edge and assign
  • utcode to new vertex
  • apply trivial accept/reject tests and repeat if

necessary

Cohen-Sutherland Line Clipping

A B D C

slide-51
SLIDE 51

51

Viewport Intersection Code

  • (x1, y1), (x2, y2) intersect vertical edge at xright
  • yintersect = y1 + m(xright – x1)
  • m=(y2-y1)/(x2-x1)
  • (x1, y1), (x2, y2) intersect horiz edge at ybottom
  • xintersect = x1 + (ybottom – y1)/m
  • m=(y2-y1)/(x2-x1)

(x2, y2) (x1, y1) xright (x2, y2) (x1, y1) ybottom

slide-52
SLIDE 52

52

Cohen-Sutherland Discussion

  • key concepts
  • use opcodes to quickly eliminate/include lines
  • best algorithm when trivial accepts/rejects are

common

  • must compute viewport clipping of remaining

lines

  • non-trivial clipping cost
  • redundant clipping of some lines
  • basic idea, more efficient algorithms exist
slide-53
SLIDE 53

53

Line Clipping in 3D

  • approach
  • clip against parallelpiped in NDC
  • after perspective transform
  • means that clipping volume always the same
  • xmin=ymin= -1, xmax=ymax= 1 in OpenGL
  • boundary lines become boundary planes
  • but outcodes still work the same way
  • additional front and back clipping plane
  • zmin = -1, zmax = 1 in OpenGL
slide-54
SLIDE 54

54

Polygon Clipping

  • objective
  • 2D: clip polygon against rectangular window
  • or general convex polygons
  • extensions for non-convex or general polygons
  • 3D: clip polygon against parallelpiped
slide-55
SLIDE 55

55

Polygon Clipping

  • not just clipping all boundary lines
  • may have to introduce new line segments
slide-56
SLIDE 56

56

  • what happens to a triangle during clipping?
  • some possible outcomes:
  • how many sides can result from a triangle?
  • seven

triangle to triangle

Why Is Clipping Hard?

triangle to quad triangle to 5-gon

slide-57
SLIDE 57

57

  • a really tough case:

Why Is Clipping Hard?

concave polygon to multiple polygons

slide-58
SLIDE 58

58

Polygon Clipping

  • classes of polygons
  • triangles
  • convex
  • concave
  • holes and self-intersection
slide-59
SLIDE 59

59

Sutherland-Hodgeman Clipping

  • basic idea:
  • consider each edge of the viewport individually
  • clip the polygon against the edge equation
  • after doing all edges, the polygon is fully clipped
slide-60
SLIDE 60

60

Sutherland-Hodgeman Clipping

  • basic idea:
  • consider each edge of the viewport individually
  • clip the polygon against the edge equation
  • after doing all edges, the polygon is fully clipped
slide-61
SLIDE 61

61

Sutherland-Hodgeman Clipping

  • basic idea:
  • consider each edge of the viewport individually
  • clip the polygon against the edge equation
  • after doing all edges, the polygon is fully clipped
slide-62
SLIDE 62

62

Sutherland-Hodgeman Clipping

  • basic idea:
  • consider each edge of the viewport individually
  • clip the polygon against the edge equation
  • after doing all edges, the polygon is fully clipped
slide-63
SLIDE 63

63

Sutherland-Hodgeman Clipping

  • basic idea:
  • consider each edge of the viewport individually
  • clip the polygon against the edge equation
  • after doing all edges, the polygon is fully clipped
slide-64
SLIDE 64

64

Sutherland-Hodgeman Clipping

  • basic idea:
  • consider each edge of the viewport individually
  • clip the polygon against the edge equation
  • after doing all edges, the polygon is fully clipped
slide-65
SLIDE 65

65

Sutherland-Hodgeman Clipping

  • basic idea:
  • consider each edge of the viewport individually
  • clip the polygon against the edge equation
  • after doing all edges, the polygon is fully clipped
slide-66
SLIDE 66

66

Sutherland-Hodgeman Clipping

  • basic idea:
  • consider each edge of the viewport individually
  • clip the polygon against the edge equation
  • after doing all edges, the polygon is fully clipped
slide-67
SLIDE 67

67

Sutherland-Hodgeman Clipping

  • basic idea:
  • consider each edge of the viewport individually
  • clip the polygon against the edge equation
  • after doing all edges, the polygon is fully clipped
slide-68
SLIDE 68

68

Sutherland-Hodgeman Algorithm

  • input/output for whole algorithm
  • input: list of polygon vertices in order
  • output: list of clipped polygon vertices consisting of old vertices

(maybe) and new vertices (maybe)

  • input/output for each step
  • input: list of vertices
  • output: list of vertices, possibly with changes
  • basic routine
  • go around polygon one vertex at a time
  • decide what to do based on 4 possibilities
  • is vertex inside or outside?
  • is previous vertex inside or outside?
slide-69
SLIDE 69

69

Clipping Against One Edge

  • p[i] inside: 2 cases
  • utside
  • utside

inside inside inside inside

  • utside
  • utside

p[i] p[i] p[i-1] p[i-1]

  • utput:
  • utput: p[i]

p[i] p[i] p[i] p[i-1] p[i-1] p p

  • utput:
  • utput: p,

p, p[i] p[i]

slide-70
SLIDE 70

70

Clipping Against One Edge

  • p[i] outside: 2 cases

p[i] p[i] p[i-1] p[i-1]

  • utput:
  • utput: p

p p[i] p[i] p[i-1] p[i-1] p p

  • utput: nothing
  • utput: nothing
  • utside
  • utside

inside inside inside inside

  • utside
  • utside
slide-71
SLIDE 71

71

Clipping Against One Edge

clipPolygonToEdge( p[n], edge ) { for( i= 0 ; i< n ; i++ ) { if( p[i] inside edge ) { if( p[i-1] inside edge ) output p[i]; // p[-1]= p[n-1] else { p= intersect( p[i-1], p[i], edge ); output p, p[i]; } } else { // p[i] is outside edge if( p[i-1] inside edge ) { p= intersect(p[i-1], p[I], edge ); output p; } } }

slide-72
SLIDE 72

72

Sutherland-Hodgeman Example

inside inside

  • utside
  • utside

p0 p0 p1 p1 p2 p2 p3 p3 p4 p4 p5 p5 p7 p7 p6 p6

slide-73
SLIDE 73

73

Sutherland-Hodgeman Discussion

  • similar to Cohen/Sutherland line clipping
  • inside/outside tests: outcodes
  • intersection of line segment with edge:

window-edge coordinates

  • clipping against individual edges independent
  • great for hardware (pipelining)
  • all vertices required in memory at same time
  • not so good, but unavoidable
  • another reason for using triangles only in

hardware rendering