textures -...

9
5/28/14 1 Texturing & Blending Prof. Aaron Lanterman (Based on slides by Prof. Hsien-Hsin Sean Lee) School of Electrical and Computer Engineering Georgia Institute of Technology 2 Textures • Rendering tiny triangles is slow • Players won’t even look at some certain details – Sky, clouds, walls, terrain, wood patterns, etc. • Simple way to add details and enhance realism • Use 2D images to map polygons • Images are composed of 2D texels• Can be used to substitute or blend with the lit color of a texture-mapped surface 3 Texture coordinates •Introduce one more component to geometry –Position coordinates –Normal vector –Color (may not need now) Texture coordinates 4 Texture coordinate conventions • Direct3D/XNA texture convention – (u, v) coordinates for each vertex – (0,0) = upper left corner – (1,1) = lower right corner • OpenGL texture convention – (s, t) coordinates for each vertex – (0,0) = bottom left corner – (1,1) = upper right corner

Upload: others

Post on 31-Oct-2019

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Textures - stanley.gatech.edustanley.gatech.edu/wp-content/uploads/sites/466/2014/07/gpulecture06su...5/28/14 4 13 Bilinear filtering (for magnification) • Or take the weighted color

5/28/14

1

Texturing & Blending

Prof. Aaron Lanterman (Based on slides by Prof. Hsien-Hsin Sean Lee) School of Electrical and Computer Engineering

Georgia Institute of Technology

2

Textures • Rendering tiny triangles is slow • Players won’t even look at some certain details

– Sky, clouds, walls, terrain, wood patterns, etc. • Simple way to add details and enhance realism • Use 2D images to map polygons • Images are composed of 2D “texels” • Can be used to substitute or blend with the lit

color of a texture-mapped surface

3

Texture coordinates • Introduce one more

component to geometry – Position coordinates – Normal vector – Color (may not need now) – Texture coordinates

4

Texture coordinate conventions

• Direct3D/XNA texture convention – (u, v) coordinates for each vertex – (0,0) = upper left corner – (1,1) = lower right corner

• OpenGL texture convention – (s, t) coordinates for each vertex – (0,0) = bottom left corner – (1,1) = upper right corner

Page 2: Textures - stanley.gatech.edustanley.gatech.edu/wp-content/uploads/sites/466/2014/07/gpulecture06su...5/28/14 4 13 Bilinear filtering (for magnification) • Or take the weighted color

5/28/14

2

5

Texture mapping example (1) (0,0)

(1,1)

v0 v1

v2 v3

v7 v8

(0,1)

(1,0)

{v1.x, v1.y, v1.z, …, 1, 0}, {v2.x, v2.y, v2.z, …, 1, 1}, {v0.x, v0.y, v0.z, …, 0, 0}, {v3.x, v3.y, v3.z, …, 0, 1},

u v Direct3D/XNA convention

6

Texture mapping example (2) Texture 2

(0,0)

(1,1)

v0 v1

v2 v3

v7 v8 Texture 1 (0,0)

(1,1) (0,1)

(1,0)

“Perspective correct” texture mapping

7

From http://en.wikipedia.org/wiki/Texture_mapping

8

Repeated textures (0,0)

(1,1)

{v1.x, v1.y, v1.z, …, 0, 0}, {v2.x, v2.y, v2.z, …, 5, 0}, {v0.x, v0.y, v0.z, …, 5, 3}, {v3.x, v3.y, v3.z, …, 0, 3},

u v

(1,0)

(0,1)

v1 v2

v0 v3

Page 3: Textures - stanley.gatech.edustanley.gatech.edu/wp-content/uploads/sites/466/2014/07/gpulecture06su...5/28/14 4 13 Bilinear filtering (for magnification) • Or take the weighted color

5/28/14

3

9

Repeated brick texture

{v1.x, v1.y, v1.z, …, 0, 0}, {v2.x, v2.y, v2.z, …, 6, 0}, {v0.x, v0.y, v0.z, …, 6, 6}, {v3.x, v3.y, v3.z, …, 0, 6},

u v

10

Magnification

•  Texel and pixel mapping is rarely 1-to-1 •  Mapped triangle is very close to the camera •  One texel maps to multiple pixels

Pixels on screen Texels

11

Nearest point sampling (for magnification)

• Choose the texel nearest the pixel’s center

Pixels on screen Texels

12

Averaging (for magnification)

• Average the 2x2 texels surrounding a given pixel

Texels

R=102 G=102 B=51

R=255 G=204 B=102

R=253 G=230 B=145

R=247 G=237 B=141

Pixels on screen

R=214 G=193 B=110

Page 4: Textures - stanley.gatech.edustanley.gatech.edu/wp-content/uploads/sites/466/2014/07/gpulecture06su...5/28/14 4 13 Bilinear filtering (for magnification) • Or take the weighted color

5/28/14

4

13

Bilinear filtering (for magnification)

• Or take the weighted color values for the 2x2 texels surrounding a given pixel

1-x x

y

1-y

: pixel enclosed by 4 texels

* (1-x) * (1-y)

* (1-x) * y

* x * (1-y)

* x * y +

Final Color

+

+

14

Minification

•  Texel and pixel mapping is rarely 1-to-1 • Multiple texels map to one pixel

Pixels on screen Texels

Color?

15

Nearest point sampling (for minification)

• Choose the texel nearest the pixel’s center Pixels on screen

16

Averaging (for minification)

• Average for the 2x2 texels corresponding to a given pixel

Pixels on screen

R=135 G=119 B=23

R=252 G=219 B=96

R=0 G=0 B=0

R=234 G=189 B=0

R=155 G=132 B=30

Page 5: Textures - stanley.gatech.edustanley.gatech.edu/wp-content/uploads/sites/466/2014/07/gpulecture06su...5/28/14 4 13 Bilinear filtering (for magnification) • Or take the weighted color

5/28/14

5

17

Mip-mapping (1) • Multiple versions are provided for the same

texture • Different versions have different levels of

details – E.g., 7 LOD maps: 256x256, 128x128, 64x64,

32x32, 16x16, 8x8, 4x4 – Choose the closest maps to render a surface

• Maps can be automatically generated by 3D API

18

Mip-mapping (2)

• API or hardware can –  Choose the right one for the viewer

• Good performance for far triangles • Good LOD for close-by objects

–  Trilinearly interpolate

19

Tri-linear filtering using mipmaps

• Interpolate between mipmaps

Lower Res. Mip Map Screen Pixel

R=155 G=132 B=30

R=229 G=208 B=119

R=233 G=227 B=143

R=178 G=179 B=90

R=199 G=187 B=96

Higher Res. Mip Map

R=147 G=114 B=117

R=58 G=0 B=0

R=66 G=0 B=0

R=106 G=80 B=74

R=94 G=49 B=48

R=147 G=118 B=72

20

Anisotropic filtering •  Not isotropic •  Preserves details for

oblique viewing angles (non-uniform surface)

•  AF calculates the “shape” of the surface before mapping

•  The number of pixels sampled depends on the distance and view angles relative to the screen

•  Very expensive

Source: nvidia

Trilinear filtering Bilinear filtering

16x Anisotropic filtering 64x Anisotropic filtering

Page 6: Textures - stanley.gatech.edustanley.gatech.edu/wp-content/uploads/sites/466/2014/07/gpulecture06su...5/28/14 4 13 Bilinear filtering (for magnification) • Or take the weighted color

5/28/14

6

21

Color blending and alpha blending •  Transparency effect (e.g. water, glasses, etc.) • Source color blended with destination color • Several blending methods

–  Additive C = SrcPixel ⊗ (1,1,1,1) + DstPixel ⊗ (1,1,1,1) = SrcPixel + DstPixel

–  Subtractive C = SrcPixel ⊗ (1,1,1,1) ― DstPixel ⊗ (1,1,1,1) = SrcPixel ― DstPixel

– Multiplicative C = DstPixel ⊗ SrcPixel

–  Using Alpha value in the color (Alpha blending) C = SrcPixel ⊗ (α,α,α,α) + DstPixel ⊗ (1-α,1-α,1-α,1-α)

–  And many more in the API …

22

Alpha blending (inverse source form)

No transparency Src=0.2 (triangle) Dest=0.8 (square)

Src=0.5 (triangle) Dest=0.5 (square)

Src=0.8 (triangle) Dest=0.2 (square)

23

Another example w/out transparency

24

Another alpha blending example

Src=0.3 (rect) Dest=0.7 (checker)

Src=0.5 (orange rect) Dest=0.5 Src=0.6 (triangle) Dest=0.4

Page 7: Textures - stanley.gatech.edustanley.gatech.edu/wp-content/uploads/sites/466/2014/07/gpulecture06su...5/28/14 4 13 Bilinear filtering (for magnification) • Or take the weighted color

5/28/14

7

25

Alpha test

•  Reject pixels by checking their alpha values •  Model fences, chicken wires, etc.

Texture: bar.jpg

if (α op val) reject pixel else accept pixel

Straightforward texture mapping

26

Multitexturing • Map multiple textures to a polygon

–  Common APIs support 8 textures

• Performance will be reduced • Multiple texturing stages in the

pipeline •  Texture color will be calculated by

– Multiplication –  Addition –  Subtraction

Operation 1

Texture1 color

lit color

Operation 2

Texture2 color

Operation 3

Texture3 color

Operation N

TextureN color

Final Color

27

Multi-texturing example: light mapping

Some crumpled paper texture

A spotlight map

Different alpha blending

28

Stenciling • Stencil buffer

– To reject certain pixels to be displayed – To create special effect similar to alpha test

• Mask out part of the screen – Set together with Z-buffer in 3D API – Perform prior to Z-buffer test

if ((stencil ref & mask) op (pixel val & mask))

accept pixel else reject pixel

Page 8: Textures - stanley.gatech.edustanley.gatech.edu/wp-content/uploads/sites/466/2014/07/gpulecture06su...5/28/14 4 13 Bilinear filtering (for magnification) • Or take the weighted color

5/28/14

8

29

Stencil buffer example

This window area is set to be drawn by stencil buffer

Reject pixels

inside this area

From http://www.ziggyware.com/readarticle.php?article_id=116 30

Mirror effect (1) 1.  Render the entire scene as normal (no reflection yet) 2.  Clear the entire stencil buffer to ‘0’ (i.e., mirror’s fragments) 3.  Render the mirror primitives and set the corresponding stencil buffer

fragment to ‘1’ 4.  Render the reflected objects only if stencil test passes (i.e., value==1)

•  Using a “reflection matrix” for world transformation (Draw the scene as if they are seen in the mirror)

Render the reflected objects w/ stencil test

Clear stencil buffer

Stencil buffer

Set stencil buffer for mirror object

Stencil buffer

From http://www.ziggyware.com/readarticle.php?article_id=116

31

Mirror effect (2) Can be done in a reverse order 1.  Render the reflected image of the

scene using a “reflection matrix” for world transformation (draw the scene as if they are seen in the mirror)

2.  Render non-reflected with stencil buffer accept/reject test to prevent the reflected image being drawn over

From http://www.ziggyware.com/readarticle.php?article_id=116 32

Bump Mapping (1) •  Per-fragment lighting using bump map (normal map) to

perturb surface normal •  No geometry tessellation, avoid geometry complexity •  Store normal vectors rather than RGB colors for bump map •  Apply per-pixel shading (w/light vector, e.g., Phong shading)

Source: wikipedia

Shaded sphere Bump map Bump mapped sphere

Page 9: Textures - stanley.gatech.edustanley.gatech.edu/wp-content/uploads/sites/466/2014/07/gpulecture06su...5/28/14 4 13 Bilinear filtering (for magnification) • Or take the weighted color

5/28/14

9

33

Bump Mapping (2) • Normal map was derived from a height field map

–  Height field stores the “elevation” for each texel –  Sample texel’s height as well as texels to the right and

above

Height field

Range-compressed Normal

34

(Cube) Environment Mapping

•  Cube Map Textures (in World coordinate) •  Each face encodes 1/6 of the panoramic environment

Source: Game Creators, Ltd.

35

Environment Mapping (1) Source: zabur.smz.sk •  Look up the environment map

•  Add reflection to a fragment’s final color

R = 2*(dotp(N, L))*N - L

θ θ

Incident Ray (-L)

Reflective Ray (R)

Normal (N)

World space Function texCUBE() is provided for sampling the texel in cube map

36

Environment Mapping (2)

Cube texture map Rendered image

Source: Game Creators, Ltd.