1 / 35

Texture Mapping

Texture Mapping. Recap: Texture Map Rendering. Rendering uses the mapping: Find the visible surface at a pixel Find the point on that surface corresponding to that pixel Find the point in the texture corresponding to that point on the surface

emmy
Download Presentation

Texture Mapping

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Texture Mapping David Luebke 110/13/2014

  2. Recap: Texture Map Rendering • Rendering uses the mapping: • Find the visible surface at a pixel • Find the point on that surface corresponding to that pixel • Find the point in the texture corresponding to that point on the surface • Use the parameters associated with that point on the texture to shade the pixel • Using triangulated meshes reduces the problem to mapping a portion of the image to each triangle: David Luebke 210/13/2014

  3. Recap: Texture Map Rendering

  4. Recap: User-Generated Mappings • For complex 3-D objects, mapping textures is still something of an art…so we often let the user do it David Luebke 410/13/2014

  5. Recap: Naive Texture Mapping • A first cut at a texture-mapping rasterizer: • For each pixel: • Interpolate u & v using standard edge equations techniques • Look up nearest texel in texture map • Color pixel according to texel color (possibly modulated by lighting calculations) • A serious artifact is warping at the edges of triangles making up the mesh • An obvious example:http://graphics.lcs.mit.edu/classes/6.837/F98/Lecture21/Slide06.html David Luebke 510/13/2014

  6. Recap:Interpolating Parameters • The problem turns out to be fundamental to interpolating parameters in screen-space • Uniform steps in screen space  uniform steps in world coords David Luebke 610/13/2014

  7. Recap:Perspective-Correct Interpolation • The solution: • Rather than interpolating u and v directly, interpolate u/z and v/z • These do interpolate correctly in screen space • Also need to interpolate z and multiply per-pixel • Problem: we don’t know z anymore • Solution: we do know w  1/z • So…interpolate uw and vw and w, and compute u = uw/w and v = vw/w for each pixel • This unfortunately involves a divide per pixel David Luebke 710/13/2014

  8. Recap:Perspective-Correct Texturing • Known as perspective-correct texture mapping • Early PC cards and game consoles didn’t support it • Compensated by using more, smaller polygons • As mentioned, other interpolation schemes really ought to use perspective correction • E.g., Gouraud shading • Generally get away without it because it is more important to be smooth than correct • Java code fragment from McMillan’s edge-equation triangle rasterizer: David Luebke 810/13/2014

  9. Perspective-Correct Texturing: Code Fragment ... PlaneEqn(uPlane, (u0*w0), (u1*w1), (u2*w2)); PlaneEqn(vPlane, (v0*w0), (v1*w1), (v2*w2)); PlaneEqn(wPlane, w0, w1, w2); ... for (y = yMin; y <= yMax; y += raster.width) { e0 = t0; e1 = t1; e2 = t2; u = tu; v = tv; w = tw; z = tz; boolean beenInside = false; for (x = xMin; x <= xMax; x++) { if ((e0 >= 0) && (e1 >= 0) && (e2 >= 0))) { int iz = (int) z; if (iz <= raster.zbuff[y+x]) { float denom = 1.0f / w; int uval = (int) (u * denom + 0.5f); uval = tile(uval, texture.width); int vval = (int) (v * denom + 0.5f); vval = tile(vval, texture.height); int pix = texture.getPixel(uval, vval); if ((pix & 0xff000000) != 0) { raster.pixel[y+x] = pix; raster.zbuff[y+x] = iz; } } beenInside = true; } else if (beenInside) break; e0 += A0; e1 += A1; e2 += A2; z += Az; u += Au; v += Av; w += Aw; } t0 += B0; t1 += B1; t2 += B2; tz += Bz; tu += Bu; tv += Bv; tw += Bw; } David Luebke 910/13/2014

  10. Texture Tiling • It is often handy to tile a repeating texture pattern onto a surface • The previous code does this via tile(): int uval = (int) (u * denom + 0.5f); uval = tile(uval, texture.width); int vval = (int) (v * denom + 0.5f); vval = tile(vval, texture.height); int pix = texture.getPixel(uval, vval); int tile(int val, int size) { while (val >= size) val -= size; while (val < 0) val += size; } See http://graphics.lcs.mit.edu/classes/6.837/F98/Lecture21/Slide18.html David Luebke 1010/13/2014

  11. Texture Transparency • McMillan’s code also includes a “quick fix” for handling transparent texture: if ((pix & 0xff000000) != 0) { raster.pixel[y+x] = pix; raster.zbuff[y+x] = iz; } • Note that this doesn’t handle partial transparency • Demo at: http://graphics.lcs.mit.edu/classes/6.837/F98/Lecture21/Slide19.html David Luebke 1110/13/2014

  12. Recap: Texture Coordinates • Give each vertex of the triangle a texture coordinate(u, v) • For other points on the triangle, interpolate texture coordinate from the vertices • Problem: interpolating in screen-space (a la Gouraud shading) is incorrect • Perspective foreshortening should compress the texture image on distant regions of the surface • Demo at http://graphics.lcs.mit.edu/classes/6.837/F98/Lecture21/Slide06.html David Luebke 1210/13/2014

  13. Recap: Perspective-Correct Interpolation • Skipping some math… • Rather than interpolating u and v directly, interpolate u/z and v/z • These do interpolate correctly in screen space • Also need to interpolate z and multiply per-pixel • Problem: we don’t know z anymore • Solution: we do know w  1/z • So…interpolate uw and vw and w, and compute u = uw/w and v = vw/w for each pixel • This unfortunately involves a divide per pixel David Luebke 1310/13/2014

  14. Texture Map Aliasing • Naive texture mapping looks blocky, pixelated • Problem: using a single texel to color each pixel: int uval = (int) (u * denom + 0.5f); int vval = (int) (v * denom + 0.5f); int pix = texture.getPixel(uval, vval); • Actually, each pixel maps to a region in texture • If the pixel is larger than a texel, we should average the contribution from multiple texels somehow • If the pixel is smaller than a texel, we should interpolate between texel values somehow • Even if pixel size  texel size, a pixel will in general fall between four texels • An example of a general problem called aliasing David Luebke 1410/13/2014

  15. Recap: Texture Map Antialiasing • Use bilinear interpolation to average nearby texel values into a single pixel value (Draw it) • Find 4 nearest texture samples • Round u & v up and down • Interpolate texel values in u • Interpolate resulting values in v • Also addresses the problem of many pixels projecting to a single texel (Why?) David Luebke 1510/13/2014

  16. Recap: Texture Map Antialiasing • What if a single pixel covers many texels? • Problem: sampling those texels at a single point (the center of the pixel): • Produces Moire patterns in coherent texture (checkers) • Leads to flicker or texture crawling as the texture moves • Show OpenGL Texturing tutor • Approach: blur the image under the pixel, averaging the contributions of the covered texels • But calculating which texels every pixel covers is way too expensive, especially as the texture is compressed • Solution: pre-calculate lower-resolution versions of the texture that incorporate this averaging David Luebke 1610/13/2014

  17. Original Texture Lower Resolution Versions MIP-maps • For a texture of 2n x 2n pixels, compute n-1 textures, each at ½ the resolution of previous: • This multiresolution texture is called a MIP-map David Luebke 1710/13/2014

  18. Generating MIP-maps • Generating a MIP-map from a texture is easy • For each texel in level i, average the values of the four corresponding texels in level i-1 • If a texture requires n bytes of storage, how much storage will a MIP-map require? • Answer: 4n/3

  19. R G R G B R G B R G B B Representing MIP-maps Trivia: MIP = Multum In Parvo(many things in a small place)

  20. Using MIP-maps • Each level of the MIP-map represents a pre-blurred version of multiple texels • A texel at level n represents 2n original texels • When rendering: • Figure out the texture coverage of the pixel (i.e., the size of the pixel in texels of the original map) • Find the level of the MIP map in which texels average approximately that many original texels • Interpolate the value of the four nearest texels David Luebke 2010/13/2014

  21. Using MIP-maps • Even better: • Likely, the coverage of the pixel will fall somewhere between the coverage of texels in two adjacent levels of the MIP map • Find the pixel’s value in each of the two textures using two bilinear interpolations • Using a third interpolation, find a value in between these two values, based on the coverage of the pixel versus each of the MIP-map levels • This is (misleadingly?) called trilinear interpolation David Luebke 2110/13/2014

  22. Using MIP-maps • How many interpolations does a texture lookup using trilinear interpolation in a MIP-mapped texture involve? • How many texel values from the MIP-map must be fetched for such a lookup? David Luebke 2210/13/2014

  23. MIP-map Example • No filtering: • MIP-map texturing: David Luebke 2310/13/2014

  24. Can We Do Better? • What assumption does MIP-mapping implicitly make? • A: The pixel covers a square region of the texture • More exactly, the compression or oversampling rate is the same in uandv • Is this a valid assumption? Why or why not? David Luebke 2410/13/2014

  25. MIP-maps and Signal Processing • An aside: aliasing and antialiasing are properly topics in sampling theory • Nyquist theorem, convolution and reconstruction, filters and filter widths • Textures are particularly difficult because a tiled texture can easily generate infinite frequencies • E.g., a checkered plane receding to an infinite horizon • Using a MIP-map amounts to prefiltering the texture image to reduce artifacts caused by sampling at too low a rate David Luebke 2510/13/2014

  26. Summed-Area Tables • A technique called summed-area tableslets us integrate texels covered by the pixel more exactly (but still quickly) • Details in the book • Example: MIP-map texturing Summed-area table texturing David Luebke 2610/13/2014

  27. Texture Mapping Variations • A texture can modulate any parameter in the rendering process: Texture asdiffuse lightingcoefficients: Texture asR,G,B: David Luebke 2710/13/2014

  28. Bump Mapping • The texture map can even modulate the surface normal used for shading Sphere w/ diffuse textureand swirly bump map Sphere w/ diffuse texture Swirly bump map David Luebke 2810/13/2014

  29. More Bump Mapping • How can you tell a bumped-mapped object from an object in which the geometry is explicitly modeled? + = David Luebke 2910/13/2014

  30. Last Bump Mapping Example David Luebke 3010/13/2014

  31. Displacement Map • A displacement map actually displaces the geometry • Treats the texture as a height field to be applied to the surface • Starting to appear in the interactive graphics pipeline • First supported in Matrox Parhelia card • Can sort of implement with beta drivers in ATI & NVIDIA cards • Will soon appear in all cards • Implemented by recursive subdivision of triangles/quads David Luebke 3110/13/2014

  32. Displacement Map Example • What is the biggest visual difference between displacement mapping and bump mapping? David Luebke 3210/13/2014

  33. Illumination Maps • Quake introduced illumination mapsor light maps to capture lighting effects in video games Texture map: Light map Texture map+ light map: David Luebke 3310/13/2014

  34. Illumination Maps • Illumination maps differ from texture maps in that they: • Usually apply to only a single surface • Are usually fairly low resolution • Usually capture just intensity (1 value) rather than color (3 values) • Illumination maps can be: • Painted by hand: Disney’s Aladdin ride • Calculated by a global illumination process: Nintendo64 demo, modern level builders David Luebke 3410/13/2014

  35. Other Texture Applications • Lots of other interesting applications of the texture-map concept (we’ll return to some): • Shadow maps • 3-D textures (marble, wood, clouds) • Procedural textures • Environment maps & cube maps • For a neat explanation of the first three (with cool applets, as usual) check out: http://graphics.lcs.mit.edu/classes/6.837/F98/Lecture22/Slide21.html David Luebke 3510/13/2014

More Related