Transcript Document
Texture = Arbitrary Illumination
Vary a surface property non-linearly
Rasterization does bi-linear interpolation
Examples of usage:
Paste a picture
picture of environment
picture of scene
Modify surface normals
Create bumps and detail
Texture Mapping
Texture aka function of a surface
f (x,y,z) = some attribute value
Would like f to be arbitrary
Look-up table is a possible implementation
No continuity constraints
But not all x,y,z has the surface through it
Surface is only a 2-manifold
2D look-up table
But want to map every point on a surface to a 2D
space <u,v>
parameterization
Texture Mapping
v
u
Texture Coordinates
Pixel Texture Coordinates
Triangle
Pixel
Screen
Texture
Pixel Texture Lookup
Texel
Pixel
Texture-Minification
Texels
Pixels
These texels should also
contribute to the pixel
Mip-Mapping
Filter 2x2 texel blocks into one texel
Weighted average
Log(n) levels of an n xn texture map
Choose level closest to 1 texel/pixel
Pixel derivative
Derivative
Tex coord:
t0
t-1
t2
Pixels
Texels
t1
t3
t1 – t0 = (∆t xu, ∆t xv )
t2 – t0 = (∆tyu , ∆tyv)
∆t =
WxH texture =>
texel size = 1/W x 1/H
max (∆txu , ∆tyu), max(∆txu , ∆tyv)
Use divided difference: t1 – t-1
Anisotropic Filter
Texels
Pixels
Use Smallest minification
May read several texels
Texture Border
Extra texel needed for linear
interpolation
u=0
Other Texture Usage
Alpha Map
Transparent texture
Light Map
Diffused lighting independent of viewer
How do you generate it?
Texel to Object space reverse-mapping
Specular Map
Displacement Map
Bump Map
Environment Map
Point Sprites
Point Sprites
Draw points
E.g., as a k x k pixel square
Map a (small) texture on the point
Typically used with transparency
For example a cursor
Bump Mapping
Bump Mapping
Physically displace
Generate many
triangles
Simulate
Change the normal
Normal affects lighting
N
Bump Mapping
Assume
‘Bump’ to the surface is small
In the direction of the normal
aka Height-map
Simulation:
P' = P + B(u,v) N
P'(u,v) = P(u,v) + B(u,v) N(u,v)
Bump Mapping
Tangent to the surface P(u,v) at a point (u,v):
Pu, Pv
N
The normal is then:
N(u,v) = Pu Pv
P'(u,v) = P(u,v) + B(u,v) N
P'u = Pu + Bu N + B Nu P'u = Pu + Bu N
P'v = Pv + Bv N + B Nv P'v = Pv + Bv N
(if B is small)
P'u x P'v =
Pu Pv + Bu(N Pv) - Bv(N Pu) + Bu Bv(N N)
Bump Mapping
N'(u,v) =
Pu Pv + Bu(N Pv) - Bv(N Pu) + Bu Bv(N N)
= N + Bu(N Pv) - Bv(N Pu)
N - BuPu – BvPv
if tangents are almost perpendicular
Note:
Store Bu and Bv as
2-component texture
Normalize N’
D
N’
N
Normal Mapping
Directly store the new normal per texel
From bump map:
Nx = (0, 1, Bu)
Ny = (1, 0, Bv)
N = Nx X Ny
Remember to normalize
(and range compress)
Displacement Mapping
Modifies the surface position
Along surface normal, typically
Use if Bumps are large
Get silhouettes, shadows right
Much more expensive
Tessellate geometry
Some support in modern GPUs
Environment Mapping
Global Illumination:
Render the entire scene
Pick pixels in useful directions
Environment Map:
Reflected
ray
Assume high gloss
Find ideal reflected direction
Viewer
Look-up the value in that direction
Use one rendering
Eye at the center of the object
Environment Map
For each point on the surface
Where is the image plane?
Introduces distortions in the reflection
Good for small objects in a large room
Reflected
direction
Object
Example
Cube Mapping
Map onto surfaces of a cube (around the
object)
Find desired direction from a surface point
Cube map accessed by the direction
Axis-aligned often
One of the six faces of the cube intersects
The corresponding texture is looked up
For environment mapping:
Render scene from object-center onto cube face
Use, e.g, the six axis-aligned directions
Rendering may be pre-computed at high quality
E.g., 6 photos of a real environment
Cube Map Example