Hidden Surfaces / Depth Test

Similar documents
University of British Columbia CPSC 314 Computer Graphics Jan-Apr Tamara Munzner. Hidden Surfaces.

Hidden Surfaces II. Week 9, Mon Mar 15

Visibility: Z Buffering

Painter s Algorithm: Problems

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

CEng 477 Introduction to Computer Graphics Fall 2007

Hidden surface removal. Computer Graphics

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

University of British Columbia CPSC 314 Computer Graphics May-June Tamara Munzner Sampling, Virtual Trackball, Hidden Surfaces

CS4620/5620: Lecture 14 Pipeline

CSE528 Computer Graphics: Theory, Algorithms, and Applications

Computer Graphics. Bing-Yu Chen National Taiwan University

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

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

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

Computer Graphics. Lecture 9 Hidden Surface Removal. Taku Komura

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

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

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

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

Pipeline Operations. CS 4620 Lecture 14

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

graphics pipeline computer graphics graphics pipeline 2009 fabio pellacini 1

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

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

S U N G - E U I YO O N, K A I S T R E N D E R I N G F R E E LY A VA I L A B L E O N T H E I N T E R N E T

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

FROM VERTICES TO FRAGMENTS. Lecture 5 Comp3080 Computer Graphics HKBU

9. Visible-Surface Detection Methods

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

The Rasterization Pipeline

The Traditional Graphics Pipeline

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

Computer Graphics. Shadows

Hidden Surface Removal

The Traditional Graphics Pipeline

Culling. Computer Graphics CSE 167 Lecture 12

Drawing Fast The Graphics Pipeline

Visible Surface Detection. (Chapt. 15 in FVD, Chapt. 13 in Hearn & Baker)

Pipeline Operations. CS 4620 Lecture 10

The Traditional Graphics Pipeline

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

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

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

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

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

Rasterization Overview

Announcements. Written Assignment2 is out, due March 8 Graded Programming Assignment2 next Tuesday

Drawing the Visible Objects

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

Spatial Data Structures and Speed-Up Techniques. Tomas Akenine-Möller Department of Computer Engineering Chalmers University of Technology

Triangle Rasterization

CS 563 Advanced Topics in Computer Graphics Culling and Acceleration Techniques Part 1 by Mark Vessella

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

Spatial Data Structures

Introduction to Visualization and Computer Graphics

Point Cloud Filtering using Ray Casting by Eric Jensen 2012 The Basic Methodology

Spatial Data Structures

INFOGR Computer Graphics. J. Bikker - April-July Lecture 11: Visibility. Welcome!

Let s start with occluding contours (or interior and exterior silhouettes), and look at image-space algorithms. A very simple technique is to render

Determination (Penentuan Permukaan Tampak)

Computer Graphics. Lecture 9 Environment mapping, Mirroring

Hidden Surface Elimination Raytracing. Pre-lecture business. Outline for today. Review Quiz. Image-Space vs. Object-Space

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

Spatial Data Structures

Topic #1: Rasterization (Scan Conversion)

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

Spatial Data Structures

CSE 167: Introduction to Computer Graphics Lecture #11: Visibility Culling

Computergrafik. Matthias Zwicker. Herbst 2010

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

Graphics and Interaction Rendering pipeline & object modelling

Shadows in the graphics pipeline

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

Projection and viewing. Computer Graphics CSE 167 Lecture 4

CS 381 Computer Graphics, Fall 2008 Midterm Exam Solutions. The Midterm Exam was given in class on Thursday, October 23, 2008.

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

CHAPTER 1 Graphics Systems and Models 3

Adaptive Point Cloud Rendering

Drawing Fast The Graphics Pipeline

COMPUTER GRAPHICS COURSE. Rendering Pipelines

Lecture 4. Viewing, Projection and Viewport Transformations

CS451Real-time Rendering Pipeline

GUERRILLA DEVELOP CONFERENCE JULY 07 BRIGHTON

Hidden Surface Elimination: BSP trees

TSBK03 Screen-Space Ambient Occlusion

CSE 167: Introduction to Computer Graphics Lecture #10: View Frustum Culling

Computer Graphics Lecture 11

Shading, Advanced Rendering. Week 7, Wed Feb 28

Visibility and Occlusion Culling

LOD and Occlusion Christian Miller CS Fall 2011

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

Notes on Assignment. Notes on Assignment. Notes on Assignment. Notes on Assignment

8. Hidden Surface Elimination

Spatial Data Structures

COMP30019 Graphics and Interaction Scan Converting Polygons and Lines

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

4.5 VISIBLE SURFACE DETECTION METHODES

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

Transcription:

University of British Columbia CPSC 314 Computer Graphics Jan-Apr 2016 Tamara Munzner Hidden Surfaces / Depth Test http://www.ugrad.cs.ubc.ca/~cs314/vjan2016

Hidden Surface Removal 2

THE REDERIG PIPELIE Vertices and attributes Vertex Shader Modelview transform Per-vertex attributes Vertex Post-Processing Viewport transform Clipping Rasterization Scan conversion Interpolation ragment Shader Texturing/... Lighting/shading Per-Sample Operations Depth test Blending ramebuffer

Occlusion for most interesting scenes, some polygons overlap to render the correct image, we need to determine which polygons occlude which 4

The Z-Buffer Algorithm (mid-70 s) BSP trees proposed when memory was expensive first 512x512 framebuffer was >$50,000! Ed Catmull proposed a radical new approach called z-buffering the big idea: resolve visibility independently at each pixel 5

The Z-Buffer Algorithm we know how to rasterize polygons into an image discretized into pixels: 6

The Z-Buffer Algorithm what happens if multiple primitives occupy the same pixel on the screen? which is allowed to paint the pixel? 7

The Z-Buffer Algorithm idea: retain depth after projection transform each vertex maintains z coordinate relative to eye point can do this with canonical viewing volumes 8

The Z-Buffer Algorithm augment color framebuffer with Z-buffer or depth buffer which stores Z value at each pixel at frame beginning, initialize all pixel depths to when rasterizing, interpolate depth (Z) across polygon check Z-buffer before storing pixel color in framebuffer and storing depth in Z-buffer don t write pixel if its Z value is more distant than the Z value already stored there 9

Interpolating Z barycentric coordinates interpolate Z like other planar parameters 10

Z-Buffer store (r,g,b,z) for each pixel typically 8+8+8+24 bits, can be more for all i,j { Depth[i,j] = MAX_DEPTH Image[i,j] = BACKGROUD_COLOUR } for all polygons P { for all pixels in P { if (Z_pixel < Depth[i,j]) { Image[i,j] = C_pixel Depth[i,j] = Z_pixel } } } 11

12 Depth Test Precision reminder: perspective transformation maps eye-space (VCS) z to DC z thus: E 0 A 0 0 B 0 0 0 C D 0 0 1 0 " # $ $ $ $ % & ' ' ' ' x y z 1 " # $ $ $ $ % & ' ' ' ' = Ex + Az y + Bz Cz + D z " # $ $ $ $ $ % & ' ' ' ' ' = Ex z + A ( ) * +, - y z + B ( ) * +, - C + D z ( ) * +, - 1 " # $ $ $ $ $ $ $ $ $ % & ' ' ' ' ' ' ' ' ' z DC = C + D z VCS " # $ % & '

Depth Test Precision therefore, depth-buffer essentially stores 1/z, rather than z! issue with integer depth buffers high precision for near objects low precision for far objects z DC -n -f -z eye 13

Depth Test Precision low precision can lead to depth fighting for far objects two different depths in eye space get mapped to same depth in framebuffer which object wins depends on drawing order and scanconversion gets worse for larger ratios f:n rule of thumb: f:n < 1000 for 24 bit depth buffer with 16 bits cannot discern millimeter differences in objects at 1 km distance 14

Integer Depth Buffer reminder from viewing discussion depth lies in the DCS z range [0,1] format: multiply by 2^n -1 then round to nearest int where n = number of bits in depth buffer 24 bit depth buffer = 2^24 = 16,777,216 possible values small numbers near, large numbers far consider VCS depth: z DCS = (1<<)*( a + b / z VCS ) = number of bits of Z precision, 1<< bitshift = 2 n a = zar / ( zar - zear ) b = zar * zear / ( zear - zar ) z VCS = distance from the eye to the object 15

Z Buffer Calculator demo: https://www.sjbaker.org/steve/omniv/love_your_z_buffer.html 16

Z-Buffer Algorithm Questions how much memory does the Z-buffer use? does the image rendered depend on the drawing order? does the time to render the image depend on the drawing order? how does Z-buffer load scale with visible polygons? with framebuffer resolution? 17

simple!!! Z-Buffer Pros easy to implement in hardware hardware support in all graphics cards today polygons can be processed in arbitrary order easily handles polygon interpenetration enables deferred shading rasterize shading parameters (e.g., surface normal) and only shade final visible fragments 18

Z-Buffer Cons poor for scenes with high depth complexity need to render all polygons, even if most are invisible eye shared edges are handled inconsistently ordering dependent 19

Z-Buffer Cons requires memory (e.g. 1280x1024x32 bits) requires fast memory Read-Modify-Write in inner loop hard to simulate translucent polygons we throw away color of polygons behind closest one works if polygons ordered back-to-front extra work throws away much of the speed advantage 20

Picking 21

Interactive Object Selection move cursor over object, click how to decide what is below? inverse of rendering pipeline flow from pixel back up to object: unprojecting ambiguity many 3D world objects map to same 2D point two common approaches ray intersection (three.js support) off-screen buffer color coding other approaches bounding extents deprecated: OpenGL selection region with hit list 22

Ray Intersection Picking computation in software within application map selection point to a ray intersect ray with all objects in scene. advantages flexible, straightforward supported by three.js disadvantages slow: work to do depends on total number and complexity of objects in scene y VCS x 23

Three.js Intersection Support http://soledadpenades.com/articles/three-jstutorials/object-picking/ projector = new THREE.Projector(); mousevector = new THREE.Vector3(); window.addeventlistener( mousemove, onmousemove, false) onmousemove: mousevector.x=2*(e.clientx/containerwidth)-1 mousevector.y=1-2*(e.clienty/containerheight);" // don t forget to flip Y from upper left origin! var raycaster = projector.pickingray(mousevector.clone(), camera); var intersects = raycaster.intersectobjects(<geoms>); 24

three.js Intersection http://soledadpenades.com/articles/three-jstutorials/object-picking/ intersectobjects function returns array all ray intersections for children of root geometry ordered by distance, nearest first intersection object contains distance from camera exact point face object 25

Offscreen Buffer Color Coding use offscreen buffer for picking create image as computational entity never displayed to user redraw all objects in offscreen buffer turn off lighting/shading calculations set unique color for each pickable object store in table read back pixel at cursor location check against table 26

Offscreen Buffer Color Coding advantages conceptually simple variable precision hardware support off-screen buffer creation/readback disadvantages extra redraw delay (fixed overhead) implementation complexity 27

WebGL Offscreen Buffer Picking http://coffeesmudge.blogspot.ca/2013/08/ implementing-picking-in-webgl.html create offscreen framebuffer like rendering into texture render each object with unique color in framebuffer (up to 16M with 24 bit integers) gl.readpixels readback to find color under cursor look up object with that color color[0]*65536 + color[1]*256 + color[2] 28

Bounding Extents keep track of axis-aligned bounding rectangles advantages conceptually simple easy to keep track of boxes in world space 29

Bounding Extents disadvantages low precision must keep track of object-rectangle relationship extensions do more sophisticated bound bookkeeping first level: box check. second level: object check 30

OpenGL vs WebGL Picking very different world, don t get confused by old tutorials OpenGL fast hardware support for select/hit re-render small area around cursor backbuffer color straighforward but slow without hardware support no standard library support for ray intersection slow and laborious WebGL good library support for intersection best choice for most of you! fast offscreen buffer hardware support select/hit unsupported 31

Painter s Algorithm simple: render the polygons from back to front, painting over previous polygons draw blue, then green, then orange will this work in the general case? 32

Painter s Algorithm: Problems intersecting polygons present a problem even non-intersecting polygons can form a cycle with no valid visibility order: 33

Analytic Visibility Algorithms early visibility algorithms computed the set of visible polygon fragments directly, then rendered the fragments to a display: 34

Analytic Visibility Algorithms what is the minimum worst-case cost of computing the fragments for a scene composed of n polygons? answer: O(n 2 ) 35

Analytic Visibility Algorithms so, for about a decade (late 60s to late 70s) there was intense interest in finding efficient algorithms for hidden surface removal we ll talk about one: Binary Space Partition (BSP) Trees 36

Binary Space Partition Trees (1979) BSP Tree: partition space with binary tree of planes idea: divide space recursively into half-spaces by choosing splitting planes that separate objects in scene preprocessing: create binary tree of planes runtime: correctly traversing this tree enumerates objects from back to front 37

Creating BSP Trees: Objects 38

Creating BSP Trees: Objects 39

Creating BSP Trees: Objects 40

Creating BSP Trees: Objects 41

Creating BSP Trees: Objects 42

Splitting Objects no bunnies were harmed in previous example but what if a splitting plane passes through an object? split the object; give half to each node Ouch 43

Traversing BSP Trees tree creation independent of viewpoint preprocessing step tree traversal uses viewpoint runtime, happens for many different viewpoints each plane divides world into near and far for given viewpoint, decide which side is near and which is far check which side of plane viewpoint is on independently for each tree vertex tree traversal differs depending on viewpoint! recursive algorithm recurse on far side draw object recurse on near side 44

Traversing BSP Trees query: given a viewpoint, produce an ordered list of (possibly split) objects from back to front: renderbsp(bsptree *T) BSPtree *near, *far; if (eye on left side of T->plane) near = T->left; far = T->right; else near = T->right; far = T->left; renderbsp(far); if (T is a leaf node) renderobject(t) renderbsp(near); 45

BSP Trees : Viewpoint A 46

BSP Trees : Viewpoint A 47

BSP Trees : Viewpoint A n decide independently at each tree vertex n not just left or right child! 48

BSP Trees : Viewpoint A 49

BSP Trees : Viewpoint A 50

BSP Trees : Viewpoint A 1 1 51

BSP Trees : Viewpoint A 1 2 1 2 52

BSP Trees : Viewpoint A 2 1 1 2 53

BSP Trees : Viewpoint A 2 1 1 2 54

BSP Trees : Viewpoint A 2 1 3 1 2 3 55

BSP Trees : Viewpoint A 1 3 4 2 1 2 4 3 56

BSP Trees : Viewpoint A 1 3 4 5 2 5 1 2 4 3 57

BSP Trees : Viewpoint A 1 3 4 5 2 8 6 7 9 5 1 2 9 6 4 3 8 7 58

BSP Trees : Viewpoint B 59

BSP Trees : Viewpoint B 8 9 7 6 4 5 2 1 1 3 5 9 8 2 7 6 4 3 60

BSP Tree Traversal: Polygons split along the plane defined by any polygon from scene classify all polygons into positive or negative half-space of the plane if a polygon intersects plane, split polygon into two and classify them both recurse down the negative half-space recurse down the positive half-space 61

useful demo: BSP Demo http://symbolcraft.com/graphics/bsp 62

BSP Example order of insertion can affect half-plane extent 63

pros: simple, elegant scheme Summary: BSP Trees correct version of painter s algorithm back-to-front rendering approach was very popular for video games (but getting less so) cons: slow to construct tree: O(n log n) to split, sort splitting increases polygon count: O(n 2 ) worst-case computationally intense preprocessing stage restricts algorithm to static scenes 64

Hidden Surface Removal two kinds of visibility algorithms object space methods image space methods 65

Object Space Algorithms determine visibility on object or polygon level using camera coordinates resolution independent explicitly compute visible portions of polygons early in pipeline after clipping requires depth-sorting painter s algorithm BSP trees 66

Image Space Algorithms perform visibility test for in screen coordinates limited to resolution of display Z-buffer: check every pixel independently performed late in rendering pipeline 67

THE REDERIG PIPELIE Vertices and attributes Vertex Shader Modelview transform Per-vertex attributes Vertex Post-Processing Viewport transform Clipping Rasterization Scan conversion Interpolation ragment Shader Texturing/... Lighting/shading Per-Sample Operations Depth test Blending ramebuffer

Backface Culling 69

Back-ace Culling on the surface of a closed orientable manifold, polygons whose normals point away from the camera are always occluded: note: backface culling alone doesn t solve the hidden-surface problem! 70

Back-ace Culling not rendering backfacing polygons improves performance by how much? reduces by about half the number of polygons to be considered for each pixel optimization when appropriate 71

Back-ace Culling most objects in scene are typically solid rigorously: orientable closed manifolds orientable: must have two distinct sides cannot self-intersect a sphere is orientable since has two sides, 'inside' and 'outside'. a Mobius strip or a Klein bottle is not orientable closed: cannot walk from one side to the other sphere is closed manifold plane is not 72

Back-ace Culling examples of non-manifold objects: a single polygon a terrain or height field polyhedron w/ missing face anything with cracks or holes in boundary one-polygon thick lampshade 73

Back-face Culling: VCS first idea: cull if < 0 Z z y eye sometimes misses polygons that should be culled 74

Back-face Culling: DCS VCS y z eye DCS y eye z works to cull if > 0 Z 75

Invisible Primitives why might a polygon be invisible? polygon outside the field of view / frustum solved by clipping polygon is backfacing solved by backface culling polygon is occluded by object(s) nearer the viewpoint solved by hidden surface removal 76

77

Blending 78

THE REDERIG PIPELIE Vertices and attributes Vertex Shader Modelview transform Per-vertex attributes Vertex Post-Processing Viewport transform Clipping Rasterization Scan conversion Interpolation ragment Shader Texturing/... Lighting/shading Per-Sample Operations Depth test Blending ramebuffer

Alpha and Premultiplication specify opacity with alpha channel α α=1: opaque, α=.5: translucent, α=0: transparent how to express a pixel is half covered by a red object? obvious way: store color independent from transparency (r,g,b,α) intuition: alpha as transparent colored glass 100% transparency can be represented with many different RGB values pixel value is (1,0,0,.5) upside: easy to change opacity of image, very intuitive downside: compositing calculations are more difficult - not associative elegant way: premultiply by α so store (αr, αg, αb,α) intuition: alpha as screen/mesh RGB specifies how much color object contributes to scene alpha specifies how much object obscures whatever is behind it (coverage) alpha of.5 means half the pixel is covered by the color, half completely transparent only one 4-tuple represents 100% transparency: (0,0,0,0) pixel value is (.5, 0, 0,.5) upside: compositing calculations easy (& additive blending for glowing!) downside: less intuitive 80

Alpha and Simple Compositing is foreground, B is background, over B premultiply math: uniform for each component, simple, linear R' = R +(1-A )*R B G' = G +(1-A )*G B B' = B +(1-A )*B B A' = A +(1-A )*A B associative: easy to chain together multiple operations non-premultiply math: trickier R' = (R *A + (1-A )*R B *A B )/A' G' = (G *A + (1-A )*G B *A B )/A' B' = (B *A + (1-A )*B B *A B )/A' A' = A +(1-A )*A B don't need divide if or B is opaque. but still oof! chaining difficult, must avoid double-counting with intermediate ops 81

Alpha and Complex Compositing foreground color A, background color B how might you combine multiple elements? Compositing Digital Images, Porter and Duff, Siggraph '84 pre-multiplied alpha allows all cases to be handled simply 82

Alpha Examples blend white and clear equally (50% each) white is (1,1,1,1), clear is (0,0,0,0), black is (0,0,0,1) premultiplied: multiply componentwise by 50% and just add together (.5,.5,.5,.5) is indeed half-transparent white in premultiply format 4-tuple would mean half-transparent grey in non-premultiply format premultiply allows both conventional blend and additive blend alpha 0 and RGB nonzero: glowing/luminescent (nice for particle systems!) for more: see nice writeup from Alvy Ray Smith technical academy award for Smith, Catmull, Porter, Duff http://www.alvyray.com/awards/awardsacademy96.htm 83