Game Development Reference

In-Depth Information

7.8.2 Tangent Space

Since the vector 0, 0,1 in a bump map represents an unperturbed normal, we

need it to correspond to the interpolated normal vector that we would ordinarily

use in the lighting formula. This can be achieved by constructing a coordinate

system at each vertex in which the vertex normal always points along the positive

z
axis. In addition to the normal vector, we need two vectors that are tangent to

the surface at each vertex in order to form an orthonormal basis. The resulting

coordinate system is called
tangent space
or
vertex space
and is shown in

Figure 7.16.

Once a tangent-space coordinate system has been established at each vertex

of a triangle mesh, the direction to light vector
L
is calculated at each vertex and

transformed into the tangent space. The tangent-space vector
L
is then interpolat-

ed across the face of a triangle. Since the vector 0, 0,1 in tangent space corre-

sponds to the normal vector, the dot product between the tangent-space direction

to light
L
and a sample from a bump map produces a valid Lambertian reflection

term.

The tangent vectors at each vertex must be chosen so that they are aligned to

the texture space of the bump map. For surfaces generated by parametric func-

tions, tangents can usually be calculated by simply taking derivatives with re-

spect to each of the parameters. Arbitrary triangle meshes, however, can have

bump maps applied to them in any orientation, which necessitates a more general

method for determining the tangent directions at each vertex.

7.8.3 Calculating Tangent Vectors

Our goal is to find a 3

matrix at each vertex that transforms vectors from ob-

ject space into tangent space. To accomplish this, we consider the more intuitive

problem of transforming vectors in the reverse direction from tangent space into

object space. Since the normal vector at a vertex corresponds to 0, 0,1 in tangent

space, we know that the
z
axis of our tangent space always gets mapped to a ver-

tex's normal vector.

We want our tangent space to be aligned such that the
x
axis corresponds to

the
s
direction in the bump map and the
y
axis corresponds to the
t
direction in

the bump map. That is, if
Q
represents a point inside the triangle, we would like

to be able to write

×

3

(

)

(

)

Q

−=−

P

s

s

T

+−

t

t

B
,

(7.31)

0

0

0

Search Nedrilad ::

Custom Search