The Rasterization Pipeline

Similar documents
The Rasterization Pipeline

Spring 2009 Prof. Hyesoon Kim

CS4620/5620: Lecture 14 Pipeline

Graphics Processing Unit Architecture (GPU Arch)

CS451Real-time Rendering Pipeline

CS GPU and GPGPU Programming Lecture 2: Introduction; GPU Architecture 1. Markus Hadwiger, KAUST

Lecture 13: Reyes Architecture and Implementation. Kayvon Fatahalian CMU : Graphics and Imaging Architectures (Fall 2011)

Drawing Fast The Graphics Pipeline

Parallel Triangle Rendering on a Modern GPU

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

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

Spring 2011 Prof. Hyesoon Kim

Real - Time Rendering. Graphics pipeline. Michal Červeňanský Juraj Starinský

CS427 Multicore Architecture and Parallel Computing

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

Scanline Rendering 2 1/42

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

CS130 : Computer Graphics Lecture 2: Graphics Pipeline. Tamar Shinar Computer Science & Engineering UC Riverside

Pipeline Operations. CS 4620 Lecture 14

Lecture 4: Visibility. (coverage and occlusion using rasterization and the Z-buffer) Visual Computing Systems CMU , Fall 2014

Parallelizing Graphics Pipeline Execution (+ Basics of Characterizing a Rendering Workload)

Scheduling the Graphics Pipeline on a GPU

Lecture 2. Shaders, GLSL and GPGPU

Bringing AAA graphics to mobile platforms. Niklas Smedberg Senior Engine Programmer, Epic Games

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

graphics pipeline computer graphics graphics pipeline 2009 fabio pellacini 1

graphics pipeline computer graphics graphics pipeline 2009 fabio pellacini 1

Rendering Objects. Need to transform all geometry then

Rasterization Overview

Real-Time Rendering (Echtzeitgraphik) Michael Wimmer

8/5/2012. Introduction. Transparency. Anti-Aliasing. Applications. Conclusions. Introduction

Adaptive Point Cloud Rendering

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

Introduction to Visualization and Computer Graphics

Lecture 6: Texturing Part II: Texture Compression and GPU Latency Hiding Mechanisms. Visual Computing Systems CMU , Fall 2014

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

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

PowerVR Hardware. Architecture Overview for Developers

Course Recap + 3D Graphics on Mobile GPUs

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

Lecture 4: Geometry Processing. Kayvon Fatahalian CMU : Graphics and Imaging Architectures (Fall 2011)

CS130 : Computer Graphics. Tamar Shinar Computer Science & Engineering UC Riverside

CS 354R: Computer Game Technology

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

Pipeline Operations. CS 4620 Lecture 10

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

Mattan Erez. The University of Texas at Austin

Evolution of GPUs Chris Seitz

Rendering Grass with Instancing in DirectX* 10

Computer Graphics. Lecture 02 Graphics Pipeline. Edirlei Soares de Lima.

3D Rendering Pipeline

Mattan Erez. The University of Texas at Austin

Drawing Fast The Graphics Pipeline

After the release of Maxwell in September last year, a number of press articles appeared that describe VXGI simply as a technology to improve

PROFESSIONAL. WebGL Programming DEVELOPING 3D GRAPHICS FOR THE WEB. Andreas Anyuru WILEY. John Wiley & Sons, Ltd.

Perspective Projection and Texture Mapping

TSBK03 Screen-Space Ambient Occlusion

Lecture 6: Texture. Kayvon Fatahalian CMU : Graphics and Imaging Architectures (Fall 2011)

Rasterization and Graphics Hardware. Not just about fancy 3D! Rendering/Rasterization. The simplest case: Points. When do we care?

Programming Graphics Hardware

Today s Agenda. Basic design of a graphics system. Introduction to OpenGL

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

Parallelizing Graphics Pipeline Execution (+ Basics of Characterizing a Rendering Workload)

Lecture 9: Deferred Shading. Visual Computing Systems CMU , Fall 2013

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

Architectures. Michael Doggett Department of Computer Science Lund University 2009 Tomas Akenine-Möller and Michael Doggett 1

Drawing Fast The Graphics Pipeline

Computer Graphics Shadow Algorithms

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

Advanced Rendering Techniques

CS 130 Exam I. Fall 2015

2.11 Particle Systems

Computer graphics 2: Graduate seminar in computational aesthetics

Next-Generation Graphics on Larrabee. Tim Foley Intel Corp

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

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

2: Introducing image synthesis. Some orientation how did we get here? Graphics system architecture Overview of OpenGL / GLU / GLUT

Real - Time Rendering. Pipeline optimization. Michal Červeňanský Juraj Starinský

POWERVR MBX. Technology Overview

1.2.3 The Graphics Hardware Pipeline

Many rendering scenarios, such as battle scenes or urban environments, require rendering of large numbers of autonomous characters.

Graphics Pipeline 2D Geometric Transformations

WebGL and GLSL Basics. CS559 Fall 2015 Lecture 10 October 6, 2015

Chapter IV Fragment Processing and Output Merging. 3D Graphics for Game Programming

Shaders. Slide credit to Prof. Zwicker

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

Windowing System on a 3D Pipeline. February 2005

Programming shaders & GPUs Christian Miller CS Fall 2011

Topics and things to know about them:

Introduction to Shaders.

Graphics Performance Optimisation. John Spitzer Director of European Developer Technology

The simplest and most obvious method to go from a continuous to a discrete image is by point sampling,

CS 130 Exam I. Fall 2015

DEFERRED RENDERING STEFAN MÜLLER ARISONA, ETH ZURICH SMA/

Game Architecture. 2/19/16: Rasterization

Real-Time Voxelization for Global Illumination

lecture 18 - ray tracing - environment mapping - refraction

Drawing in 3D (viewing, projection, and the rest of the pipeline)

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

CHAPTER 1 Graphics Systems and Models 3

Transcription:

Lecture 5: The Rasterization Pipeline (and its implementation on GPUs) Computer Graphics CMU 15-462/15-662, Fall 2015

What you know how to do (at this point in the course) y y z x (w, h) z x Position objects and the camera in the world Determine the position of objects relative to the camera (0, 0) Project objects onto the screen Sample triangle coverage Compute triangle attribute Sample texture maps values at covered sample points CMU 15-462/662, Fall 2015

What else do you need to know to render a picture like this? Surface representation How to represent complex surfaces? Occlusion Determining which surface is visible to the camera at each sample point Lighting/materials Describing lights in scene and how materials reflect light. CMU 15-462/662, Fall 2015

Course roadmap Introduction Drawing a triangle (by sampling) Key concepts: Sampling (and anti-aliasing) Coordinate Spaces and Transforms Drawing Things Transforms and coordinate spaces Perspective projection and texture sampling Today: putting it all together: end-to-end rasterization pipeline Geometry Materials and Lighting CMU 15-462/662, Fall 2015

Occlusion

Occlusion: which triangle is visible at each covered sample point? Opaque Triangles 50% transparent triangles

Review from last class Assume we have a triangle defined by the screen-space 2D position and distance ( depth ) from the camera of each vertex. p0x p 0y T, d0 p1x p 1y T, d1 p2x p 2y T, d2 How do we compute the depth of the triangle at covered sample point (x, y)? Interpolate it just like any other attribute that varies linearly over the surface of the triangle.

Occlusion using the depth-buffer (Z-buffer) For each coverage sample point, depth-buffer stores depth of closest triangle at this sample point that has been processed by the renderer so far. Closest triangle at sample point (x,y) is triangle with minimum depth at (x,y) Initial state of depth buffer before rendering any triangles (all samples store farthest distance) Grayscale value of sample point used to indicate distance Black = small distance White = large distance

Depth buffer example

Example: rendering three opaque triangles

Occlusion using the depth-buffer (Z-buffer) Processing yellow triangle: depth = 0.5 Grayscale value of sample point used to indicate distance White = large distance Black = small distance Red = sample passed depth test Color buffer contents Depth buffer contents

Occlusion using the depth-buffer (Z-buffer) After processing yellow triangle: Grayscale value of sample point used to indicate distance White = large distance Black = small distance Red = sample passed depth test Color buffer contents Depth buffer contents

Occlusion using the depth-buffer (Z-buffer) Processing blue triangle: depth = 0.75 Grayscale value of sample point used to indicate distance White = large distance Black = small distance Red = sample passed depth test Color buffer contents Depth buffer contents

Occlusion using the depth-buffer (Z-buffer) After processing blue triangle: Grayscale value of sample point used to indicate distance White = large distance Black = small distance Red = sample passed depth test Color buffer contents Depth buffer contents

Occlusion using the depth-buffer (Z-buffer) Processing red triangle: depth = 0.25 Grayscale value of sample point used to indicate distance White = large distance Black = small distance Red = sample passed depth test Color buffer contents Depth buffer contents

Occlusion using the depth-buffer (Z-buffer) After processing red triangle: Grayscale value of sample point used to indicate distance White = large distance Black = small distance Red = sample passed depth test Color buffer contents Depth buffer contents

Occlusion using the depth buffer bool$pass_depth_test(d1,$d2)${$ $$$return$d1$<$d2;$$$$ }$$ depth_test(tri_d,$tri_color,$x,$y)${$ $$if$(pass_depth_test(tri_d,$zbuffer[x][y])${$ $$$$//$triangle$is$closest$object$seen$so$far$at$this$ $$$$//$sample$point.$update$depth$and$color$buffers.$$$ $$$$zbuffer[x][y]$=$tri_d;$$$$$//$update$zbuffer$ $$$$color[x][y]$=$tri_color;$$$//$update$color$buffer$ $$}$ }$

Does depth-buffer algorithm handle interpenetrating surfaces? Of course! Occlusion test is based on depth of triangles at a given sample point. The relative depth of triangles may be different at different sample points. Green triangle in front of yellow triangle Yellow triangle in front of green triangle

Does depth-buffer algorithm handle interpenetrating surfaces? Of course! Occlusion test is based on depth of triangles at a given sample point. The relative depth of triangles may be different at different sample points.

Does depth buffer work with super sampling? Of course! Occlusion test is per sample, not per pixel! This example: green triangle occludes yellow triangle

Color buffer contents

Color buffer contents (4 samples per pixel)

Final resampled result Note anti-aliasing of edge due to filtering of green and yellow samples.

Summary: occlusion using a depth buffer Store one depth value per coverage sample (not per pixel!) Constant space per sample - Implication: constant space for depth buffer Constant time occlusion test per covered sample - Read-modify write of depth buffer if pass depth test - Just a read if fail Not specific to triangles: only requires that surface depth can be evaluated at a screen sample point But what about semi-transparent surfaces?

Compositing

Representing opacity as alpha Alpha describes the opacity of an object - Fully opaque surface: α = 1-50% transparent surface: α = 0.5 - Fully transparent surface: α = 0 Red triangle with decreasing opacity α = 1 α = 0.75 α = 0.5 α = 0.25 α =0

Alpha: additional channel of image (rgba) α of foreground object

Over operator: Composite image B with opacity α B over image A with opacity α A B B over A A B A A over B A over B!= B over A Over is not commutative Koala over NYC

Over operator: non-premultiplied alpha Composite image B with opacity α B over image A with opacity α A A first attempt: A = A r A g T A b B = B r B g B b T Composited color: Appearance of semitransparent A B B over A A C = B B +(1 B ) A A B A Appearance of semi-transparent B What B lets through A over B A over B!= B over A Over is not commutative

Over operator: premultiplied alpha Composite image B with opacity α B over image A with opacity α A Non-premultiplied alpha: A = T A r A g A b B = B r B g B b T C = B B +(1 B ) A A A 0 = T A A r A A g A A b A B 0 = T B B r B B g B B b B Premultiplied alpha: two multiplies, one add (referring to vector ops on colors) B B over A A C 0 = B +(1 B )A one multiply, one add Composite alpha: C = B +(1 B ) A Notice premultiplied alpha composites alpha just like how it composites rgb. Non-premultiplied alpha composites alpha differently than rgb.

Applying over repeatedly Composite image C with opacity α C over B with opacity α B over image A with opacity α A A = T A r A g A b C = B B +(1 Non-premultiplied alpha is not closed under composition: B = B r B g B b T B ) A A B C A C = B +(1 B ) A Consider result of compositing 50% red over 50% red: C = 0.75 0 0 T C =0.75 C over B over A Wait this result is the premultiplied color! Over for non-premultiplied alpha takes non-premultiplied colors to premultiplied colors ( over operation is not closed) Cannot compose over operations on non-premultiplied values: over(c,$over(b,$a)) Closed form of non-premultiplied alpha: C = 1 C ( B B +(1 B ) A A)

Another problem with non-premultiplied alpha Consider pre-filtering a texture with an alpha matte Desired filtered result α input color input α filtered color filtered α filtered result Downsampling non-premultiplied alpha image results in 50% opaque brown) composited over white 0.25 * ((0, 1, 0, 1) + (0, 1, 0, 1) + (0, 0, 0, 0) + (0, 0, 0, 0)) = (0, 0.5, 0, 0.5) Result of filtering premultiplied image

Summary: advantages of premultiplied alpha Simple: compositing operation treats all channels (rgb and a) the same More efficient than non-premultiplied representation: over requires fewer math ops Closed under composition Better representation for filtering textures with alpha channel

Color buffer update: semi-transparent surfaces Color buffer values and tri_color are represented with premultiplied alpha over(c1,$c2)${$ $$$return$c1$+$(1mc1.a)$*$c2;$$$$ }$$ $$ update_color_buffer(tri_d,$tri_color,$x,$y)${$ $$$if$(pass_depth_test(tri_d,$zbuffer[x][y])${$ $$$$$$$//$update$color$buffer$ $$$$$$$//$Note:$no$depth$buffer$update$ $$$$$$$color[x][y]$=$over(tri_color,$color[x][y]);$ $$}$ } What is the assumption made by this implementation? Triangles must be rendered in back to front order! What if triangles are rendered in front to back order? Modify code: over(color[x][y],$tri_color)

Putting it all together Consider rendering a mixture of opaque and transparent triangles Step 1: render opaque surfaces using depth-buffered occlusion If pass depth test, triangle overwrites value in color buffer at sample Step 2: disable depth buffer update, render semi-transparent surfaces in back-to-front order. If pass depth test, triangle is composited OVER contents of color buffer at sample

End-to-end rasterization pipeline ( real-time graphics pipeline )

Command: draw these triangles! Inputs: list_of_positions$=${$ $$$$v0x,$v0y,$v0z,$$ $$$$v1x,$v1y,$v1x,$ $$$$v2x,$v2y,$v2z,$ $$$$v3x,$v3y,$v3x,$ $$$$v4x,$v4y,$v4z,$ $$$$v5x,$v5y,$v5x$$$};$ list_of_texcoords$=${$ $$$$v0u,$v0v,$$ $$$$v1u,$v1v,$ $$$$v2u,$v2v,$ $$$$v3u,$v3v,$ $$$$v4u,$v4v,$ $$$$v5u,$v5v$$$};$ Texture map Object-to-camera-space transform: T Perspective projection transform P Size of output image (W, H) Use depth test /update depth buffer: YES! CMU 15-462/662, Fall 2015

Step 1: Transform triangle vertices into camera space y z x CMU 15-462/662, Fall 2015

Step 2: Apply perspective projection transform to transform triangle vertices into normalized coordinate space x 8 x 4 y x 8 y x 4 x 3 x 3 z (-1,-1,-1) x 1 x 7 (1, 1, 1) x 5 z x 1 x 5 x Pinhole Camera (0,0) x 2 znear x 6 x 2 x x 6 Camera-space positions: 3D Normalized space positions Note: I m illustrating normalized 3D space after the homogeneous divide, it is more accurate to think of this volume in 3D-H space as defined by: (-w, -w, -w, w) and (w, w, w, w) CMU 15-462/662, Fall 2015

Step 3: clipping Discard triangles that lie complete outside the unit cube (culling) - They are off screen, don t bother processing them further Clip triangles that extend beyond the unit cube to the cube - Note: clipping may create more triangles x 4 y x 8 x 4 y x 8 z (-1,-1,-1) x 1 x 7 (1, 1, 1) x 5 z (-1,-1,-1) x 1 x 7 (1, 1, 1) x 5 x x x 2 x 6 x 2 x 6 Triangles before clipping Triangles after clipping CMU 15-462/662, Fall 2015

Step 4: transform to screen coordinates Transform vertex xy positions from normalized coordinates into screen coordinates (based on screen w,h) (w, h) (0, 0) CMU 15-462/662, Fall 2015

Step 5: setup triangle (triangle preprocessing) Compute triangle edge equations Compute triangle attribute equations E 01 (x, y) =E 12 (x, y) U(x, y) =V(x, y) E 20 (x, y) 1 w (x, y) Z(x, y) CMU 15-462/662, Fall 2015

Step 6: sample coverage Evaluate attributes z, u, v at all covered samples CMU 15-462/662, Fall 2015

Step 6: compute triangle color at sample point e.g., sample texture map * u(x,y), v(x,y) v u * So far, we ve only described computing triangle s color at a point by interpolating per-vertex colors, or by sampling a texture map. Later in the course, we ll discuss more advanced algorithms for computing its color based on material properties and scene lighting conditions. CMU 15-462/662, Fall 2015

Step 7: perform depth test (if enabled) Also update depth value at covered samples (if necessary) PASS PASS PASS FAIL PASS PASS FAIL PASS PASS PASS FAIL FAIL PASS PASS PASS FAIL FAIL PASS PASS PASS CMU 15-462/662, Fall 2015

Step 8: update color buffer (if depth test passed) CMU 15-462/662, Fall 2015

OpenGL/Direct3D graphics pipeline * Structures rendering computation as a series of operations on vertices, primitives, fragments, and screen samples 1 3 4 Input: vertices in 3D space Operations on vertices Operations on primitives (triangles, lines, etc.) Vertex Processing Vertex stream Primitive Processing Primitive stream 2 Vertices in positioned in normalized coordinate space Fragment Generation (Rasterization) Triangles positioned on screen Operations on fragments Fragment stream Fragment Processing Fragments (one fragment per covered sample) Operations on screen samples Shaded fragment stream Screen sample operations (depth and color) Shaded fragments Output: image (pixels) * Several stages of the modern OpenGL pipeline are omitted CMU 15-462/662, Fall 2015

OpenGL/Direct3D graphics pipeline * 1 3 4 Input vertices in 3D space 2 Operations on vertices Vertex Processing Vertex stream transform matrices Operations on primitives (triangles, lines, etc.) Operations on fragments Operations on screen samples Primitive Processing Primitive stream Fragment Generation (Rasterization) Fragment stream Shaded fragment stream Fragment Processing Screen sample operations (depth and color) * several stages of the modern OpenGL pipeline are omitted textures Pipeline inputs: - Input vertex data - Parameters needed to compute position on vertices in normalized coordinates (e.g., transform matrices) - Parameters needed to compute color of fragments (e.g., textures) - Shader programs that define behavior of vertex and fragment stages CMU 15-462/662, Fall 2015

Shader programs Define behavior of vertex processing and fragment processing stages Describe operation on a single vertex (or single fragment) Example GLSL fragment shader program uniform$sampler2d$mytexture;$ uniform$vec3$lightdir;$ varying$vec2$uv;$ varying$vec3$norm;$ Program parameters Per-fragment attributes (interpolated by rasterizer) Shader function executes once per fragment. Outputs color of surface at sample point corresponding to void$diffuseshader()$ {$ $$vec3$kd;$ $$kd$=$texture2d(mytexture,$uv);$ $$kd$*=$clamp(dot(mlightdir,$norm),$0.0,$1.0);$ $$gl_fragcolor$=$vec4(kd,$1.0);$$$$ }$ Sample surface albedo (reflectance color) from texture fragment. (this shader performs a texture lookup to obtain the surface s material color at this point, then performs a simple lighting computation) Shader outputs surface color Modulate surface albedo by incident irradiance (incoming light) CMU 15-462/662, Fall 2015

Goal: render very high complexity 3D scenes - 100 s of thousands to millions of triangles in a scene - Complex vertex and fragment shader computations - High resolution screen outputs (2-4 Mpixel + supersampling) - 30-60 fps Unreal Engine Kite Demo (Epic Games 2015) CMU 15-462/662, Fall 2015

Graphics pipeline implementation: GPUs Specialized processors for executing graphics pipeline computations Discrete GPU card (NVIDIA GeForce Titan X) Integrated GPU: part of modern Intel CPU die CMU 15-462/662, Fall 2015

GPU: heterogeneous, multi-core processor Modern GPUs offer ~2-4 TFLOPs of performance for executing vertex and fragment shader programs T-OP s of fixed-function compute capability over here SIMD Exec SIMD Exec SIMD Exec SIMD Exec Texture Texture Cache Cache Cache Cache Texture Texture SIMD Exec SIMD Exec SIMD Exec SIMD Exec Tessellate Tessellate Cache SIMD Exec Cache Cache SIMD Exec Cache Cache SIMD Exec Cache Cache SIMD Exec Cache Tessellate Clip/Cull Rasterize Clip/Cull Rasterize Tessellate Clip/Cull Rasterize Clip/Cull Rasterize GPU Memory SIMD Exec SIMD Exec SIMD Exec SIMD Exec Zbuffer / Blend Zbuffer / Blend Zbuffer / Blend Zbuffer / Blend Zbuffer / Blend Zbuffer / Blend Cache Cache Cache Cache Scheduler / Work Distributor Take Kayvon s parallel computing course (15-418) for more details! CMU 15-462/662, Fall 2015

Summary Occlusion resolved independently at each screen sample using the depth buffer Alpha compositing for semi-transparent surfaces - Premultiplied alpha forms simply repeated composition - Over compositing operations is not commutative: requires triangles to be processed in back-to-front (or front-to-back) order Graphics pipeline: - Structures rendering computation as a sequence of operations performed on vertices, primitives (e.g., triangles), fragments, and screen samples - Behavior of parts of the pipeline is application-defined using shader programs. - Pipeline operations implemented by highly, optimized parallel processors and fixed-function hardware (GPUs) CMU 15-462/662, Fall 2015