INF3320 Computer Graphics and Discrete Geometry

Similar documents
INF3320 Computer Graphics and Discrete Geometry

E.Order of Operations

Rasterization Overview

An Interactive Introduction to OpenGL Programming

Pixels and Buffers. CS 537 Interactive Computer Graphics Prof. David E. Breen Department of Computer Science

Real-Time Rendering (Echtzeitgraphik) Michael Wimmer

Buffers and Processing Fragments

CS4620/5620: Lecture 14 Pipeline

Lecture 2. Shaders, GLSL and GPGPU

CS 5610 / Spring Depth Buffering and Hidden Surface Removal

CS 130 Final. Fall 2015

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

Definition. Blending & Compositing. Front & Back Buffers. Left & Right Buffers. Blending combines geometric objects. e.g.

Computergrafik. Matthias Zwicker. Herbst 2010

VISIBILITY & CULLING. Don t draw what you can t see. Thomas Larsson, Afshin Ameri DVA338, Spring 2018, MDH

Normalized Device Coordinate System (NDC) World Coordinate System. Example Coordinate Systems. Device Coordinate System

1.2.3 The Graphics Hardware Pipeline

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

World Coordinate System

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

Discrete Techniques. 11 th Week, Define a buffer by its spatial resolution (n m) and its depth (or precision) k, the number of

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

CS452/552; EE465/505. Clipping & Scan Conversion

Shadow Algorithms. CSE 781 Winter Han-Wei Shen

graphics pipeline computer graphics graphics pipeline 2009 fabio pellacini 1

Computer Graphics. Shadows

graphics pipeline computer graphics graphics pipeline 2009 fabio pellacini 1

Pipeline Operations. CS 4620 Lecture 14

INF3320 Computer Graphics and Discrete Geometry

Graphics Hardware. Instructor Stephen J. Guy

OpenGL: Open Graphics Library. Introduction to OpenGL Part II. How do I render a geometric primitive? What is OpenGL

X. GPU Programming. Jacobs University Visualization and Computer Graphics Lab : Advanced Graphics - Chapter X 1

The Rasterization Pipeline

INF3320 Computer Graphics and Discrete Geometry

OpenGL refresher. Advanced Computer Graphics 2012

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

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

Lecture 17: Shading in OpenGL. CITS3003 Graphics & Animation

EECE 478. Learning Objectives. Learning Objectives. Rasterization & Scenes. Rasterization. Compositing

Tutorial on GPU Programming #2. Joong-Youn Lee Supercomputing Center, KISTI

2.11 Particle Systems

TSBK03 Screen-Space Ambient Occlusion

Buffers, Textures, Compositing, and Blending. Overview. Buffers. David Carr Virtual Environments, Fundamentals Spring 2005 Based on Slides by E.

C P S C 314 S H A D E R S, O P E N G L, & J S RENDERING PIPELINE. Mikhail Bessmeltsev

Models and Architectures

Rasterization Computer Graphics I Lecture 14. Scan Conversion Antialiasing Compositing [Angel, Ch , ]

Rendering Objects. Need to transform all geometry then

CHAPTER 1 Graphics Systems and Models 3

Computer Graphics. Bing-Yu Chen National Taiwan University

CSE 167: Introduction to Computer Graphics Lecture #4: Vertex Transformation

Deferred Rendering Due: Wednesday November 15 at 10pm

Pipeline Operations. CS 4620 Lecture 10

CMSC427 Advanced shading getting global illumination by local methods. Credit: slides Prof. Zwicker

CS230 : Computer Graphics Lecture 4. Tamar Shinar Computer Science & Engineering UC Riverside

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

Module 13C: Using The 3D Graphics APIs OpenGL ES

Scanline Rendering 2 1/42

Triangle Rasterization

Realtime 3D Computer Graphics Virtual Reality

Motivation. Culling Don t draw what you can t see! What can t we see? Low-level Culling

INF3320 Computer Graphics and Discrete Geometry

Introduction to Computer Graphics with WebGL

Drawing Fast The Graphics Pipeline

Acknowledgement: Images and many slides from presentations by Mark J. Kilgard and other Nvidia folks, from slides on developer.nvidia.

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

OpenGl Pipeline. triangles, lines, points, images. Per-vertex ops. Primitive assembly. Texturing. Rasterization. Per-fragment ops.

Programming Guide. Aaftab Munshi Dan Ginsburg Dave Shreiner. TT r^addison-wesley

Orthogonal Projection Matrices. Angel and Shreiner: Interactive Computer Graphics 7E Addison-Wesley 2015

the gamedesigninitiative at cornell university Lecture 17 Color and Textures

Computer Graphics. Attributes of Graphics Primitives. Somsak Walairacht, Computer Engineering, KMITL 1

The Rasterizer Stage. Texturing, Lighting, Testing and Blending

Objectives Shading in OpenGL. Front and Back Faces. OpenGL shading. Introduce the OpenGL shading methods. Discuss polygonal shading

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

Module Contact: Dr Stephen Laycock, CMP Copyright of the University of East Anglia Version 1

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

Order Independent Transparency with Dual Depth Peeling. Louis Bavoil, Kevin Myers

OpenGL. Jimmy Johansson Norrköping Visualization and Interaction Studio Linköping University

Real-Time Graphics Architecture

The Graphics Pipeline

Introduction to the OpenGL Shading Language

Ray tracing. Computer Graphics COMP 770 (236) Spring Instructor: Brandon Lloyd 3/19/07 1

Graphics Processing Unit Architecture (GPU Arch)

Clipping. CSC 7443: Scientific Information Visualization

Graphics Pipeline & APIs

Methodology for Lecture. Importance of Lighting. Outline. Shading Models. Brief primer on Color. Foundations of Computer Graphics (Spring 2010)

CS 112 The Rendering Pipeline. Slide 1

Computer Graphics with OpenGL ES (J. Han) Chapter VII Rasterizer

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

3D Rendering Pipeline

Today. Rendering - III. Outline. Texturing: The 10,000m View. Texture Coordinates. Specifying Texture Coordinates in GL

- Rasterization. Geometry. Scan Conversion. Rasterization

CS770/870 Spring 2017 Open GL Shader Language GLSL

CS770/870 Spring 2017 Open GL Shader Language GLSL

Real-Time Graphics Architecture

Computing Visibility. Backface Culling for General Visibility. One More Trick with Planes. BSP Trees Ray Casting Depth Buffering Quiz

Computer Graphics 10 - Shadows

Computer Graphics (CS 543) Lecture 10: Soft Shadows (Maps and Volumes), Normal and Bump Mapping

Adaptive Point Cloud Rendering

Pipeline and Rasterization. COMP770 Fall 2011

TDA362/DIT223 Computer Graphics EXAM (Same exam for both CTH- and GU students)

Transcription:

INF3320 Computer Graphics and Discrete Geometry The OpenGL pipeline Christopher Dyken and Martin Reimers 12.10.2011 Page 1

Pipeline operations Page 2

OpenGL fixed-function pipeline: Implements a fixed sequence of operations: transformation of vertices lighting calculations for vertices combining vertices to primitives rasterization texturing of fragments combining fragments to framebuffer values State-machine: Fixed operations can be turned on or off Green = programmable, yellow = configurable, blue = fixed Page 3

Today OpenGL fixed function functionality combining vertices to primitives rasterization coloring of fragments combining fragments with framebuffer values Green = programmable, yellow = configurable, blue = fixed Page 4

The OpenGL pipeline Real Time Rendering: The Graphics Rendering Pipeline(Chapter 2) The Graphics Processing Unit (GPU) (Chapter 3) Buffers and Buffering (Chapter 18.1) Perspective Correct Interpolation (Chapter 18.2) The Red Book: Blending, Antialiasing, and Polygon Offset (Chapter 6) The Framebuffer (Chapter 10) Order of Operations (Appendix A) Page 5

Primitive assembly / Triangle setup Page 6

Primitive assembly and culling Primitive assembly combines transformed vertices into points, lines, triangles according to glbegin-glend state. Triangles are classified 1 as front- or backfacing. When culling is enabled 2, a triangle is discarded if it is backfacing and glcullface(gl_back) is set, or it is frontfacing and glcullface(gl_front) is set. = If an object is closed, we can never see the back-side of the triangles, so why process them further? 1 Check the sign of the 2D-area of the triangle. 2 glenable(gl_cull_face) Page 7

Clipping Page 8

Hyperplanes and half-spaces A hyperplane divides a space into two, a pos and neg side: In R a point is a hyperplane, in R 2 a line is a hyperplane, and in R 3 a plane is a hyperplane. In R d, a hyperplane is defined implicitly by a 1,..., a d+1 : d a i p i + a d+1 > 0 implies that p is in the positive halfspace, i=1 d a i p i + a d+1 < 0 implies that p is in the negative halfspace, i=1 d a i p i + a d+1 = 0 implies that p is on the hyperplane i=1 Page 9

Recall that the point p = (x, y, z, w) is on the homogeneous plane m = [ a b c d ] if x [ ] a b c d y z = ax + by + cz + dw = 0. w We can find the intersection of the plane and a line segment p 1 p p 2 p = (1 t)p 1 + tp 2, t [0, 1], by inserting into the equation above, m p = m ((1 t)p ) 1 + tp 2 = 0, and solve for t... Page 10

t = mp 1 ) gives the parameter point of the intersection. m (p 2 p 1 If p 1 and p 2 have associated data like color c 1 and c 2, the color c at the intersection point can be linearly interpolated as c = (1 t)c 1 + tc 2. p 1 p 1 t t p 2 Page 11

Clipping line segments in the plane Assume we want to clip against a rectangle [ w, w][ h, h] in R 2 : rectangle is the intersection of the four half-planes, m 1 = [ 1 0 w ] x w, m 2 = [ 1 0 w ] x w, m 3 = [ 0 1 h ] y h, and m 4 = [ 0 1 h ] y h. = A point p = [ x y 1 ] T is inside the rectangle, if m i p 0, for i = 1, 2, 3, 4. Page 12

We then clip in the following way: For each hyperplane i = 1, 2, 3, 4, clip the line segment: 1. If both end-points is outside the half-space = reject it. = reject the line segment. 2. If both end-points is inside the half-space = accept it. = accept the line segment. 3. If one end-point is inside, and one end-point is outside = define a new line segment between the end-point inside and the intersection point. Page 13

Clipping convex polygon in the plane The intersection of two convex sets is convex. Half-spaces are convex, and therefore, the clipped result is convex. A polygon is defined as a loop of vertices p 1 p 2 p n p 1 Then, for each half-space 1. Classify each vertex as inside or outside the half-space. 2. for each pair of adjacent vertices where one vertex is inside and one is outside, insert the intersection point between. 3. Remove the vertices classified as outside The remaining loop represents the clipped polygon. Page 14

Clipping stage in OpenGL The geometry is clipped against the 6 planes of the view frustum Additionally, >6 more planes can be defined, e.g. for cutaway view: glenable(gl_clip_planei) glclipplane(plane-id,[a,b,c,d]) vertices with eye-space coords (x, y, z, w) such that (A, B, C, D)M 1 (x, y, z, w) < 0 are clipped (M = modelview matrix) Page 15

Clipping stage in OpenGL Page 16

Rasterization Page 17

Rasterization Convert primitives to fragments (which contributes to pixel color) Page 18

Rasterization and the fragment pipeline glenable(gl_fragment_program) point rasterization programmable fragment pipeline fragment program from primitive assembly line rasterization to buffer operations texturing color sum fog polygon rasterization fixed fragment pipeline Rasterization converts primitives into fragments 3. Fragments are then subjected to fragment pipeline and then sent to buffer operations. 3 A pixel and associated data before it is written to the framebuffer Page 19

Which fragments do a triangle produce? All fragments whose centre is inside the triangle is produced. A tie-breaking rule is used when the centre is on the boundary. = A fragment belongs only to one of two adjacent triangles. Page 20

Fragment invariance Fragments hold the following invariance rules: Given the primitive p make a new primitive p by offsetting the coordinates with the integers x, y. Assume that neither p or p is clipped. = p and p produces the exact same fragments, except that fragment f of p is shifted x, y compared to fragment f of p. If you render two primitives with identical vertex coordinates, they produce exactly the same fragments. Why? This is of major importance in multi-pass techniques where one renders the same geometry more than once. Page 21

s.t p = α 1p 1 + α 2p 2 + α 3p 3 p 1 p 2 Interpolating fragment data over primitives Need to interpolate vertex data in fragments (position, color etc.) Barycentric coordinates The barycentric coordinates (α 1, α 2, α 3) of p w.r.t the triangle [p 1, p 2, p 3] are α 1 = area(p, p2, p3) area(p 1, p 2, p 3) α 2 = area(p, p1, p3) area(p 1, p 2, p 3) α 3 = area(p, p1, p2) area(p 1, p 2, p 3) They are the unique convex weights, i.e. p 3 α 1, α 2, α 3 0, α 1+α 2+α 3 = 1, p Yields a natural way to linearly interpolate data over triangles: e.g. color c(p) = α 1c 1 + α 2c 2 + α 3c 3. Page 22

Linear interpolation Let (α 1, α 2, α 3) be the barycentric coords of the fragment midpoint wrt. the screen-space coordinates of T = [p 1, p 2, p 3]. Interpolating linearly in screen space Linear interpolation of corner colors c 1, c 2, c 3 c = α 1c 1 + α 2c 2 + α 3c 3 Looks wrong since perspective distortion is lost! Must take depth d into account! In 2D: Page 23

Linear interpolation Let (α 1, α 2, α 3) be the barycentric coords of the fragment midpoint wrt. the screen-space coordinates of T = [p 1, p 2, p 3]. Interpolating linearly in screen space Linear interpolation of corner colors c 1, c 2, c 3 c = α 1c 1 + α 2c 2 + α 3c 3 Looks wrong since perspective distortion is lost! Must take depth d into account! In 2D: p 1 = v 1/d 1 v 1 Assume p = α 1p 1 + α 2p 2. Then p 2 = v 2/d 2 p v v = α1 v 1 v d 1 + α 2 2 d 2 α 1 d 1 + α = α 2 1v 1 + α 2v 2 d 2 screen v 2 i.e. α 1, α 2 are coordinates of v wrt v 1, v 2 Page 24

Perspective correct interpolation Interpolating linearly in object space Perspective corrected interpolation is given by c = α 1 d 1 c 1 + α 2 d 2 c 2 + α 3 d 3 c 3 α 1 d 1 + α 2 d 2 + α, 3 d 3 where d 1, d 2, d 3 are the depths of the vertices Perspective correct interpolation! Turn on with glhint(gl_perspective_correction_hint,gl_nicest) All modern graphics cards support perspective correct interpolation Easy GLSL shader support Page 25

The effect of perspective correct interpolation Screen space interpolation of texture coordinates Page 26

Fixed fragment pipeline Fragments (position w/ data) are submitted to fragment pipeline: If texturing is enabled = Use texcoords and do a texture lookup = modify the fragment color. If secondary color 4 = add secondary colour to the fragment s color If fog is enabled, = use depth to control a blend between the fragment color and a fog colour. The fragment is then sent to framebuffer operations. 4 If glenable(gl_separate_specular_color) is enabled, the specular contribution from the lighting calculations are maintained in a secondary color which is not tampered with by texturing. Page 27

The framebuffer Page 28

A framebuffer is a set of logical buffers pixel framebuffer height stencil buffer depth buffer blue channel green channel color buffer red channel framebuffer width color buffers (front/back, left/right, + auxillary, typically 16 32 bits) depth buffer (typically 24 32 bits) (store depth value pr pixel) stencil buffer (typically 0 8 bits) (used to control drawing/masks) accumulation buffer (precision like color buffer or higher) (used e.g. for combining several images),... A fragment/pixel is related to the contents of all logical buffers at its position Page 29

Basic Buffer operations The buffers are read from and/or written to in fragment-pipeline Clearing glclear[color Depth Stencil Accum] sets the clear value, e.g. glcleardepth(1.0f) glclear(bit-mask) clear the chosen buffers, e.g. glclear(gl_depth_buffer_bit GL_COLOR_BUFFER_BIT) Read and Write gldrawbuffer select color buffers for writing/clearing glreadbuffer select src for reading (e.g. glreadpixels) Fixed-function pipeline: each output-buffer recieve the same output Programmable pipeline: output-buffers can get individual output Page 30

Write masks specifies which of current framebuffer s logical buffers are updated: glcolormask(bool,bool,bool,bool) specifies if the R,G,B, or A channels should be updated. gldepthmask(bool) specifies if the depth buffer should be updated 1. glstencilmask(bitmask) specifies which of the stencil-buffer bit-planes that should be updated. (Comes in a separate front/back mode too) Render only to the stencil buffer turn off the color and depth masks and enable the stencil mask. 1 Use glenable/gldisable with GL_DEPTH_TEST to control the test itself. Page 31

Per-fragment operations Page 32

All fragments are subjected to a series of tests: Fragment and associated data ownership test scissor test alpha test (RGBA) stencil test write framebuffer read / update read / update Logical operations Dithering blending (RGBA) depth test If all tests succeed = fragment is written to the framebuffer If any test fail = fragment is discarded. Page 33

Fragment tests Pixel ownership test The OS discard fragments at pixel locations not owned by the context. Scissor test (glscissor(x,y,w,h)) All fragments outside a specified rectangle are discarded. Alpha test (glalphafunc(func,ref)) (deprecated from GL 3.0) Compare (func) the fragment s alpha value with a reference value (ref) Let us e.g. render opaque and translucent objects, billboarding... Page 34

The stencil test Stencil test Compare value in the stencil buffer with a reference value. glstencilfunc(func,ref,mask) comparison function (never,always,<,<=,!=,...), reference value, and a bitmask for both reference and stencil buffer value Stencil operation The stencil buffer is updated from the result of the stencil and depth-tests. glstencilop specifies how the stencil buffer is updated when: the stencil-test fails the stencil-test passes, but dept-test fail both the stencil-test and the depth-test passes glenable/disable( GL_STENCIL_TEST ) turns the test on/off. Typically used for disabling rendering to a part of the screen Page 35

The depth test The depth-buffer (z-buffer) algorithm clear by setting all depth-buffer elements to far. for each fragment: if fragment s depth < depth-buffer depth = store fragment and update depth-buffer if fragment s depth depth-buffer depth = discard fragment result is that only the nearest fragment is stored for any sequence of fragments. glenable/disable( GL_DEPTH_TEST ) turns the test on/off. gldepthfunc specifies the depth test (GL_NEVER,GL_LESS,...) Depth test typically used for removing hidden geometry efficiently Page 36

The Z-buffer Page 37

What is stored in the depth-buffer? depth(z) = 2 depth bits( z far z far z near 1 z z far z near z far z near ) depth-buffer value 16 12 8 4 0 z near = 10, z far = 1000 z near = 100, z far = 1000 z near = 100, z far = 5000 z near = 100, z far = 0 500 1000 z value depth is an n-bit integer proportional to 1 (i.e. non-linear). z much precision around the near plane little precision around the far plane Increase depth precision by pushing near plane as far away as possible! The far plane also influences precision, but to a much lesser extent. Page 38

Z-fighting Z-fighting is the result of too little z-buffer precision Two fragments of different z-values get the same depth value, and the algorithm can t tell which is in front of the other. This results in an ugly pattern where some fragments of one primitive appears in front of the other while others do not. Page 39

Stencil/depth test applications DOOM3 shadows: count back and front facing fragments passing depth test Page 40

The merging stage Incoming (src) fragments are merged into the framebuffer (dst): Depth/z-test: replace dst fragment if src is closer Logical operations: AND, XOR,... Blending: combine src and dst Logical operations, gllogicop(op) dst = src OP dst where OP is a logical operation, e.g. AND, OR,... Page 41

Blending Blending The incoming fragment s is combined with the color already in the framebuffer. src = F ssrc OP F d dst where src and dst are RGBA, F s are blend-factors and OP is e.g. add-operator Set up with gl[enable Disable](GL_BLEND) - enables blending glblendfunc(f s,f d ) - set RGBA blend factors glblendfuncseparate(f s,f d,fs α,fd α ) - separate RGB and α blend factors glblendequation(op) - OP can be e.g. add, subtract, min, max, etc. The factors F can be: 0, 1, α, src, dst,... Page 42

Blending applications Blending is most often based on the alpha channel Transparent objects, render back to front Fog Billboarding Anti-aliasing Page 43

Transparency Blend color of transparent material and background Important: Render back to front (oblique objects first)! Page 44

Fog Popular, cheap effect for depth cues: c = f c f + (1 f )c s where c f and c s are fog and surface color, and f can be linear: f (z) = exp: f (z) = e d f z z end z z end z start exp2: f (z) = e (d f z) 2 Page 45

Fog in OpenGL GLfloat fogcolor[4] = {0.5, 0.5, 0.5, 1.0}; glenable (GL_DEPTH_TEST); //enable depth testing glenable (GL_FOG); glfogi (GL_FOG_MODE, GL_EXP2); glfogfv (GL_FOG_COLOR, fogcolor); glfogf (GL_FOG_DENSITY, 0.3); glhint (GL_FOG_HINT, GL_NICEST); // pr pixel calculation Page 46

Accumulation buffer A color buffer that can accumulate several renderings, like multiple exposures I glaccum(op,val), e.g. glaccum(gl_accum,0.1) I read from readable buffer (glreadbuffer) I After accumulation, glaccum(gl_return,1) writes back to write to output-buffers Applications: accumulate perturbed images I Antialiasing I Depth of field I Motion blur Page 47

The last slide Main points today: opengl pipeline, blending, frame-buffer Fixed function pixel operations are somewhat obsolete.. You will see why next time - programmable pipeline Page 48

Gamma Correction - the problem Percieved intensity is usually not a linear function of light intensity eyes are more sensitive to variation in low intensity hardware handles signal strength (voltage) differently Most computations in gfx are based on linearity, e.g. adding contributions from multiple lights This gives wrong results in many cases, e.g. in antialiasing Page 49

Gamma Correction - the solution In order to represent color correctly we modify signal by V out = V γ in to account for the hardware specific pixel intensity to emitted/percieved intensity. γ-correction is important for portability, image quality, texturing and interpolation. Handled by modern GPUs, or using shaders. Page 50