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

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

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

Textures. Datorgrafik 2006

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

Ulf Assarsson Department of Computer Engineering Chalmers University of Technology

Lecture 19: OpenGL Texture Mapping. CITS3003 Graphics & Animation

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

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

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

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

INF3320 Computer Graphics and Discrete Geometry

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

CS 432 Interactive Computer Graphics

Texture Mapping and Sampling

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

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

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

Computergrafik. Matthias Zwicker Universität Bern Herbst 2016

Steiner- Wallner- Podaras

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

CT5510: Computer Graphics. Texture Mapping

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

Introduction to Computer Graphics with WebGL

Texture mapping. Computer Graphics CSE 167 Lecture 9

Computer Graphics. Bing-Yu Chen National Taiwan University

Lecture 07: Buffers and Textures

Texture Mapping. Mike Bailey.

Discussion 3. PPM loading Texture rendering in OpenGL

Textures. Texture Mapping. Bitmap Textures. Basic Texture Techniques

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

INF3320 Computer Graphics and Discrete Geometry

CS 179 GPU Programming

Grafica Computazionale

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

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

CS212. OpenGL Texture Mapping and Related

CS335 Graphics and Multimedia. Slides adopted from OpenGL Tutorial

GRAFIKA KOMPUTER. ~ M. Ali Fauzi

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

CS451Real-time Rendering Pipeline

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

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

Texture Mapping and Special Effects

TSBK 07! Computer Graphics! Ingemar Ragnemalm, ISY

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

Monday Morning. Graphics Hardware

Picking (In WebGL) Picking idea

Shading/Texturing. Dr. Scott Schaefer

Computer Graphics Texture Mapping

Texture Mapping 1/34

CS 354R: Computer Game Technology

CS4621/5621 Fall Basics of OpenGL/GLSL Textures Basics

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

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

Department of Computer Engineering 3D Graphics in Games and Movies

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

Ulf Assarsson Department of Computer Engineering Chalmers University of Technology

Textures. Texture coordinates. Introduce one more component to geometry

CS 450: COMPUTER GRAPHICS TEXTURE MAPPING SPRING 2015 DR. MICHAEL J. REALE

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

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

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

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

Magnification and Minification

Overview. By end of the week:

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

Pipeline Operations. CS 4620 Lecture 14

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

Rasterization Overview

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

Computergraphics Exercise 15/ Shading & Texturing

Spring 2011 Prof. Hyesoon Kim

Computer Graphics 7 - Texture mapping, bump mapping and antialiasing

Texture Mapping 1/34

Spring 2009 Prof. Hyesoon Kim

ก ก ก.

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

Texture Mapping CSCI 4229/5229 Computer Graphics Fall 2016

Texture and other Mappings

Computer Graphics (CS 543) Lecture 8c: Environment Mapping (Reflections and Refractions)

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

Programming Graphics Hardware

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

TSBK03 Screen-Space Ambient Occlusion

Computer Graphics. Lecture 9 Environment mapping, Mirroring

Assignment #5: Scalar Field Visualization 3D: Direct Volume Rendering

Billboards!! A texture mapped polygon, which always faces the viewer

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

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

Textures III. Week 10, Wed Mar 24

Computer Graphics (CS 543) Lecture 10: Normal Maps, Parametrization, Tone Mapping

Imaging and Raster Primitives

Lecture 5 3D graphics part 3

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

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

Best practices for effective OpenGL programming. Dan Omachi OpenGL Development Engineer

Lecture 1. Application-, geometry-, rasterization stage Real-time Graphics pipeline. Z-buffer Double buffering Screen tearing

CS193P - Lecture 19. iphone Application Development. OpenGL ES

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

CS179: GPU Programming

Transcription:

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

Texturing: Glue n-dimensional images onto geometrical objects l Purpose: more realism, and this is a cheap way to do it Bump mapping Plus, we can do environment mapping And other things + = 2

(2,2) Texture coordinates (0,1) (1,1) (0,0) (1,0) (u,v) in [0,1] (u 0,v 0 ) 3 (-1,-1) (u 2,v 2 ) l What if (u,v) >1.0 or <0.0? (u 1,v 1 ) l To repeat textures, use just the fractional part Example: 5.3 -> 0.3 l Repeat, mirror, clamp, border:

Texture magnification l What does the theory say l sinc(x) is not feasible in real time l Box filter (nearest-neighbor) is l Poor quality 4

Texture magnification l Tent filter is feasible! l Linear interpolation l Looks better l Simple in 1D: l (1-t)*color0+t*color1 l How about 2D? 5

Bilinear interpolation l Texture coordinates (p u,p v ) in [0,1] l Texture images size: n*m texels l Nearest neighbor would access: ( floor(n*u+0.5), floor(m*v+0.5) ) l Interpolate 1D in x & y respectively 6

Bilinear interpolation l Check out this formula at home l t(u,v) accesses the texture map weights l b(u,v) filtered texel l (u,v ) = fractional part of texel coordinate 7

Texture minification What does a pixel see? l Theory (sinc) is too expensive l Cheaper: average of texel inside a pixel l Still too expensive, actually 8 l Mipmaps another level of approximation Prefilter texture maps as shown on next slide

9 Mipmapping l Image pyramid l Half width and height when going upwards l Average over 4 parent texels to form child texel l Depending on amount of minification, determine which image to fetch from l Compute d first, gives two images Bilinear interpolation in each v d u

Mipmapping l Interpolate between those bilinear values Gives trilinear interpolation Level n+1 (u 0,v 0,d 0 ) d v u Level n l Constant time filtering: 8 texel accesses 10 l How to compute d?

Computing d for mipmapping texel pixel projected to texture space A = approximative area of quadrilateral b = A l Approximate quad with square l Gives overblur! d = log 2 b l Even better: anisotropic texture filtering Approximate quad with several smaller mipmap samples 11

Anisotropic texture filtering 16 samples 12

Mipmapping: Memory requirements l Not twice the number of bytes! 1/4 1/16 1/64 1/1 13 l Rather 33% more not that much Modified by Ulf Assarsson 2004

Miscellaneous l How to apply texturing: Add, sub, etc as you like, using fragment shaders. Common alternatives: Modulate (multiply texture with lighting) Replace (just use texture color) Often: diffusetexture, (speculartexture, ambienttexture) Instead of ambmtrl, diffmtrl, specmtrl 14

Modulate 15 Texture multiplied with result from lighting (amb, diff, spec)

Using textures in OpenGL Do once when loading texture: texture = ilutglloadimage("flake.ppm"); // Here, we use DevIL glactivetexture(gl_texture0); // OpenGL: up to 32 texture units glbindtexture(gl_texture_2d, texture); glgeneratemipmap(gl_texture_2d); gltexparameterf(gl_texture_2d, GL_TEXTURE_MAX_ANISOTROPY_EXT, 16); //Indicates that the active texture should be repeated over the surface gltexparameteri(gl_texture_2d, GL_TEXTURE_WRAP_S, GL_REPEAT); gltexparameteri(gl_texture_2d, GL_TEXTURE_WRAP_T, GL_REPEAT); // Sets the type of mipmap interpolation to be used on magnifying and // minifying the active texture. These are the nicest available options. gltexparameteri(gl_texture_2d, GL_TEXTURE_MAG_FILTER, GL_LINEAR); gltexparameteri(gl_texture_2d, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); FRAGMENT SHADER Do every time you want to use this texture when drawing: glactivetexture(gl_texture0); glbindtexture(gl_texture_2d, texture); // Now, draw your triangles with texture coordinates specified in vec2 texcoord; void main() { gl_fragcolor = texture2d(0, texcoord.xy); 16 }

Light Maps Often used in games Can use mutliply both textures in fragment shader, or (old way): render wall using brick texture render wall using light texture and blending to the frame buffer + = 17

Environment mapping Department of Computer Engineering

Environment mapping l Assumes the environment is infinitely far away l Sphere mapping l Cube mapping is the norm nowadays Advantages: no singularities as in sphere map Much less distortion Gives better result Not dependent on a view position Modified Tomas Akenine-Mőller by Ulf Assarsson 2002 2004

Department of Computer Engineering Sphere map example Sphere map (texture) Sphere map applied on torus

Sphere Map Assume surface normals are available Then OpenGL can compute reflection vector at each pixel The texture coordinates s,t are given by: (see OH 169 for details) L = R 2 x Rx s = 0.5 L Ry t = 0.5 L + R 2 y + 1 + 1 + ( R + ) z 1 2 21

Sphere Map In front of the sphere. Behind the sphere. 22

Sphere Map Infinitesimally small reflective sphere (infinitely far away) i.e., orthographic view of a reflective unit sphere Create by: Photographing metal sphere Or, Ray tracing Transforming cube map to sphere map 23

Cube mapping eye n y z x 24 l l l Simple math: compute reflection vector, r Largest abs-value of component, determines which cube face. Example: r=(5,-1,2) gives POS_X face Divide r by abs(5) gives (u,v)=(-1/5,2/5) l Remap from [-1,1] to [0,1], i.e., ((u,v)+(1,1))/2 l Your hardware does all the work. You just have to compute the reflection vector. (See lab 4)

Example Department of Computer Engineering

Department of Computer Engineering Bump mapping by Blinn in 1978 Inexpensive way of simulating wrinkles and bumps on geometry Too expensive to model these geometrically Instead let a texture modify the normal at each pixel, and then use this normal to compute lighting + = geometry Bump map Bump mapped geometr Stores heights: can derive normals

Department of Computer Engineering Bump mapping Storing bump maps: 1. as a gray scale image 2. As Δx, Δy distorsions 3. As normals (n x, n y, n z ) How store normals in texture (bump map) n=(n x, n y, n z ) are in [-1,1] Add 1, mult 0.5: in [0,1] Mult by 255 (8 bit per color component) Can be stored in texture:

28 Bump mapping: example

Normal mapping in tangent space vs model space Normal mapping model space: Normals are stored directly in model space. I.e., as including both face orientation plus distorsion. 29 Normal mapping tangent space: l Normals are stored as distorsion of face orientation. The same bump map can be tiled/repeated and reused for many faces with different orientation

More... l 3D textures: Texture filtering is no longer trilinear Rather quadlinear (linear interpolation 4 times) Enables new possibilities l Can store light in a room, for example l Displacement Mapping Offsets the position per pixel or per vertex l Offsetting per vertex is easy in vertex shader l Offsetting per pixel is architecturally hard Cannot be done in fragment shader Can be done using Geometry Shader (e.g. Direct3D 10) by ray casting in the displacement map 30

2D texture vs 3D texture 31

32 From http://www.ati.com/developer/shaderx/shaderx_3dtextures.pdf

Precomputed Light fields 33 Max Payne 2 by Remedy Entertainment Samuli Laine and Janne Kontkanen

Displacement Mapping l Uses a map to displace the surface at each position l Can be done with a Geometry Shader 34 Vertex Shader Geometry Shader Pixel Shader

Geometry Shader Example Generalized Displacement Maps l Step 0: Process Vertices (VS) l Step 1: Extrude Prisms (GS) l Step 2: Raytrace! (PS) 35

Rendering to Texture //******************************************** // Create a Frame Buffer Object (FBO) that we first render to and then use as a texture //******************************************** glgenframebuffersext(1, &framebuffer); // generate framebuffer id glbindframebufferext(gl_framebuffer, framebuffer); // following commands will affect framebuffer // Create a texture for the frame buffer, with specified filtering, rgba-format and size glgentextures( 1, &texframebuffer ); glbindtexture( GL_TEXTURE_2D, texframebuffer ); // following commands will affect texframebuffer gltexparameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); gltexparameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); glteximage2d( GL_TEXTURE_2D, 0, 4, 512, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL ); // Create a depth buffer for our FBO glgenrenderbuffers(1, &depthbuffer); // get the ID to a new Renderbuffer glbindrenderbuffer(gl_renderbuffer, depthbuffer); glrenderbufferstorage(gl_renderbuffer, GL_DEPTH_COMPONENT, 512, 512); (See also Lab 5) // Set rendering of the default color0-buffer to go into the texture glframebuffertexture2d(gl_framebuffer, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texframebuffer, 0); glframebufferrenderbufferext(gl_framebuffer, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthbuffer); // Associate our created depth buffer with the FBO Or simply render to back-buffer and copy into texture using command: glcopytexsubimage (). But is slower! 36

Sprites GLbyte M[64]= { 127,0,0,127, 127,0,0,127, 127,0,0,127, 127,0,0,127, 0,127,0,0, 0,127,0,127, 0,127,0,127, 0,127,0,0, 0,0,127,0, 0,0,127,127, 0,0,127,127, 0,0,127,0, 127,127,0,0, 127,127,0,127, 127,127,0,127, 127,127,0,0}; Sprites (=älvor) was a technique on older home computers, e.g. VIC64. As opposed to billboards sprites does not use the frame buffer. They are rasterized directly to the screen using a special chip. (A special bit-register also marked colliding sprites.) void display(void) { glclearcolor(0.0,1.0,1.0,1.0); glclear(gl_color_buffer_bit); glenable (GL_BLEND); glblendfunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glrasterpos2d(xpos1,ypos1); glpixelzoom(8.0,8.0); gldrawpixels(width,height, GL_RGBA, GL_BYTE, M); } glpixelzoom(1.0,1.0); glutswapbuffers(); 37

Sprites Animation Maps The sprites for Ryu in Street Fighter: 38

Billboards 2D images used in 3D environments Common for trees, explosions, clouds, lensflares 39

Department of Computer Engineering With courtesy of DICE: RalliSport Challenge 2

Billboards Rotate them towards viewer Either by rotation matrix (see OH 288), or by orthographic projection 41

Billboards Fix correct transparency by blending AND using alpha-test In fragment shader: if (color.a < 0.1) discard; Or: sort back-to-front and blend Depth writing can then preferrably be disabled gldepthmask(0); Color Buffer Depth Buffer With blending With alpha test 42

Perspective distorsion Spheres often appear as ellipsoids when located in the periphery. Why? camera Exaggerated example If our eye was placed at the camera position, we would not see the distorsion. We are often positioned way behind the camera. 43

Which is preferred? This is the result billboards Real spheres Actually, viewpoint oriented is usually preferred since it most closely resembles the result using standard triangulated geometry 44

n axial billboarding The rotation axis is fixed and disregarding the view position Also called Impostors 45

Department of Computer Engineering Particle system Particles

Partikelsystem Department of Computer Engineering

Department of Computer Engineering

Particle Systems Boids (flock of birds), see OH 230 3 rules: 1. Separation:Avoid obstacles and getting to close to each other 2. Alignment (strive for same speed and direction as nearby boids 3. Cohesion: steer towards center of mass of nearby boids 49