CISC 3620 Lecture 7 Lighting and shading. Topics: Exam results Buffers Texture mapping intro Texture mapping basics WebGL texture mapping

Similar documents
Buffers. Angel and Shreiner: Interactive Computer Graphics 7E Addison-Wesley 2015

Texture Mapping. CS 537 Interactive Computer Graphics Prof. David E. Breen Department of Computer Science

CS452/552; EE465/505. Texture Mapping in WebGL

Introduction to Computer Graphics with WebGL

Lecture 19: OpenGL Texture Mapping. CITS3003 Graphics & Animation

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

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

OpenGL Texture Mapping. Objectives Introduce the OpenGL texture functions and options

Objectives. Texture Mapping and NURBS Week 7. The Limits of Geometric Modeling. Modeling an Orange. Three Types of Mapping. Modeling an Orange (2)

CS 5600 Spring

Computer Graphics. Three-Dimensional Graphics VI. Guoying Zhao 1 / 73

CS212. OpenGL Texture Mapping and Related

CS 432 Interactive Computer Graphics

Fog example. Fog is atmospheric effect. Better realism, helps determine distances

CS452/552; EE465/505. Image Processing Frame Buffer Objects

Surface Rendering. Surface Rendering

Introduction to Computer Graphics with WebGL

Graphics. Texture Mapping 고려대학교컴퓨터그래픽스연구실.

Lecture 07: Buffers and Textures

CSE528 Computer Graphics: Theory, Algorithms, and Applications

Texturas. Objectives. ! Introduce Mapping Methods. ! Consider two basic strategies. Computação Gráfica

CSE 167: Introduction to Computer Graphics Lecture #8: Textures. Jürgen P. Schulze, Ph.D. University of California, San Diego Spring Quarter 2016

TSBK 07! Computer Graphics! Ingemar Ragnemalm, ISY

INF3320 Computer Graphics and Discrete Geometry

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

Cap. 3 Textures. Mestrado em Engenharia Informática (6931) 1º ano, 1º semestre

Steiner- Wallner- Podaras

CS4621/5621 Fall Basics of OpenGL/GLSL Textures Basics

CT5510: Computer Graphics. Texture Mapping

Texturing. Slides done bytomas Akenine-Möller and Ulf Assarsson Department of Computer Engineering Chalmers University of Technology

Texture Mapping. Computer Graphics, 2015 Lecture 9. Johan Nysjö Centre for Image analysis Uppsala University

Discussion 3. PPM loading Texture rendering in OpenGL

Today. Texture mapping in OpenGL. Texture mapping. Basic shaders for texturing. Today. Computergrafik

CS335 Graphics and Multimedia. Slides adopted from OpenGL Tutorial

Computergrafik. Matthias Zwicker Universität Bern Herbst 2016

-=Catmull's Texturing=1974. Part I of Texturing

Texture Mapping. Mike Bailey.

Computer Graphics. Bing-Yu Chen National Taiwan University

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

Lecture 22 Sections 8.8, 8.9, Wed, Oct 28, 2009

CSE 167: Lecture 11: Textures 2. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2011

SUMMARY. CS380: Introduction to Computer Graphics Texture Mapping Chapter 15. Min H. Kim KAIST School of Computing 18/05/03.

三維繪圖程式設計 3D Graphics Programming Design 第七章基礎材質張貼技術嘉大資工系盧天麒

Computergraphics Exercise 15/ Shading & Texturing

CSC Graphics Programming. Budditha Hettige Department of Statistics and Computer Science

CS179: GPU Programming

Lecture 5 3D graphics part 3

General Purpose computation on GPUs. Liangjun Zhang 2/23/2005

Texture mapping. Computer Graphics CSE 167 Lecture 9

INF3320 Computer Graphics and Discrete Geometry

Texturing. Slides done by Tomas Akenine-Möller and Ulf Assarsson Department of Computer Engineering Chalmers University of Technology

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

GRAFIKA KOMPUTER. ~ M. Ali Fauzi

Lighting and Texturing

Textures. Texture Mapping. Bitmap Textures. Basic Texture Techniques

Computer Graphics Texture Mapping

CS GPU and GPGPU Programming Lecture 11: GPU Texturing 1. Markus Hadwiger, KAUST

Texture Mapping and Sampling

Shading/Texturing. Dr. Scott Schaefer

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

Copyright Khronos Group 2012 Page 1. Teaching GL. Dave Shreiner Director, Graphics and GPU Computing, ARM 1 December 2012

Grafica Computazionale

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

CS GPU and GPGPU Programming Lecture 12: GPU Texturing 1. Markus Hadwiger, KAUST

Overview. Goals. MipMapping. P5 MipMap Texturing. What are MipMaps. MipMapping in OpenGL. Generating MipMaps Filtering.

CS GPU and GPGPU Programming Lecture 16+17: GPU Texturing 1+2. Markus Hadwiger, KAUST

Stored Texture Shaders

Texturing Theory. Overview. All it takes is for the rendered image to look right. -Jim Blinn 11/10/2018

Imaging and Raster Primitives

Textures. Texture coordinates. Introduce one more component to geometry

OUTLINE. Implementing Texturing What Can Go Wrong and How to Fix It Mipmapping Filtering Perspective Correction

We assume that you are familiar with the following:

Preparing for Texture Access. Stored Texture Shaders. Accessing Texture Maps. Vertex Shader Texture Access

Applying Textures. Lecture 27. Robb T. Koether. Hampden-Sydney College. Fri, Nov 3, 2017

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

CMSC 425: Lecture 12 Texture Mapping Thursday, Mar 14, 2013

Practical Texturing (WebGL) CS559 Fall 2016 Lecture 20 November 7th 2016

Texture Mapping CSCI 4229/5229 Computer Graphics Fall 2016

Magnification and Minification

Buffers. Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico

3D Rasterization II COS 426

Most device that are used to produce images are. dots (pixels) to display the image. This includes CRT monitors, LCDs, laser and dot-matrix

CS 130 Final. Fall 2015

Announcements. Written Assignment 2 is out see the web page. Computer Graphics

Programming Graphics Hardware

Texture Mapping. Texture Mapping. Map textures to surfaces. Trompe L Oeil ( Deceive the Eye ) The texture. Texture map

Texture and other Mappings

CPSC / Texture Mapping

CS451Real-time Rendering Pipeline

CHAPTER 1 Graphics Systems and Models 3

Computer Graphics Texture Mapping

Overview. By end of the week:

Texture Mapping and Special Effects

+ = Texturing: Glue n-dimensional images onto geometrical objects. Texturing. Texture magnification. Texture coordinates. Bilinear interpolation

CS 179 GPU Programming

The Rasterization Pipeline

We will use WebGL 1.0. WebGL 2.0 is now being supported by most browsers but requires a better GPU so may not run on older computers or on most cell

Rendering Objects. Need to transform all geometry then

CS452/552; EE465/505. Shadow Mapping in WebGL

ก ก ก.

Transcription:

CISC 3620 Lecture 7 Lighting and shading Topics: Exam results Buffers Texture mapping intro Texture mapping basics WebGL texture mapping

Exam results

Grade distribution 12 Min: 26 10 Mean: 74 8 Median: 82 Max: 108 6 4 2 0 0 10 20 30 40 50 60 70 80 90 100 If you scored less than 70, please come to my office hours to discuss Let s go over the answers

Buffers

Buffers: Objectives Introduce additional WebGL buffers Reading and writing buffers Buffers and Images 5

Buffer Define a buffer by its spatial resolution (n x m) and its depth (or precision) k, the number of bits/pixel pixel 6

WebGL Frame Buffer 7

Where are the Buffers? HTML5 Canvas Default front and back color buffers Under control of local window system Physically on graphics card Depth buffer also on graphics card Stencil buffer Holds masks Most RGBA buffers 8 bits per component Latest are floating point (IEEE) 8

Other Buffers GPUs have their own or attached memory texture buffers off-screen buffers not under control of window system may be floating point Desktop OpenGL supported other buffers auxiliary color buffers accumulation buffer these were on application side now deprecated 9

Images Framebuffer contents are unformatted usually RGB or RGBA one byte per component no compression Standard Web Image Formats jpeg, gif, png WebGL has no conversion functions Understands standard Web formats for texture images 10

Buffer Reading WebGL can read pixels from the framebuffer with gl.readpixels Returns only 8 bit RGBA values In general, the format of pixels in the framebuffer is different from that of processor memory and these two types of memory reside in different places Need packing and unpacking Reading can be slow Drawing through texture functions and off-screen memory (frame buffer objects) 11

WebGL Pixel Function gl.readpixels(x,y,width,height,format,type,myimage) start pixel in frame buffer size type of pixels type of image pointer to processor memory var myimage[512*512*4]; gl.readpixels(0,0, 512, 512, gl.rgba, gl.unsigned_byte, myimage); 12

Render to Texture GPUs now include a large amount of texture memory that we can write into Advantage: fast (not under control of window system) Using frame buffer objects (FBOs) we can render into texture memory instead of the frame buffer and then read from this memory Image processing GPGPU: General Purpose GPU computation 13

Texture Mapping Intro

Texture mapping intro: Objectives Texture Mapping Environment Mapping Bump Mapping 15

The Limits of Geometric Modeling Although graphics cards can render over 10 million polygons per second, that number is insufficient for many phenomena Clouds Grass Terrain Skin 16

Modeling an Orange Consider the problem of modeling an orange Start with an orange-colored sphere Too simple Replace sphere with a more complex shape Does not capture surface characteristics (small dimples) Takes too many polygons to model all the dimples 17

Modeling an Orange (2) Take a picture of a real orange, scan it, and paste onto simple geometric model This process is known as texture mapping Still might not be sufficient because resulting surface will be smooth Need to change local shape Bump mapping 18

Modeling a hippo: Wireframe http://3drender.com/jbirn/hippo/hairyhipponose.html

Modeling a hippo: Shaded http://3drender.com/jbirn/hippo/hairyhipponose.html

Modeling a hippo: Shaded and texture mapped http://3drender.com/jbirn/hippo/index.html

Three Types of Mapping Texture Mapping Uses images to fill inside of polygons Environment (reflection mapping) Uses a picture of the environment for texture maps Allows simulation of highly specular surfaces Bump mapping Emulates altering normal vectors during the rendering process 22

Texture Mapping geometric model texture mapped 23

Environment Mapping 24

Bump Mapping 25

Where does mapping take place? Mapping techniques are implemented at the end of the rendering pipeline Very efficient because few polygons make it past the clipper 26

Texture Mapping Basics

Texture mapping basics: Objectives Forward vs backward mapping Point sampling vs area averaging 28

Is it simple? Although the idea is simple---map an image to a surface---there are 3 or 4 coordinate systems involved 2D image 3D surface 29

Coordinate Systems Parametric coordinates Texture coordinates Used to identify points in the image to be mapped Object or World Coordinates May be used to model curves and surfaces Conceptually, where the mapping takes place Window Coordinates Where the final image is really produced 30

Texture Mapping parametric coordinates texture coordinates world coordinates window coordinates 31

Forward Mapping Basic problem is how to find the maps Consider mapping from texture coordinates to a point a surface Appear to need three functions x = x(s,t) y = y(s,t) z = z(s,t) But we really want to go the other way (x,y,z) t s 32

Backward Mapping We really want to go backwards Given a pixel, we want to know to which point on an object it corresponds Given a point on an object, we want to know to which point in the texture it corresponds Need a map of the form s = s(x,y,z) t = t(x,y,z) Such functions are difficult to find in general 33

Two-part mapping One solution to the mapping problem is to first map the texture to a simple intermediate surface Example: map to cylinder 34

Cylindrical Mapping Parametric cylinder x = r cos 2 u y = r sin 2 u z = v/h Maps rectangle in u,v space to cylinder of radius r and height h in world coordinates s=u t=v Maps from texture space 35

Spherical Map We can use a parametric sphere x = r cos 2 u y = r sin 2 u cos 2 v z = r sin 2 u sin 2 v Similar to the cylinder but have to decide where to put the distortion Spheres are used in environmental maps 36

But can t flatten a sphere uniformly http://gistbok.ucgis.org/bok-topics/map-projections

Box Mapping Easy to use with simple orthographic projection Also used in environment maps 38

Second Mapping Three ways to map from intermediate object to actual object Normals from intermediate to actual Normals from actual to intermediate Vectors from center of intermediate actual intermediate 39

Aliasing Point sampling of the texture can lead to aliasing errors miss blue stripes point samples in u,v (or x,y,z) space point samples in texture space 40

Aliasing: Moiré patterns Fir0002/Flagstaffotos https://commons.wikimedia.org/wiki/file:moire02.gif

Aside: Aliasing in time https://www.youtube.com/watch?v=jhs9jgkeoma

Solution: Area Averaging A better but slower option is to use area averaging preimage pixel Note that preimage of pixel is curved 43

WebGL Texture Mapping

WebGL texture mapping: Objectives Introduce WebGL texture mapping two-dimensional texture maps assigning texture coordinates forming texture images 45

Basic Strategy Three steps to applying a texture 1) Specify the texture read or generate image assign to texture enable texturing 2) Assign texture coordinates to vertices Proper mapping function is left to application 3) Specify texture parameters wrapping, filtering 46

Texture Mapping y z x geometry display t image s 47

Texture Example

Texture Mapping and the WebGL Pipeline Images and geometry flow through separate pipelines that join during fragment processing complex textures do not affect geometric complexity vertices image geometry pipeline Fragment processor texel pipeline 49

Step 1: Specifying a Texture Image Define a texture image from an array of texels (texture elements) in CPU memory Use an image in a standard format such as JPEG Scanned image Generate by application code WebGL supports only 2 dimensional texture maps desktop OpenGL supports 1-4 dimensional texture maps 50

Define texture image from array: Checkerboard var image1 = new Uint8Array(4*texSize*texSize); for ( var i = 0; i < texsize; i++ ) { for ( var j = 0; j <texsize; j++ ) { var patchx = Math.floor(i/(texSize/numChecks)); var patchy = Math.floor(j/(texSize/numChecks)); if(patchx%2 ^ patchy%2) c = 255; else c = 0; //c = 255*(((i & 0x8) == 0) ^ ((j & 0x8) == 0) image1[4*i*texsize+4*j] = c; image1[4*i*texsize+4*j+1] = c; image1[4*i*texsize+4*j+2] = c; image1[4*i*texsize+4*j+3] = 255; } } 51

Define texture image from array gl.teximage2d( target, level, components, w, h, border, format, type, texels ); type of texture, e.g. gl.texture_2d level: used for mipmapping (discussed later) components: elements (bytes) per texel w, h: width and height of texels in pixels border: used for smoothing (discussed later) format and type: describe texels texels: pointer to texel array target: gl.teximage2d(gl.texture_2d, 0, 3, textsize, texsize, 0, gl.rgb, gl.unsigned_byte, image1); 52

Define texture from GIF image Option 1: Specify image URL in JS file directly var image = new Image(); image.onload = function() { configuretexture( image ); }; image.src = "SA2011_black.gif Option 2: Specify image in HTML file with <img> tag: // <img id = "teximage" src = "SA2011_black.gif"></img> var image = document.getelementbyid("teximage ); window.onload = function() { configuretexture( image ); }; 53

Step 2: Mapping a Texture Based on parametric texture coordinates Specify texture coordinates as a 2D attribute for each vertex Texture Space t 0, 1 Object Space 1, 1 (s, t) = (0.2, 0.8) A a c (0.4, 0.2) b 0, 0 B 1, 0 s C (0.8, 0.4) 54

Cube Example var texcoord = [ vec2(0, 0), vec2(0, 1), vec2(1, 1), vec2(1, 0) ]; function quad(a, b, c, d) { pointsarray.push(vertices[a]); colorsarray.push(vertexcolors[a]); texcoordsarray.push(texcoord[0]); pointsarray.push(vertices[b]); colorsarray.push(vertexcolors[a]); texcoordsarray.push(texcoord[1]); // etc 55

Texture Example

Interpolation WebGL uses interpolation to find proper texels from specified texture coordinates Can be distortions good selection of tex coordinates poor selection of tex coordinates texture stretched over trapezoid showing effects of bilinear interpolation 57

Interpolation 1 s 0 t 1 What are the texture coordinates for each of the vertices in these shapes?

Step 3: Using Texture Objects 1) specify textures in texture objects 2) set texture filter 3) set texture function 4) set texture wrap mode 5) set optional perspective correction hint 6) bind texture object 7) enable texturing 8) supply texture coordinates for vertex coordinates can also be generated 59

Texture Parameters WebGL has a variety of parameters that determine how texture is applied Wrapping parameters determine what happens if s and t are outside the (0,1) range Filter modes allow us to use area averaging instead of point samples Mipmapping allows us to use textures at multiple resolutions Environment parameters determine how texture mapping interacts with shading 60

Wrapping Mode Clamping: if s,t > 1 use 1, if s,t <0 use 0 Wrapping: use s,t modulo 1 gl.texparameteri(gl.texture_2d, gl.texture_wrap_s, gl.clamp ) gl.texparameteri( gl.texture_2d, gl.texture_wrap_t, gl.repeat ) t s texture gl.repeat wrapping gl.clamp wrapping 61

Magnification and Minification More than one texel can cover a pixel (minification) or more than one pixel can cover a texel (magnification) To obtain texture values Can use point sampling (nearest texel) or linear filtering ( 2 x 2 filter) Texture Magnification Polygon Texture Polygon Minification 62

Magnification and Minification: Which is which?

Filter Modes Modes determined by gl.texparameteri( target, type, mode ) gl.texparameteri(gl.texture_2d, gl.texure_mag_filter, gl.nearest); gl.texparameteri(gl.texture_2d, gl.texure_min_filter, gl.linear); 64

Mipmapped Textures Mipmapping allows for prefiltered texture maps of decreasing resolutions Reduces interpolation errors for smaller objects Generate mipmaps at ½ scale, ¼, 1/8, etc gl.generatemipmap(gl.texture_2d); Texture image must be square, have power of 2 width (128, 256, etc.) Declare mipmap level during texture definition gl.teximage2d(gl.texture_2d, level, ) 65

Mipmap example https://commons.wikimedia.org/wiki/file:mipmap_example_sts101.jpg

Filtering example

Example point sampling mipmapped point sampling linear filtering mipmapped linear filtering 68

Activity: Use different minification and magnification settings for cube Find gl.texture_min_filter Try: gl.{linear,nearest}_mipmap_{linear,nearest} Find gl.texture_mag_filter Try: gl.{linear,nearest}

Applying Textures Texture can be applied in many ways texture fully determines color modulated with a computed color blended with an environmental color Can also use multiple texture units 70

Other Texture Features Environment Maps Start with image of environment through a wide angle lens Can be either a real scanned image or an image created in OpenGL Use this texture to generate a spherical map Alternative is to use a cube map Multitexturing Apply a sequence of textures through cascaded texture units 71

WebGL Texture Mapping: Applying textures

Applying Textures Textures are applied during fragment shading by a sampler Samplers return a texture color from a texture object varying vec4 color; //color from rasterizer varying vec2 texcoord; //texture coordinate from rasterizer uniform sampler2d texture; //texture object from application void main() { gl_fragcolor = color * texture2d( texture, texcoord ); } 73

Vertex Shader Usually vertex shader will output texture coordinates to be rasterized Must do all other standard tasks too Compute vertex position Compute vertex color if needed attribute vec4 vposition; //vertex position in object coordinates attribute vec4 vcolor; //vertex color from application attribute vec2 vtexcoord; //texture coordinate from application varying vec4 color; //output color to be interpolated varying vec2 texcoord; //output tex coordinate to be interpolated 74

A Checkerboard Image var image1 = new Uint8Array(4*texSize*texSize); for ( var i = 0; i < texsize; i++ ) { for ( var j = 0; j <texsize; j++ ) { var patchx = Math.floor(i/(texSize/numChecks)); var patchy = Math.floor(j/(texSize/numChecks)); if(patchx%2 ^ patchy%2) c = 255; else c = 0; //c = 255*(((i & 0x8) == 0) ^ ((j & 0x8) == 0) image1[4*i*texsize+4*j] = c; image1[4*i*texsize+4*j+1] = c; image1[4*i*texsize+4*j+2] = c; image1[4*i*texsize+4*j+3] = 255; } } 75

Cube Example var texcoord = [ vec2(0, 0), vec2(0, 1), vec2(1, 1), vec2(1, 0) ]; function quad(a, b, c, d) { pointsarray.push(vertices[a]); colorsarray.push(vertexcolors[a]); texcoordsarray.push(texcoord[0]); pointsarray.push(vertices[b]); colorsarray.push(vertexcolors[a]); texcoordsarray.push(texcoord[1]); // etc 76

Texture Object function configuretexture( image ) { var texture = gl.createtexture(); gl.bindtexture( gl.texture_2d, texture ); gl.pixelstorei(gl.unpack_flip_y_webgl, true); gl.teximage2d( gl.texture_2d, 0, gl.rgb, gl.rgb, gl.unsigned_byte, image ); gl.generatemipmap( gl.texture_2d ); gl.texparameteri( gl.texture_2d, gl.texture_min_filter, gl.nearest_mipmap_linear ); gl.texparameteri( gl.texture_2d, gl.texture_mag_filter, gl.nearest ); gl.activetexture(gl.texture0); gl.uniform1i(gl.getuniformlocation(program, "texture"), 0); } 77

Linking with Shaders var vtexcoord = gl.getattriblocation( program, "vtexcoord" ); gl.enablevertexattribarray( vtexcoord ); gl.vertexattribpointer( vtexcoord, 2, gl.float, false, 0, 0); // Set the value of the fragment shader texture sampler variable // ("texture") to the the appropriate texture unit. In this case, // zero for GL_TEXTURE0 which was previously set by calling // gl.activetexture(). gl.uniform1i( glgetuniformlocation(program, "texture"), 0 ); 78

BitBlt

BitBlt: Objectives Introduce reading and writing of blocks of bits or bytes Prepare for later discussion compositing and blending 80

Writing into Buffers WebGL does not contain a function for writing bits into frame buffer Use texture functions instead We can use the fragment shader to do bit level operations on graphics memory Bit Block Transfer (BitBlt) operations act on blocks of bits with a single instruction 81

BitBlt Conceptually, we can consider all of memory as a large two-dimensional array of pixels We read and write rectangular block of pixels The frame buffer is part of this memory memory source writing into the frame buffer frame buffer (destination) 82

Writing Model Read destination pixel before writing source 83

Bit Writing Modes Source and destination bits are combined bitwise 16 possible functions (one per column in table) replace XOR OR 84

XOR mode XOR is especially useful for swapping blocks of memory such as menus that are stored off screen If S represents screen and M represents a menu the sequence S S M M S M S S M swaps S and M Same strategy used for rubber band lines and cursors 85

Cursor Movement Consider what happens as we move a cursor across the display We cover parts of objects Must return to original colors when cursor moves away 86

Rubber Band Line Fix one point Draw line to location of cursor Must return state of crossed objects when line moves 87

Summary Exam review part 2 Lighting and shading Phong-Blinn model Computing necessary vectors Lighting and shading in WebGL Polygonal shading Per vertex and per fragment shading