cs559: computer graphics lecture 27: texture mapping li zhang spring 2008
TRANSCRIPT
CS559: Computer Graphics
Lecture 27: Texture MappingLi Zhang
Spring 2008
Today• Continue on texture maping
• Reading– Shirley: Ch 11.2, 11.3, 11.4– Redbook: Ch 9– (optional) Moller and Haines: Real-Time Rendering, 3e,
Ch 6• Linux:
/p/course/cs559-lizhang/public/readings/6_texture.pdf• Windows: P:\course\cs559-lizhang\public\readings\
6_texture.pdf
Texture Mapping
Many slides from Ravi Ramamoorthi, Columbia Univ, Greg Humphreys, UVA and Rosalee Wolfe, DePaul tutorial teaching texture mapping visually
Adding Visual Detail
• Basic idea: use images instead of more polygons to represent fine scale color variation
Parameterization
geometrygeometry
++ ==
imageimage texture maptexture map
• Q: How do we decide where on the geometryeach color from the image should go?
Option: Varieties of mappings
[Paul Bourke][Paul Bourke]
How to map object to texture?• To each vertex (x,y,z in object coordinates), must
associate 2D texture coordinates (s,t)• So texture fits “nicely” over object
How to map object to texture?• To each vertex (x,y,z in object coordinates), must
associate 2D texture coordinates (s,t)• So texture fits “nicely” over object
Outline• Types of mappings• Interpolating texture coordinates • Broader use of textures
Planar mapping• Like projections, drop z coord (u,v) = (x/W,y/H)• Problems: what happens near silhouettes?
Cylindrical Mapping• Cylinder: r, θ, z with (u,v) = (θ/(2π),z)
– Note seams when wrapping around (θ = 0 or 2π)
Basic procedure• First, map (square) texture to basic map shape• Then, map basic map shape to object
– Or vice versa: Object to map shape, map shape to square
• Usually, this is straightforward– Maps from square to cylinder, plane, …– Maps from object to these are simply coordinate
transform
Spherical Mapping• Convert to spherical coordinates: use
latitude/long.– Singularities at north and south poles
Cube Mapping
Cube Mapping
Slides from Leonard Mcmillan
Outline• Types of projections• Interpolating texture coordinates • Broader use of textures
1st idea: Gouraud interp. of texcoords
1I
2I
3I
sI
Using barycentric Coordinates
1st idea: Gouraud interp. of texcoords
Scan line
1I
2I
3I
1y
2y
3y
syaI bI
1 2 2 1
1 2
( ) ( )s sa
I y y I y yI
y y
31
1331 )()(
yy
yyIyyII ssb
ab
asbsbas xx
xxIxxII
)()(
sI
Artifacts• McMillan’s demo of this is at
http://graphics.lcs.mit.edu/classes/6.837/F98/Lecture21/Slide05.html
• Another example http://graphics.lcs.mit.edu/classes/6.837/F98/Lecture21/Slide06.html
• What artifacts do you see?• Why?• Hint: problem is in interpolating parameters
Interpolating Parameters• The problem turns out to be fundamental to
interpolating parameters in screen-space– Uniform steps in screen space uniform steps in world space
Texture image
Slides from Jingyi Yu
Linear Interpolation in Screen Space
Compare linear interpolation in screen space
Without loss of generality, let’s assume that the viewport is located 1 unit away from the center of projection. That is
0100
0100
0010
0001
Linear Interpolation in 3-Space
to interpolation in 3-space:
Slides from Jingyi Yu
How to make them MeshStill need to scan convert in screen space... so we need a mapping from t
values to s values. We know that the all points on the 3-space edge project onto our screen-space line. Thus we can set up the following equality:
and solve for s in terms of t giving:
Unfortunately, at this point in the pipeline (after projection) we no longer have z1 and z2 lingering around (Why? Efficiency, don’t need to compute 1/z all the time). However, we do have w1 = 1/z1 and w2 = 1/z2.
Slides from Jingyi Yu
Interpolating ParametersWe can now use this expression for s to interpolate arbitrary parameters, such as texture indices (u, v), over our 3-space triangle. This is accomplished by substituting our solution for s given t into the parameter interpolation.
Therefore, if we premultiply all parameters that we wish to interpolate in 3-space by their corresponding w value and add a new plane equation to interpolate the w values themselves, we can interpolate the numerators and denominator in screen-space. We then need to perform a divide a each step to get to map the screen-space interpolants to their corresponding 3-space values. This is a simple modification to the triangle rasterizer that we developed in class.
Slides from Jingyi Yu
1st idea: Gouraud interp. of texcoords
Scan line
1I
2I
3I
1y
2y
3y
syaI bI
1 2 2 1
1 2
( ) ( )s sa
I y y I y yI
y y
31
1331 )()(
yy
yyIyyII ssb
ab
asbsbas xx
xxIxxII
)()(
sI
Replace I to uw, vw, and w, then compute (uw/w, and vw/w)
Perspective-Correct Interpolation• In short…
– 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 keep z anymore– Solution: we do keep 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
• http://graphics.lcs.mit.edu/classes/6.837/F98/Lecture21/Slide14.html
Texture Mapping
Linear interpolationof texture coordinates
Correct interpolationwith perspective divide
Hill Figure 8.42
http://graphics.lcs.mit.edu/classes/6.837/F98/Lecture21/Slide14.html
Why don’t we notice? Traditional screen-space Gourand shading is wrong. However, you usually will not notice because the transition in colors is very smooth (And we don't know what the right color should be anyway, all we care about is a pretty picture). There are some cases where the errors in Gourand shading become obvious.
• When do we notice? – When switching between different
levels-of-detail representations
– At "T" joints.
Dealing with Incorrect InterpolationYou can reduce the perceived artifacts of non-perspective correct interpolation by subdividing the texture-mapped triangles into smaller triangles (why does this work?). But, fundamentally the screen-space interpolation of projected parameters is inherently flawed.
http://groups.csail.mit.edu/graphics/classes/6.837/F98/Lecture21/Slide15.html
Texture Map Filtering
• Naive texture mapping aliases badly • Look familiar?
int uval = (int) (u * W);int vval = (int) (v * H);int pix = texture.getPixel(uval, vval);
• Actually, each pixel maps to a region in texture– |PIX| < |TEX|
• Easy: interpolate (bilinear) between texel values – |PIX| > |TEX|
• Hard: average the contribution from multiple texels– |PIX| ~ |TEX|
• Still need interpolation!
Mip Maps• Keep textures prefiltered at multiple resolutions
– For each pixel, linearly interpolate between two closest levels (e.g., trilinear filtering)
– Fast, easy for hardware
• Why “Mip” maps?
MIP-map Example
• No filtering:
• MIP-map texturing:
AAAAAAAGH
Where are my glasses?
Outline• Types of projections• Interpolating texture coordinates • Broader use of textures
Texture Mapping Applications• Modulation, light maps• Bump mapping• Displacement mapping• Illumination or Environment Mapping• Procedural texturing• And many more
Modulation textures
Map texture values to scale factorW
ood
text
ure
Bump Mapping• Texture = change in surface normal!
Sphere w/ diffuse texture Swirly bump mapSphere w/ diffuse textureand swirly bump map
Displacement Mapping
Illumination Maps
• Quake introduced illumination maps or light maps to capture lighting effects in video games
Texture map:
Texture map+ light map:
Light map
Cube map
Sphere map
Shaddow map
Environment Maps
Images from Illumination and Reflection Maps: Simulated Objects in Simulated and Real EnvironmentsGene Miller and C. Robert HoffmanSIGGRAPH 1984 “Advanced Computer Graphics Animation” Course Notes
Terminator
Arc-length parameterization
Freeformx
y
0 1t
)(
)()(
2
1
tf
tft
y
xf
0 Ls
)(
)()(
2
1
sg
sgs
y
xg
Arc-length parameterization
dtdt
tdfs
t
0
)(
Interpolating Parameters• Perspective foreshortening is not getting applied
to our interpolated parameters– Parameters should be compressed with distance– Linearly interpolating them in screen-space doesn’t
do this
• Correct Mapping Results– http://graphics.lcs.mit.edu/classes/6.837/F98/
Lecture21/Slide14.html