SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
GDC 2000: Advanced OpenGL                                                    A Practical and Robust Bump-mapping
Game Development                                                                       Technique for Today's GPUs

      A Practical and Robust Bump-mapping Technique for
                         Today’s GPUs
                                                         Mark J. Kilgard
                                                      NVIDIA Corporation
                                                      3535 Monroe Street
                                                     Santa Clara, CA 95051
                                                        (408) 615-2500
                                                           mjk@nvidia.com

                                                              March 30, 2000
                                                Copyright NVIDIA Corporation, 2000.



ABSTRACT
Bump mapping is a normal-perturbation rendering technique for simulating lighting effects caused by patterned irregularities on
otherwise locally smooth surfaces. By encoding such surface patterns in texture maps, texture-based bump mapping simulates a
surface’s irregular lighting appearance without modeling the patterns as true geometric perturbations to the surface. Bump mapping is
advantageous because it can decouple a texture-based description of small-scale surface irregularities used for per-pixel lighting
computations from the vertex-based description of large-scale object shape required for efficient transformation and rasterization. This
paper describes a practical and robust bump-mapping technique suited for the capabilities of today’s Graphics Processor Units (GPUs).
This paper has six sections including the introduction. The second section presents the theory of bump mapping. The third section
reviews several existing hardware bump-mapping techniques. The fourth section describes the cube map texturing and “register
combiners” features of NVIDIA’s GeForce 256 and Quadro GPUs. These features in combination are the basis for the bump mapping
technique presented in the fifth section. This technique achieves real-time performance on current generation NVIDIA GPUs. The tech-
nique can model ambient, diffuse, and specular lighting terms, a textured surface decal, and attenuated and spotlight illumination. The
technique is notable because of its robustness and relative fidelity to Blinn’s original mathematical formulation of bump mapping. The
sixth section concludes. Several appendices provide OpenGL implementation details.
Keywords
Bump mapping, texturing, per-pixel lighting, register combiners, GeForce 256, Quadro, OpenGL.
                                                                          reason that people are comfortable calling a stucco wall “flat”
1     INTRODUCTION
                                                                          despite its stucco texture and consider a golf ball “round” de-
Video games use texture-mapping hardware to generate inter-
                                                                          spite its dimples.
active computer-generated imagery with astounding levels of
per-pixel detail, yet conventional hardware texture mapping               To capture the everyday sense of texture, computer graphics
does not give rendered surfaces a “textured” feel in the every-           practitioners use an extension of texture mapping known as
day sense of the term. Conventional hardware texture mapping              bump mapping. Blinn invented bump mapping in 1978 [4].
gives polygonal models a colorful yet flat appearance. Even               Bump mapping is a texture-based rendering approach for
when textured models are augmented by per-vertex lighting                 simulating lighting effects caused by patterned irregularities on
computations, polygonal flatness is still evident. The problem            otherwise locally smooth surfaces. By encoding such surface
is that what computer graphics practitioners call texture is not          patterns in texture maps, bump mapping simulates a surface’s
what people mean by the word texture in everyday usage.                   irregular lighting appearance without the complexity and
                                                                          expense of modeling the patterns as true geometric perturba-
In everyday usage the word “texture” refers to bumps, wrinkles,
                                                                          tions to the surface.
grooves, or other irregularities on surfaces. The computer
graphics notion of a texture is more akin to the everyday notion          Rendering bumpy surfaces as actual geometric perturbations is
of a decal. In the everyday world, we recognize bumpy surfaces            just too computationally expensive and data intensive.
because of the way light interacts with the surface irregulari-           Moreover, the scale of the minute geometric displacements is
ties. In a strict sense, these bumps and irregularities are part of       typically less than the discrete pixel resolution used for ren-
the complete geometric form of everyday objects, but in a                 dering which leads to aliasing issues. Bump mapping is a more
looser sense, the scale of these irregularities is quite small            efficient approach because it decouples the texture-based
relative the overall geometric form of the object. This is the            description of small-scale surface irregularities used for per-



                                                                      1
GDC 2000: Advanced OpenGL                                                   A Practical and Robust Bump-mapping
Game Development                                                                      Technique for Today's GPUs
                                                                         2.1    Classic Height Field Bump Mapping
                                                                         The classic formulation of bump mapping developed by Blinn
                                                                         computes perturbed surface normals for a parametric surface as
                                                                         if a height field displaced the surface in the direction of the
        surface P                                                        unperturbed surface normal. The surface, without any actual
                                         height field F                  displacement, is then rendered and illuminated based on the
                                                                         perturbed surface normals. These computations are performed
                                                                         at each and every visible pixel on the surface.
                                                                         The discussion in this and the next two subsections restates
                                                                         Blinn’s classic motivation for bump mapping [4].
                                                                         Assume a surface is defined by a bivariate vector function
                  perturbed surface P’
                                                                         P(u,v) that generates 3D points (x,y,z) on the surface. (A bi-
                                                                         variate vector function is a function of two variables where the
Figure 1. A surface perturbed by a height field makes a                  result is a vector. A 2D texture map containing colors
                    bumpy surface.                                       represented as RGB triples is one example of a bivariate vector
                                                                         function.) The surface normal for a point on P is defined as
pixel lighting computations from the vertex-based description
                                                                                                      ∂P (u, v ) ∂P(u, v)
of large-scale object shape required for efficient transformation,                    N(u , v) =                ×
rasterization, and hidden surface removal.                                                              ∂u         ∂v
Still the computations required for bump mapping as originally
formulated by Blinn are considerably more expensive than                                              Equation 1
those required for conventional hardware texture mapping.                A second bivariate scalar function F(u,v) defines displacement
Many attempts have been made over the last two decades to                magnitudes from the surface P(u,v). The displacement direc-
reformulate bump mapping into a form suitable for hardware               tion is determined by normalizing N(u,v). F can be interpreted
implementation. In general, these attempts suffer from various           geometrically as a height field that displaces the surface P.
and often serious limitations.                                           Together, P and F define a new displaced surface P'(u,v) as
This paper describes a new practical and robust bump-mapping             shown in Figure 1 and defined as follows
technique suited to NVIDIA’s current generation Graphics
                                                                                                                         N (u , v)
Processing Units (GPUs). This paper also compares and                             P' (u , v) = P (u , v ) + F (u, v )
contrasts the new technique with other hardware bump map-                                                                N (u , v)
ping techniques described in the literature.
                                                                         The surface normal for a point on P' is defined as
This paper has six sections. After this introduction, the second
section presents the mathematics of bump mapping. The third                                           ∂P' (u , v ) ∂P ' (u , v )
section reviews several hardware bump-mapping techniques                             N ' (u , v ) =               ×
described in the literature. The fourth section describes the                                           ∂u             ∂v
cube map texturing and “register combiners” features of
NVIDIA’s GeForce 256 and Quadro GPUs. These features in                                               Equation 2
combination with multitexturing are the basis for the bump               Expanding these partial derivatives of P' with the chain rule
mapping technique presented in the fifth section. This tech-             results in
nique achieves real-time performance on NVIDIA GPUs. The
technique can model ambient, diffuse, and specular lighting                                          N 
                                                                                                    ∂      
terms, a textured surface decal, and attenuated and spotlight
                                                                                   ∂P' ∂P ∂F  N 
                                                                                               + F | N | 
illumination. The technique supports both a locally positioned                        =  +
light and a local viewer model. The technique is notable                           ∂u ∂u ∂u  N 
                                                                                                   ∂u 
because of its robustness and relative fidelity to Blinn’s origi-                                          
nal mathematical formulation of bump mapping. The sixth                                                    
section concludes.      Several appendices provide OpenGL
implementation details.                                                                               Equation 3

2     BUMP MAPPING MATHEMATICS                                                                        N 
                                                                                                     ∂   
Bump mapping is divided into two tasks. First, a perturbed                                   N
                                                                                   ∂P' ∂P ∂F        |N|
surface normal is computed. Then, a lighting computation is                           =  +        +F
performed using the perturbed normal.                                              ∂v ∂v ∂v  N 
                                                                                              
                                                                                                      ∂v 
                                                                                                         
These two tasks must be performed at each and every visible                                              
fragment of a bump-mapped surface. Because we desire a
hardware solution that runs at real-time rates, computational                                         Equation 4
efficiency is an imperative.


                                                                     2
GDC 2000: Advanced OpenGL                                                   A Practical and Robust Bump-mapping
Game Development                                                                      Technique for Today's GPUs

                                                                                               D
                                  N                                                   N’                  N
                                                                                                   θ
                       N'                        ∂P/ ∂v
                                                                                                         -∂F/∂u           ∂P/ ∂v




                                                                                                                      A
   N × ∂P/∂u                                      ∂P/∂u
                                                                                             ∂F/ ∂v

                  ∂F/ ∂u                                                                                          ∂P/∂u
                                               N × ∂P/∂v
                            D -∂F/ ∂v
                                                                            Figure 3. Interpreting a perturbation as a rotation.


  Figure 2. Interpreting a perturbation as an offset vector.             sent normal perturbations in a bump map. Blinn’s first inter-
                                                                         pretation leads to encoding bump maps as offset vectors.
                                                                         Blinn’s second interpretation leads to encoding bump maps as
In the context of bump mapping, F represents the bumpiness of            vector rotations. These two interpretations serve as the basis
the surface. This bumpiness can be considered micro-                     for a wide variety of bump-mapping techniques.
displacements that are negligible relative to the overall scale of
the surface P. So assuming the magnitude of F is negligible,             2.2     Offset Vector Bump Maps
the rightmost term in both Equation 3 and Equation 4 can be              Blinn’s first geometric interpretation of Equation 5 notes that
approximated by zero. Note that even if F itself is negligible,          N' can be viewed as N offset by a vector D. That is
the partial derivatives of F are significant.
                                                                                                      N' = N + D
Expanding the cross product in Equation 2 gives the following
expression for N'                                                                                      Equation 6
           ∂P ∂F  N    ∂P ∂F  N                                  where
     N' =    +     ×     +     `
           ∂u ∂u  N    ∂v ∂v  N                                               ∂F     ∂P  ∂F     ∂P 
                                                                                 N ×    −   N ×    
                                                                                      ∂u     ∂v  ∂v     ∂u 
which evaluates to                                                                 D=
                                                                                                  N
         ∂F  ∂P  ∂F  ∂P  ∂F ∂F
             N×        × N         (N × N)
   ∂P ∂P ∂u    ∂v  ∂v  ∂u  + ∂u ∂v
N'= × +             +                                                                                  Equation 7
   ∂u ∂v      N           N          N
                                        2

                                                                         Blinn gives a geometric interpretation of D. The two vectors
The first term is just N based on Equation 1. The last term is           N×∂P/∂v and N×∂P/∂u reside in the tangent plane of the
zero because N×N=0. Therefore, N' simplifies to                          surface. Scaling each vector by an amount proportional to the u
                                                                         and v partial derivatives of F and adding the two vectors pro-
              ∂F   ∂P  ∂F   ∂P 
                 N×  −    N× 
                                                                         duces D. The vector D plus the unperturbed vector N produce
              ∂u   ∂v  ∂v   ∂u                                       N'. This interpretation is shown in Figure 2.
     N' = N +                                                            This implies that another way to represent a bump map in ad-
                        N                                                dition to a height field is to store the offset vector function
                                                                         D(u,v). A bump map texture that represents normal perturba-
                           Equation 5                                    tions this way is called an offset vector bump map or simply an
                                                                         offset map.
When analytical partial derivatives are not available for P and
F, the partial derivatives in Equation 5 can be approximated             2.3     Vector Rotation Bump Maps
using finite differences.                                                Blinn’s second geometric interpretation of Equation 5 treats the
Equation 5 computes the perturbed surface normal required for            normal perturbation as vector rotation. N' can be generated by
bump mapping, but the computations required are too expen-               rotating N along an axis in the tangent plane of the surface.
sive for direct per-fragment evaluation at hardware rendering            This axis vector is the cross product of N' and N. Because N,
rates. Additionally, the normal vector as used in lighting equa-         N', and D are all in the same plane
tions must be normalized, so N' requires normalization. More
efficient approaches to compute normalized N' are required.
                                                                                      N × N' = N × (N + D) = N × D
Blinn gives two different geometric interpretations of N'.               Expanding D in the N×D expression above using Equation 7
These two interpretations lead to two different ways to repre-           leads to



                                                                     3
GDC 2000: Advanced OpenGL                                                 A Practical and Robust Bump-mapping
Game Development                                                                    Technique for Today's GPUs
         ∂F     ∂P   ∂F          ∂P                               A)                    L1
            N×N×  −      N ×  N × 
         ∂u     ∂v   ∂v          ∂u                                                                  N            L1 • N > 0
N × N' =
                        N                                                                                                 L2 • N < 0

This can be rewritten using the vector identity Q×(R×S) =                          L2
R(Q•S) – S(Q•R) and the facts that N•∂P/∂v = N•∂P/∂u = 0                           self-shadowed
because of Equation 1 and that N•N=|N|2. The simplifications
lead to
                                                                          B)
                    ∂F ∂P ∂F ∂P                                                       N               N’                L • N’ > 0
        N × N' = N       −       = NA                                                                                   L•N<0
                    ∂v ∂u ∂u ∂v 
                                                                                                                 L
                           Equation 8
                                                                                                         self-shadowed due
where                                                                                                    to N but not N’
                          ∂F ∂P ∂F ∂P
                   A=          −                                                       Figure 4. Self-shadowing situations.
                          ∂v ∂u ∂u ∂v
The vector A is perpendicular to the gradient vector of F, i.e.
                                                                       After a perturbed normal is computed for a given fragment, the
(∂F/∂u, ∂F/∂v), when expressed in the tangent plane coordinate
                                                                       perturbed normal and other lighting parameters are fed to a per-
system with basis vectors ∂P/∂v and ∂P/∂u. This means A acts           fragment lighting model.
as an axis that tips N “downhill” due to the sloping (i.e., the
gradient) of F. So the perturbed surface normal N' is the result       Because rotations do not change the length of a vector, one
of a rotation around the A axis.                                       consequence of Equation 9 is that the resulting normal is nor-
                                                                       malized and therefore immediately usable in lighting computa-
The next task is to determine the angle of rotation. Since             tions.
|N|A= N×D by Equation 8 and N is perpendicular to D then
                                                                       2.4     Bumped Diffuse Lighting
                        N×D = N D                                      Diffuse lighting interactions are typically modeled with a
                                                                       lighting model based on Lambert’s law. This pseudo-law says
So Equation 8 implies that
                                                                       that surfaces uniformly reflect incident light. The perceived
                             D=A                                       intensity of a surface that obeys Lambert’s law and that is illu-
                                                                       minated by a single point light source is computed as
By noting that N, D, and N' form a right triangle, the angle of
the perturbation rotation around A is θ where                                  I   lambert
                                                                                             = I ambient + k diffuse max(0, L • N )
                                   N       N
                      tan(θ ) =        =                                                             Equation 10
                                   D       A                           Iambient is the ambient perceived intensity, kdiffuse is the percent-
This is illustrated in Figure 3.                                       age of reflected diffuse light, L is the normalized light vector
                                                                       and N is the normalized surface normal vector.
So in addition to height fields and offset vector maps, a third
way to store a bump map is encoding normal perturbations as a          When discussing lighting equations, the vectors discussed are
(u,v) map of vector rotations. Euler angles, 3x3 rotation              assumed to be normalized unless otherwise noted.
matrices, and quaternions are all reasonable representations for       The subexpression max(0,L•N) forces the light’s perceived
vector rotations. A bump map texture that represents normal            diffuse intensity to zero if L•N is negative. This clamping
perturbations this way is called a normal perturbation map or          corresponds to the situation when the light and the viewer are
simply a normal map.                                                   on opposite sides of the surface tangent plane. This is shown in
If R(u,v) is such a normal perturbation map, then                      Figure 4-A. In this situation, the point on the surface is said to
                                                                       “self shadow.” Clamping also avoids the nonsensical contribu-
                   N'                                                  tion of negative reflected light.
                      = N (u , v) ⊗ R(u, v )
                   N                                                   2.4.1       Bumped Diffuse Self-shadowing
                                                                       When bump mapping, there are really two surface normals that
                           Equation 9                                  should be considered for lighting. The unperturbed normal N
                                                                       is based on the surface’s large-scale modeled geometry while




                                                                   4
GDC 2000: Advanced OpenGL                                                  A Practical and Robust Bump-mapping
Game Development                                                                     Technique for Today's GPUs

                                                                                                    ∑ ( kdiffuse sself max(0, L • N'i ) )
the perturbed N' is based on the surface’s small-scale micro-                                     1 n
structure.                                                             I lambert = I ambient +
Either normal can create self-shadowing situations. Figure 4-B
                                                                                                  n i =1
shows a situation where the perturbed normal is subject to
illumination based the light direction, i.e. when L•N' is posi-                                      Equation 13
tive. However, the point on the surface arguably should not            In conventional texture mapping, pre-filtering of the discrete
receive illumination from the light because the unperturbed            samples within a texture map is applicable because the
normal indicates the point is self-shadowed due to the surface’s       texture’s color contribution can be factored out of the shading
large-scale geometry.                                                  computation. Such an approach is not immediately applicable
To account for self-shadowing due to either the perturbed or           to Equation 11 because the subexpression max(0,L•N') is not a
unperturbed surface normal, Equation 10 can be rewritten as            linear expression.
                                                                       Unfortunately, direct application of Equation 13 is impractical
   I   lambert
                 = I ambient + k diffuse s self max(0, L • N' )        for interactive hardware rendering so some pre-filtering scheme
                                                                       for bump maps is required.
                                 Equation 11                           The reason that the subexpression max(0,L•N') cannot be fac-
where                                                                  tored out is solely due to the self-shadow clamping. If we
                                                                       simply ignore self-shadow clamping and assume that L and sself
                                   1, L • N > 0                        are uniform over the pixel’s footprint in bump map space, then
                      s self =
                                   0, L • N ≤ 0                         1 n                                                  1 n    
Without this extra level of clamping, bump-mapped surfaces
                                                                         ∑
                                                                        n i=1
                                                                              (Kdiffuse sself L • N'i ) = kdiffuse sself L •  ∑N'i 
                                                                                                                              n i=1 
can show illumination in regions of the surface that should be
self-shadowed based on the vertex-specified geometry of the            Assuming that L and sself are uniform implies that N is uniform.
model.                                                                 Hardware renderers only have a single N vector available per-
                                                                       pixel because N is interpolated at pixel resolution so assuming
In practice, the step function definition of sself shown above         that N is uniform over a pixel is a practical assumption. L can
leads to temporal aliasing artifacts. During animation, pixels         also assumed to be uniform over the pixel if the light is direc-
along the geometric self-shadowing boundary of bump-mapped             tional. Even in the case of a positional light, the light would
surfaces may pop on and wink off abruptly. Modifying sself to          have to be extremely close to the surface for L to vary signifi-
make a less abrupt transition can minimize this aliasing arti-         cantly.
fact. For example:
                                                                       Arguably self-shadowing of individual perturbed normals can
                          1,                     L•N > c               be safely ignored under many circumstances if we simply clamp
                                                                       to zero the dot product of L with the averaged N'. This
          sself =      1 (L • N ),             0 <L • N≤ c             assumption correctly handles two very important cases. These
                        c
                          0,                    L•N ≤0                 two cases are when all and when none of the perturbed normals
                                                                       are self-shadowed. A situation where the assumption is very
                                                                       poor requires an extreme distribution of perturbed surface nor-
                                 Equation 12                           mals that is unlikely if N' is generated from a height field with
This version of sself uses a steep linear ramp to transition           adequate resolution.
between 0 and 1. When c=0.125, this modified sself is effective        Appreciating the assumptions suggested above, a reasonable
at minimizing popping and winking artifacts and is straightfor-        bump map pre-filtering scheme for a diffuse lighting model is
ward for hardware implementation.
                                                                                                               1 n
2.4.2       Bump Map Filtering for Diffuse Lighting                                            N' filtered =     ∑ N'i
                                                                                                               n i =1
Keep in mind that Equation 11 assumes that the L and N'
vectors are normalized to unit length. The equation also
assumes a single unperturbed normal and a single perturbed                                           Equation 14
surface normal. In practice, a pixel’s bump map footprint              Then the perceived intensity of the surface is computed as
covers a region of the bump map. Assuming a discrete bump
map representation, the pixel’s intensity should be an average
                                                                       I   lambert
                                                                                     = I ambient + k diffuse sself max(0, L • N' filtered )
of Equation 11 over the collection of perturbed normals within
the pixel’s bump map footprint. Assuming a discrete collection
of n perturbed normals within a given pixel footprint and equal                                      Equation 15
weighting of the samples, Equation 11 becomes                          Equation 15 matches Equation 11 except that N' is replaced by
                                                                       N'filtered. Note that N'filtered is not generally normalized. Re-
                                                                       normalizing N'filtered might seem reasonable and has been sug-
                                                                       gested in the literature [21], but not renormalizing when com-



                                                                   5
GDC 2000: Advanced OpenGL                                                 A Practical and Robust Bump-mapping
Game Development                                                                    Technique for Today's GPUs
puting a surface’s perceived diffuse intensity is actually more        The Phong model [20] for a single point light source is
correct.
                                                                       I ambient    = I ambient
Consider the dimpled surface of a golf ball viewed from a dis-
tance (assume golf balls are Lambertian for a moment). Also                           + k diffuse max( 0, L • N)
consider a smooth Lambertian ball of the same size viewed
                                                                                                                                 shininess
from the same distance. Due to its dimpled surface, the per-                                                             R
ceived intensity of the golf ball should be dimmer than the per-                        + k specular s self   max  0, L • 
                                                                                                                  
ceived intensity of the smooth ball.                                                                                     R
                                                                                                                           
The brute force filtering in Equation 13 correctly models this
dimming of bumpy diffuse surfaces. A robust bump map pre-                                         Equation 17
filtering scheme should also reproduce this effect.
                                                                       where R is the reflected view vector defined as
So consider what happens when Equation 14 is used to filter a
bump map. If the bump map is indeed “bumpy,” a filtered                                  R = V − 2NT ( N • V )
collection of sampled perturbed normals will point in varying
directions though all will be unit length. Averaging these                                        Equation 18
varied normals produces a vector with a length that must be
less than one. Similarly, consider what happens when Equation          Both models assume the vectors N, L, and V are normalized.
14 is used to filter a “flat” bump map. A flat bump map                Both models use exponentiation by a shininess exponent to
implies that N=N'=N'filtered so N'filtered is unit length every-       model specular highlights. Both models use sself to avoid the
where.                                                                 specular contribution from contribution when the light is self-
                                                                       shadowed.
Under otherwise identical circumstances, the filtered “bumpy”
bump map correctly produces a dimmer perceived intensity               2.5.1       Blinn Bumped Specular Lighting
than the filtered “flat” bump map.                                     Blinn’s original bump-mapping scheme assumes the Blinn
Note that if N'filtered is renormalized then bumpy diffuse             lighting model. The Blinn model is both less expensive to
surfaces incorrectly appear too bright.                                compute and more physically plausible than the Phong model.
                                                                       Moreover, the half-angle vector is independent of N so substi-
This result suggests that linear averaging of normalized
                                                                       tuting a perturbed normal N' into the lighting model is straight-
perturbed normals is a reasonable filtering approach for the
                                                                       forward.
purpose of diffuse illumination. It also suggests that if bump
maps are represented as perturbed normal maps then such                The Blinn lighting model assumes that N (or N' when bump
normal maps can be reasonably filtered with conventional               mapping) is normalized. For this reason, the Blinn model
linear-mipmap-linear texturing hardware when used for diffuse          works well in conjunction with a bump map encoded as a
lighting.                                                              normal map because such maps generate normalized perturbed
                                                                       normals (the rotation of a normalized vector remains normal-
2.5     Bumped Specular Lighting                                       ized). However, using the Blinn model with an offset map
Bump-mapped specular lighting interactions are typically               requires a per-pixel renormalization.
modeled with either the Blinn or Phong lighting models. Both
                                                                       The Blinn model similarly assumes that L and H are normal-
are empirical models.
                                                                       ized per-pixel.
The Blinn model [3] for a single point light source is
                                                                       When computing H•N', arguably for self-shadowing reasons,
 I ambient   = I ambient                                               the specular contribution should be forced to zero if the specu-
                                                                       lar contribution computed with the unperturbed normal, i.e.
               + k diffuse max( 0, L • N)                              H•N, goes negative. This effect can be folded into the specular
                                                                       version of the sself term for Equation 16.
                 + k specular s self max(0, H • N ) shininess
                                                                       2.5.2       Phong Bumped Specular Lighting
                          Equation 16                                  The Phong model has several interesting advantages despite its
                                                                       additional complexity. The reflection vector R is a function of
where H is the half-angle vector defined as                            the surface normal so the Phong model requires a per-pixel
                                                                       reflection vector computation. However, once the reflection
                               L+V
                        H=                                             vector is computed, it can be used to access a cube map texture
                               L+V                                     encoding the specular illumination.
                                                                       Accessing a cube map has three noteworthy advantages. First,
V is the normalized view vector (the vector from the surface
                                                                       the cube map avoids the need to renormalize R per-pixel.
position to the eye position).
                                                                       Second, the exponentiation can be encoded into the cube map.
                                                                       Moreover, the object’s filtered environment can be encoded
                                                                       into the cube map to support so-called “bumped environment
                                                                       mapping.” Third, as noted by Voorhies [27], the normal vector



                                                                   6
GDC 2000: Advanced OpenGL                                                  A Practical and Robust Bump-mapping
Game Development                                                                     Technique for Today's GPUs
N need not be normalized if Equation 18 is rewritten to multi-          supposes some statistical bumpiness on a scale smaller than
ply both terms by the length of the unnormalized normal vector          even the bump map.
squared. R then can be computed as                                      Fournier [10] proposed a pre-filtering method for normal maps
              R = V ( N • N ) − 2N ( N • V )
                                         T                              that substitutes a small set of “Phong peaks” from a larger
                                                                        sample of perturbed normals to be filtered. The perceived
where N is not necessarily normalized. This approach works              specular contribution is then approximated as a weighted sum
well when the bump map is encoded as an offset map because              of the smaller number of Phong peaks. The approximation is
such maps do not guarantee normalized perturbed normals
                                                                                                                         max (H • N j )
                                                                        1 n                                    m

                                                                          ∑ max (0, H • Ni )          ≅      ∑w
(refer back to Equation 6).                                                                 shininess                                     ej
                                                                                                                     j
The advantages of the Phong model for bump mapping should               n i =1                                j =1
not be overstated though. The technique requires a bump map
texture access and a subsequent dependent cube map texture
access. When implemented in hardware, expensive latency                                          Equation 20
fifos are needed to effectively hide the memory latency of the
second dependent texture access. Because the perturbed                  where m is the number of Phong peaks, wj is the weighting for
normals and the specular cube map will not be oriented in the           peak j, Nj is the normalized direction of peak j, and ej is the
same coordinate system, a normal coordinate system transfor-            exponent for peak j. Fournier suggests fitting the Phong peaks
mation is required. Ideally, this transform should be updated           using an expensive non-linear least-squares approach.
per-pixel to avoid artifacts. The specular cube map assumes             Fournier’s approach is poorly suited for hardware implementa-
the specular illumination comes from an infinite environment.           tion. Each peak consists of at least four parameters: a weight,
This means local lights, attenuation, and spotlight effects are         an exponent, and a direction (θ,φ). Fournier also suggests that
not possible though an unlimited number of directional light            as many as seven peaks may be required for adequate recon-
sources can be encoded into a specular cube map. Good pre-              struction and multiple sets of peaks may need to be averaged
filtering of a specular cube map, particularly for dull surfaces,       for each pixel.
is expensive. Likewise, changing the lighting configuration or
                                                                        Schilling [23] presented another approach that is more amena-
environment requires regenerating the cube map. Each mate-
                                                                        ble to hardware implementation yet still out of reach for today’s
rial with a unique shininess exponent requires a differently pre-
                                                                        available hardware resources. Schilling proposes the construc-
filtered specular cube map. Saving the expense of renormali-
                                                                        tion of a roughness map that encodes the statistical covariance
zation of the perturbed normal is only a true advantage if the
                                                                        of perturbed normals within a given pixel footprint. Schilling’s
diffuse illumination can also be computed with an unnormal-
                                                                        approach proposes a considerably more tractable representation
ized perturbed normal too. The obvious way to accomplish this
                                                                        of the normal distribution than Fournier’s more expensive and
is with a second diffuse cube map, particularly if the specular
                                                                        comprehensive approach.
cube map encodes multiple directional lights. Unfortunately, a
diffuse cube map requires an additional dependent cube map              The covariance provides enough information to model aniso-
texture fetch unit or requires a second rendering pass.                 tropic reflection effects. During rendering, information from
                                                                        the roughness map is used for anisotropic filtering of a specular
2.5.3    Bump Map Filtering for Specular Lighting                       cube map or as inputs to a modified Blinn lighting model. A
Both models compute the diffuse contribution based on a                 more compact roughness scheme is possible by limiting the
Lambertian model identical to the previous subsection. There-           roughness map to isotropic roughness.
fore, the previous analysis to justify pre-filtering of perturbed
                                                                        Without a tractable approach to pre-filtering bump maps for
normals for the diffuse contribution still applies.
                                                                        specular illumination given today’s available hardware
However, the exponentiation in the specular contribution                resources, we are left with few options. One tractable though
makes a similar attempt to factor L outside the specular dot            still expensive option is simply to apply Equation 19 for some
product rather dubious. Assuming a discrete collection of n             fixed number of samples using multiple passes, perhaps using
perturbed normals within a given pixel footprint and equal              an accumulation buffer to accumulate and weight each distinct
weighting of the samples, the perceived specular intensity              perturbed normal’s specular contribution.
should be
                                                                        With no more effective option available, we again consider pre-
                       1 n                                              filtering the bump map by simply averaging the perturbed
                      = ∑ max (0, H • N i )
                                           shininess
         I specular                                                     normals within each pixel’s footprint and renormalizing. This
                       n i =1                                           is precisely what we decided was incorrect for diffuse
                                                                        illumination, but in the case of specular illumination,
                           Equation 19                                  evaluating Equation 16 or Equation 17 without a normalized
                                                                        normal is something to be avoided to have any chance of a
The conventional interpretation of the exponentiation is that it        bright specular highlight. We can at least observe that this
models an isotropic Gaussian micro-distribution of normals.
                                                                        approach is the degenerate case of Equation 20 where m equals
The exponent is often referred to as a measure of the surface’s
                                                                        1 though there is no guarantee that the average perturbed
roughness or shininess. In the context of bump mapping, this
                                                                        normal is a remotely reasonable reconstruction of the true
                                                                        distribution of normals.



                                                                    7
GDC 2000: Advanced OpenGL                                                  A Practical and Robust Bump-mapping
Game Development                                                                     Technique for Today's GPUs
The single good thing about this approach is that there is an           Lighting results can be computed in an arbitrary 3D coordinate
opportunity for sharing the same bump map encoding between              system as long as all the vector parameters involved are
the diffuse and specular illumination computations. The                 oriented with respect to the same single coordinate system.
diffuse computation assumes an averaged perturbed normal that           This freedom allows us to select the most convenient coordi-
is not normalized while the specular computation requires the           nate system for lighting. Tangent space is just such a local
same normal normalized. Both needs are met by storing the               coordinate system. The orthonormal basis for the tangent space
normalized perturbed normal and a descaling factor. The                 is the normalized unperturbed surface normal Nn, the tangent
specular computation uses the normalized normal directly while          vector Tn defined by normalizing ∂P/∂u, and the binormal Bn
the diffuse computation uses the normalized normal but then             defined as Nn×Tn. The orthonormal basis for a coordinate
fixes the diffuse illumination by multiplying by the descaling          system is also sometimes called the reference frame.
factor to get back to the unnormalized vector needed for
                                                                        As will be demonstrated, it is convenient to rewrite D in
computing the proper diffuse illumination. If N'filtered is
                                                                        tangent space. Equation 7 can be simplified by writing it in
computed according to Equation 14, then the normalized
                                                                        terms of Nn and Bn so that
version is
                                                                                          ∂F       ∂P  ∂F ∂P
                             N' filtered                                             D=       Nn ×    −      Bn
                                                                                          ∂u       ∂v  ∂v ∂u
                             N' filtered
and the descaling factor is simply the length of N'filtered.                                     Equation 21
                                                                        As observed by Peercy [21], ∂P/∂v is in the plane of the tangent
2.6     Bump Map Representations                                        and binormal by construction so ∂P/∂v can be expressed as
So far, we have discussed three distinct representations of
bump maps but have not been very concrete with how each                             ∂P        ∂P             ∂P 
bump map representation is stored as a texture map. The three                         =  Tn •    Tn +  B n •    B n
representations are height fields, offset maps, and normal                          ∂v        ∂v             ∂v 
maps. Each representation corresponds to one of the three               Therefore
equations developed previously for computing a perturbed
surface normal. Height fields are used with Equation 5. Offset                         ∂P        ∂P              ∂P 
                                                                                Nn ×     =  Tn •    B n −  B n •    Tn
maps are used with Equation 6. Normal maps are used with
Equation 9.
                                                                                       ∂v        ∂v              ∂v 
                                                                        because Bn = Nn × Tn and -Tn = Nn × Bn.
2.6.1     Height Fields
This is the most straightforward representation and one that is         By substituting this result into Equation 21, D becomes
fairly easy to author. A height field bump map corresponds to a
                                                                                    ∂F       ∂P            ∂P   ∂F ∂P
                                                                            D=           Tn • B n −  B n •
                                                                                                                 Tn  −   Bn
                                                                                                               ∂v   ∂v ∂u
one-component texture map discretely encoding the bivariate
function F(u,v) described in Section 2.1.                                           ∂u       ∂v                   
Painting a gray-scale image with a 2D-paint program is one
                                                                                                 Equation 22
way to author height fields. Rendering bumpy surface with
geometry and then reading back the resultant Z values from a            This expresses D in a form not explicitly dependent on Nn.
depth buffer is another means to generate height fields.                Because D is expressed in tangent space, we can assign a
Equation 5 actually uses the partial derivatives of F rather than       convenient orientation to Nn, Tn, and Bn such as Tn=[1,0,0],
F directly. Finite differencing can approximate these partial           Bn=[0,1,0], and Nn=[0,0,1]. This makes is it very simple to
derivatives. This bump mapping approach is called texture               compute N' in tangent space:
embossing and is further described in Section 3.1.                                  N' = N + D = [0,0, c ] + D = [a, b, c ]
2.6.2     Vector Offset Maps
Instead of computing the partial derivatives at rendering time,                                  Equation 23
an offset map is constructed by pre-computing the derivatives           where
from a height field and then encoding the derivatives in a tex-
ture map.
This corresponds to encoding D(u,v) from Equation 7 into a
texture. In general D is a 3D vector, but because D is orthogo-
nal to N, an offset map can be encoded as a two-component
texture if we assume some way to orient D with respect to N.
Typically ∂P/∂u is used to orient D. When used to orient D,
the normalized version of ∂P/∂u is called the tangent vector
and here labeled Tn.




                                                                    8
GDC 2000: Advanced OpenGL                                                 A Practical and Robust Bump-mapping
Game Development                                                                    Technique for Today's GPUs
                     ∂F       ∂P                                                                  ∂F      1
              a=−        Bn •                                                                a=−
                     ∂u       ∂v                                                                  ∂u      k
                   ∂F       ∂P  ∂F ∂P                                                             ∂F      1
              b=       Tn •    −                                                             b=−
                   ∂u       ∂v  ∂v ∂u                                                             ∂v      k
                                                                                               c =1
                   ∂P ∂P
              c=     ×
                   ∂u ∂v                                                                        Equation 25
                                                                       If offset maps are used this way for bump mapping, the prob-
                         Equation 24                                   lem remains that N' is not normalized. As described in Section
Instead of having to encode D as a 3D vector requiring a three-        2.5.2, this is not an issue if the diffuse and specular contribu-
                                                                       tions are computed using a cube map texture. However, cube
component texture, this results means that the values of a and
                                                                       map textures cannot be reasonably oriented in tangent space
b can be encoded in a two-component offset map. The value of
                                                                       because tangent space varies over the surface so the tangent
c is independent of the height field F and therefore does not
                                                                       space N' must be transformed by a rotation into the cube map’s
need to be stored in the bump map. Instead c must be supplied
                                                                       coordinate system (typically, world space).
from the surface parameterization during rendering. Often
however c is assumed constant over the surface as will be              Because the normal component of D in tangent space is zero, a
developed below.                                                       2x3 matrix is sufficient to rotate D. Given an unperturbed
                                                                       normal vector oriented in the cube map’s coordinate system,
This new form of D is still inconvenient because D is still
                                                                       the perturbed normal is computed as
dependent on the surface partial derivatives. This dependency
means that the bump map texture is still effectively tied to the                 N'x = N x + a A 00 + b A 01
surface parameterization. This dependency means that, in gen-
eral, the encoding of the bump map cannot be decoupled from                      N' y = N y + a A10 + b A11
the surface. This makes it difficult to author a single bump
map texture that can be applied to multiple objects. In princi-                  N' z = N z + a A 20 + b A 21
ple, this requires a unique bump map texture for each distinct
bump-mapped surface even when the surfaces share the same                                       Equation 26
height field. Texture memory is typically a limited resource so
                                                                       Though the matrix A is constant in the case of a flat plane, A
it is very desirable to break this dependency.
                                                                       varies over a curved surface because tangent space on a curved
As suggested by Peercy [21], if we are willing to make some            surface varies over the surface. Ideally, the rotation matrix
assumptions about the nature of the parameterization of the            should be updated per-pixel and be scale-invariant so as not to
surface P and work in tangent space, we can remove the                 change the length of D.
dependency of D on the surface parameterization. Consider
                                                                       Based on the discussion so far, ∂F/∂u and ∂F/∂v are encoded
when the surface parameterization is locally that of a square
                                                                       directly within an offset map. These differentials are signed
patch. This implies that ∂P/∂u and ∂P/∂v are orthogonal. This
                                                                       values so the texture filtering hardware must be capable of
means that ∂P/∂u•∂P/∂v = Tn•∂P/∂v = 0 and that ∂P/∂u and
                                                                       filtering signed values to support offset maps.
∂P/∂v are equal in magnitude, i.e. |∂P/∂u | = |∂P/∂v|.
Fortunately, this assumption is acceptable for many important          Additionally, the differentials may vary over a potentially un-
surfaces such as flat polygons, spheres, tori, and surfaces of         bounded range, particularly when very steep bump maps are
revolution.                                                            encoded. In general, hardware texture formats typically have a
                                                                       limited range, perhaps negative one to positive one for signed
By making the square patch assumption, D can be further                textures. Given the existence of the matrix A, one way to cope
simplified. Based on the square patch assumption, Equation 22          with the potentially unbounded range of differentials is to
becomes                                                                compose the rotation in Equation 26 with a uniform scale that
                        ∂F        ∂F                                   extends the effective range of the offset map. This combined
                 D=−       k Tn −    k Bn                              transform can then be loaded into the matrix A described
                        ∂u        ∂v                                   above. The scale required varies depending on the maximum
where                                                                  differential stored in any given offset map.

                         ∂P ∂P                                         All this suggests that a signed two-component offset map with
                      k=    =                                          limited range is reasonable to support bump mapping using
                         ∂u   ∂v                                       offset maps. Yet to account for reasonable pre-filtering for
                                                                       diffuse illumination as described in Section 2.4.2, an additional
and then Equation 24 can be rewritten as                               unsigned component should also be provided to store the
                                                                       average perturbed normal length when pre-filtering an offset
                                                                       map. In a bump-mapping scheme using diffuse cube maps, this
                                                                       additional component should be modulated with the diffuse



                                                                   9
GDC 2000: Advanced OpenGL                                                       A Practical and Robust Bump-mapping
Game Development                                                                          Technique for Today's GPUs
cube map result. Otherwise, distant or small diffuse bump-                                              (a, b, c)          1
mapped surfaces will appear too bright.                                                    N 'nc =                     +
                                                                                                     2 a2 + b2 + c2        2
2.6.3      Normal Perturbation Maps
Much of the mathematics used to develop the offset map also                                           Equation 28
applies to normal perturbation maps, particularly the concept of
tangent space.     The main difference between the two                     After filtering when rendering, each range-compressed normal
approaches is that normal maps encode rotations instead of                 is then expanded back to its true negative one to one range for
offsets. The primary advantage of using rotations is that then             use in the lighting model.
the perturbed normal remains normalized.                                   When pre-filtering the three-component vector portion of the
Normal maps can be represented in a number of different                    pre-filtered normal map, each averaged vector should be
equivalent representations that all are simply different ways to           renormalized. This renormalized vector is used for computing
encode rotations. Quaternions, 3x3 matrices, and Euler angles              specular illumination.
are all possibilities.                                                     In addition to the normalized three-component vector in the
Consider representing rotations as 3x3 matrices.               Then        normal map, an additional fourth component can store the un-
Equation 9 can be rewritten more concretely as                             signed averaged normal length before renormalization. This is
                                                                           simply
                                               R00 R01 R02 
[N'                     ] [                      ]
                                          N z  R10 R11 R12                                N 'len = aavg + bavg + cavg
                                                                                                      2      2      2

      x   N' y        N'z = N x N y                        
                                               R20 R21 R22 
                                                                         After the diffuse dot product is computed, the diffuse illumina-
                                                                           tion is then modulated by N'len. This prevents heavily filtered
But this entire matrix multiply can be replaced with a direct              diffuse surfaces from looking too bright.
encoding of the perturbed vector if the computation is done in             When the range-compressed vector form is used, this four-
tangent space! When N equals [0,0,1], then the above matrix                component normal map can be stored exactly like an 8-bit per
multiply simplifies to                                                     component conventional RGBA texture so existing texture
            [N'   x    N' y      ]
                              N ' z = [R02       R12   R22 ]               fetching and filtering hardware needs no modification for this
                                                                           type of normal map.
This makes tangent space an extremely efficient coordinate
system for bump mapping computations.                                      3      PREVIOUS HARDWARE
The same mathematics developed in the previous section for                        APPROACHES
computing perturbed normals applies to normal maps except                  The various hardware bump-mapping implementations
that normal maps must renormalize the perturbed normal. The                described in the literature use different variations on the prin-
perturbed normal in Equation 23 is not normalized, but renor-              ciples presented in Section 2.
malizing it results in
                                                                           3.1      Texture Embossing
                        N 'n =
                                     [a, b, c]                             Texture embossing [22][24] is one of the simplest and most
                                                                           limited formulations of bump mapping. The fact that the tech-
                                 a2 + b2 + c2                              nique can be accelerated with minimal hardware support has
                                                                           made texture embossing the basis for more than one hardware
                              Equation 27                                  vendor’s claim to support bump mapping “in hardware.”1 Un-
                                                                           fortunately, texture embossing has a number of significant
Perturbed normals can be encoded using either the surface-
                                                                           limitations that limit the technique’s practical application.
dependent [a,b,c] from Equation 24, or the surface-independent
[a,b,c] from Equation 25 by making the square patch assump-                Texture embossing uses a height field representation as
tion.                                                                      described in Section 2.6.1 for its bump map representation.
                                                                           The height field for the surface to be bump mapped is stored in
This requires a signed three-component normal map. Each
                                                                           a scalar texture. Texture embossing numerically determines
component of the normal map is guaranteed to be within the
                                                                           the partial differentials necessary for bump mapping from the
negative one to positive one range. To avoid hardware support
                                                                           height field texture during rendering.
for signed texture filtering, the components can be “range-com-
pressed” into the zero to one range typical of conventional                The bump-mapped diffuse lighting contribution requires com-
texture hardware before download as part of the normal map                 puting L•N'. Texture embossing assumes that L and N' are
construction process. In this case, the range-compressed                   oriented in tangent space (as developed in Section 2.6.2). Then
perturbed normal is encoded as                                             N' can be expressed as in Equation 23. For simplicity and to


                                                                           1
                                                                               NVIDIA’s claim that the RIVA TNT and TNT2 graphics chips
                                                                               support hardware bump mapping is based on single-pass
                                                                               hardware support for texture embossing.


                                                                      10
GDC 2000: Advanced OpenGL                                                    A Practical and Robust Bump-mapping
Game Development                                                                       Technique for Today's GPUs
eliminate Equation 23’s dependency on the surface parameter-
ization, texture embossing makes the square patch assumption.
So by combining Equation 23 and Equation 25                                                                         +1        (3, 1.5, 0.9)
                                                                                                          +y

              ∂F 1               ∂F 1  
        N' =  −                 −      1                                                             +z

              ∂u k               ∂v k  
                                                                                                                              +1
                                                                                           -x
                                                                                                                         +x
                                                                                                -z             -1
Unfortunately, the N' above is not normalized, but if we
assume that N'x and N'y are small, then N' will be almost nor-                                       -y              -1
malized. We can assume that k is 1 if we scale the height field
appropriately. By making these two assumptions, the diffuse
computation becomes
                                                                           Figure 5. The unnormalized direction vector (3, 1.5, 0.9)
                               ∂F      ∂F                                 pierces the positive X face of the cube map and projects to
            L • N' = L z − L x    − Ly
                               ∂u      ∂v                                            the 2D position (0.5, 0.3) on the face.
                                                                          ment functionality such as NVIDIA’s NV_texture_env_-
                          Equation 29                                     combine4 extension [17] can provide the signed math
                                                                          operations to evaluate Equation 29. When dual-texturing
The two terms with partial differentials can be approximated
                                                                          hardware is unavailable, texture embossing can be
numerically using finite differences from the height field. So
                                                                          implemented as a multi-pass algorithm using either subtractive
       ∂F      ∂F                                                         frame buffer blending or the accumulation buffer to perform the
− Lx      − Ly    ≅ F (u, v ) − F (u + L x ∆u , v + L y ∆v )
       ∂u      ∂v                                                         necessary signed math.
                                                                          Ideally, the texture coordinate displacements and Lz should be
                          Equation 30                                     computed per-pixel based on a normalized L. In practice, these
                                                                          parameters are computed per-vertex and then linearly interpo-
Evaluating Equation 30 requires differencing two height field
                                                                          lated per-pixel. When surfaces are tessellated coarsely relative
texture accesses. The height field texture resolution deter-
                                                                          to the surface’s degree of curvature, linear interpolation will
mines the ∆u and ∆v displacements. For example if the height
                                                                          produce objectionable artifacts due to the denormalization of L.
field is a 128x128 texture, then ∆u and ∆v are both 1/128,
                                                                          Typically, the CPU is responsible for computing the tangent
enough to shift by exactly one texel in each direction. Scaling
                                                                          space vectors and texture coordinate displacements required for
by the light direction’s Lx and Lv components further reduces
                                                                          texture embossing. The per-vertex math required for comput-
these displacements. Bilinear filtering is required because the
                                                                          ing the texture coordinate displacements is however uniform
technique relies on texture coordinate displacements less than
                                                                          enough that it can be off-loaded to specialized per-vertex trans-
the scale of a texel.
                                                                          form hardware. The GeForce and Quadro GPUs provide such a
The result of Equation 30 is a slope and therefore is a signed            texture    coordinate     generation     mode     through     the
quantity. Adding this signed quantity to Lz computes L•N'.                NV_texgen_emboss extension [15] to support texture em-
Some intuition for embossing can be gained by considering a               bossing.
few basic scenarios. Consider the case of a flat height field. In         Texture embossing has several other issues. The basic
this case, F is constant. This means the finite difference of F is        embossing algorithm does not account for bumped surfaces
always zero. Therefore N' = [0, 0, 1]. In this case, L•N' = Lz            facing away from the light direction. This is the situation when
by Equation 29.                                                           Lz is negative. Unfortunately, the finite differencing result
In cases where the surface slopes towards the light, the finite           from Equation 30 may be positive in this case, yet most hard-
                                                                          ware clamps negative color values to zero so the positive
difference in Equation 30 will be positive and L•N' will
                                                                          results from Equation 30 cannot be cancelled by the negative
increase beyond Lz. Likewise, in cases where the surface
                                                                          Lz. Instead, such self-shadowed regions of the surfaces appear
slopes away from the light, the finite difference will be nega-
                                                                          incorrectly lit. One solution is to force the values of Lx and Ly
tive and L•N' will decrease from Lz.
                                                                          to zero at vertices where Lz is negative so Equation 30 must be
One case that does not work correctly is when the light direc-            zero. This must be done with care to minimize transition arti-
tion matches the unperturbed surface normal. In this case, L =            facts.
[0, 0, 1]. Equation 30 is always zero in this case because Lx
                                                                          Texture embossing does not interact well with mipmap filter-
and Lv are zero making the displacement always zero. The
                                                                          ing. The texture displacements are scaled based on the height
value of L•N' is computed incorrectly as merely Lz. This
                                                                          field texture resolution. If ∆u and ∆v are 1/128 and 1/128 for
anomaly results from texture embossing’s failure to normalize
                                                                          the base level 128x128 mipmap and mipmap filtering uses the
N'. In this situation, texture embossed surfaces look flat and
                                                                          32x32 mipmap level, these displacements will be too small for
too bright. In general, the failure to normalize N' exaggerates
                                                                          the finite differencing to approximate a meaningful differential.
the diffuse lighting contribution.
                                                                          Bumpy surfaces rendered with texture embossing and mipmap
The technique’s two height field texture accesses are well                filtering go flat when smaller level mipmaps are used. The
suited for dual-texturing hardware. Extended texture environ-             problem is that texture embossing is tied to a single height field


                                                                     11
GDC 2000: Advanced OpenGL                                                        A Practical and Robust Bump-mapping
Game Development                                                                           Technique for Today's GPUs


                              Point                                  Texture
                           Rasterization                             Fetchi ng

                               Line
                           Rasterization
                                                            Texture
                                                          Environment               Register
                             Polygon                      Applic ati on            Combiners
                           Rasterization                                            Stage #0
                                                         Texture Unit #0
                          Pixel Rectangle                Texture Unit #1            Stage #1
                           Rasterization
                                                                                   Final Stage
                             Bitmap                      Color Sum
                           Rasterization
                                                                                      Coverage
                                                         Fog                         Applic ati on
                                                                                                     Per-fragment
                                                                                                      operations



     Figure 6. The data flow for register combiners and the standard OpenGL fragment coloring operations. The
   register combiners enable selects between the two fragment coloring pipelines. This figure is based on Figure 3.1
                                       from the OpenGL 1.2.1 specification [25].

scale. Without mipmap filtering, the technique results in                   Microsoft includes a bump mapping mechanism in DirectX 6
objectionable aliasing artifacts when mipmapping would                      called BumpEnv [19]. While the inference from the name is
otherwise be helpful.                                                       that the mechanism supports environment-mapped bump map-
While texture embossing is well suited to today’s hardware                  ping, the hardware functionality is really a fairly limited de-
with dual textures and extended texture environment function-               pendent texture mechanism. Two sets of texture coordinates
ality, the technique suffers from several significant issues. The           are supported. When BumpEnv is in use, a 2D perturbation
technique is not robust and has failed to be adopted by applica-            texture is accessed using the first set of texture coordinates.
tions beyond demos.                                                         This fetch returns a signed perturbation (dx,dy). Then this
                                                                            signed perturbation is added to the second set of texture coordi-
3.2    Dedicated Hardware Schemes                                           nates. A 2x2 matrix then transforms the perturbed texture
Graphics hardware researchers have proposed a variety of                    coordinates. Lastly, the perturbed and transformed texture
approaches for implementing bump mapping through dedicated                  coordinates are used to access a second 2D texture containing
hardware schemes. This section briefly reviews the literature               color data.
on other hardware bump mapping approaches.                                  The BumpEnv mechanism’s claim to implement bump mapping
Evans and Sutherland and SGI have both proposed bump-                       is somewhat tenuous. If the approach supported a 2x3 matrix
mapping approaches for high-end 3D graphics hardware                        and accessed a cube map texture along the lines of Visa+
[5][21]. Both approaches propose to support bump mapping in                 approach, the bump-mapping claim could be better justified.
the context of hardware that supports per-fragment lighting                 As it exists today, the BumpEnv functionality can be consid-
operations. The SGI technique relies on lighting in tangent                 ered a degenerate form of Visa+ bump mapping with only a
space. The technique described in this paper borrows heavily                single cube map face instead of six faces of two fully populated
from SGI’s notion of tangent space.                                         cube maps. This is not to say that BumpEnv is not useful.
                                                                            Under limited conditions such as flat or relatively flat surfaces
Researchers at the German National Research Center for                      with relatively small perturbations illuminated by only
Information Technology have described several approaches for                directional lights (water outdoors for example), BumpEnv can
implementing hardware bump mapping.             One of their                arguably accomplish bump mapping. However, many of
approaches referred to as Visa+ bump-mapping [1][6] uses                    BumpEnv’s robustness issues are direct results of the corners
vector offset maps to encode the bump map perturbations and                 the approach cuts.
uses two cube maps to determine the respective lighting diffuse
and Phong specular lighting contributions. This is the approach             4     NVIDIA GPU FEATURES
critiqued earlier in Section 2.5.2.                                         The technique described in Section 5 heavily relies on two new
Another approach developed by the same researchers is called                features supported by both the GeForce and Quadro GPUs.
Gouraud bump mapping [7]. This approach bears some simi-                    This section introduces these new features. The first feature is
larities to the technique described in this paper. Both tech-               support for cube map textures. The second feature is a greatly
niques aim for a low-cost solution.


                                                                      12
GDC 2000: Advanced OpenGL                                                     A Practical and Robust Bump-mapping
Game Development                                                                        Technique for Today's GPUs
                                                             RGB Portion                         A lpha Portion



                                            Stage #0         AB+CD, AB, CD                    AB+CD, AB, CD


                             general
                            combiner
                              stages
                                            Stage #1         AB+CD, AB, CD                    AB+CD, AB, CD




                                          Final Combiner

                                                                                                         RGBA
                                                                            AB+(1-A)C+D, G               f ragment

                                            Figure 7. The data flow for register combiner stages.

extended fragment coloring mechanism called the register                    Both OpenGL and Direct3D support cube map texturing
combiners.                                                                  through standard API interfaces. Direct3D added cube map
                                                                            support with its DirectX 7 release. Direct3D and OpenGL
4.1     Cube Map Texturing                                                  share the same arrangement of cube faces with each other and
Cube map texturing is a form of texture mapping that uses an                Pixar’s RenderMan API.
unnormalized 3D direction vector (s,t,r) to access a texture that
                                                                            Cube maps are more flexible than other hardware-accelerated
consists of six square 2D images arranged like the faces of a
                                                                            approaches for texturing based on direction vectors such as
cube centered around a coordinate system origin.
                                                                            sphere maps and dual-paraboloid maps [12]. While sphere
Figure 5 shows how an unnormalized direction vector [3, 1.5,                maps are view dependent, cube maps are view independent.
0.9] is mapped to a 2D location on the correct cube map face.               While dual-paraboloid maps are view independent too, dual-
First, the face that the vector pierces is determined. This is              paraboloid maps require two texture applications instead of the
accomplished by determining which of the vector’s components                single texture application required for cube maps. And both
has the largest magnitude. The greatest magnitude component                 sphere maps and dual-paraboloid maps require a non-linear
and its sign determine the pierced cube map face. There are                 warping of a set of cube faces to construct the required
six possibilities, each corresponding to one of the six cube                textures. Cube maps can obviously use cube face images
faces: +x, −x, +y, −y, +z, and −z. In the case of [3, 1.5, 0.9], the        directly.
largest magnitude is the x component’s value 3.0. The                       Cube map texturing is closely associated with environment
component is positive so the +x face is selected. Second, the               mapping [2][11][27] because the cube face images can capture
remaining two components are divided by the component of the                a complete omnidirectional view of the environment around a
largest magnitude.       This effectively projects these two                point. However, environment mapping is just one application
components onto the selected cube map face. Finally, the two                of cube maps. The bump-mapping technique described in
projected coordinates are scaled and biased depending on the                Section 5 uses cube maps to perform per-fragment normaliza-
selected face to compute a 2D texture coordinate used to access             tion of interpolated light and half-angle vectors.
the texture image for the selected face. From this point on, the
2D texture coordinate is used to access the selected face’s                 Further information about OpenGL programming of cube map
texture image just as if it was a standard 2D texture.                      textures is found in Appendix A.
Cube map texturing hardware performs the face selection, pro-               4.2    Register Combiners
jection, and scale and bias operations per-fragment to access               The GeForce and Quadro register combiners functionality pro-
cube map textures. The most expensive operation in deter-                   vides a configurable (but not programmable) means to deter-
mining the projected 2D texture coordinate on a particular cube             mine per-pixel fragment coloring. When enabled, the register
map face because projection requires a divider. A similar per-              combiners replace the standard OpenGL per-fragment texture
fragment division is required for perspective correct 2D                    environment, color sum, and fog operations with a greatly
texturing. By reusing this single per-pixel divider for both 2D             extended mechanism for coloring fragments. Figure 6 shows
texturing and cube map texturing, the additional required                   this data flow.
hardware to support cube map texturing is nominal.




                                                                       13
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)

Weitere ähnliche Inhalte

Was ist angesagt?

Digital Ortho Image Creation of Hall County Aerial Photos Paper
Digital Ortho Image Creation of Hall County Aerial Photos PaperDigital Ortho Image Creation of Hall County Aerial Photos Paper
Digital Ortho Image Creation of Hall County Aerial Photos Papermpadams77
 
On constructing z dimensional Image By DIBR Synthesized Images
On constructing z dimensional Image By DIBR Synthesized ImagesOn constructing z dimensional Image By DIBR Synthesized Images
On constructing z dimensional Image By DIBR Synthesized ImagesJayakrishnan U
 
Neural Scene Representation & Rendering: Introduction to Novel View Synthesis
Neural Scene Representation & Rendering: Introduction to Novel View SynthesisNeural Scene Representation & Rendering: Introduction to Novel View Synthesis
Neural Scene Representation & Rendering: Introduction to Novel View SynthesisVincent Sitzmann
 
Texture mapping overview
Texture mapping overviewTexture mapping overview
Texture mapping overviewJ Le Rossignol
 
Depth of Field Image Segmentation Using Saliency Map and Energy Mapping Techn...
Depth of Field Image Segmentation Using Saliency Map and Energy Mapping Techn...Depth of Field Image Segmentation Using Saliency Map and Energy Mapping Techn...
Depth of Field Image Segmentation Using Saliency Map and Energy Mapping Techn...ijsrd.com
 
DPI 1 and DPI 2 Texture Mapping
DPI 1 and DPI 2 Texture MappingDPI 1 and DPI 2 Texture Mapping
DPI 1 and DPI 2 Texture MappingMrLawler
 
Satellite image processing
Satellite image processingSatellite image processing
Satellite image processingalok ray
 
Image pre processing - local processing
Image pre processing - local processingImage pre processing - local processing
Image pre processing - local processingAshish Kumar
 
Google Research Siggraph Whitepaper | Total Relighting: Learning to Relight P...
Google Research Siggraph Whitepaper | Total Relighting: Learning to Relight P...Google Research Siggraph Whitepaper | Total Relighting: Learning to Relight P...
Google Research Siggraph Whitepaper | Total Relighting: Learning to Relight P...Alejandro Franceschi
 
Intel ILS: Enhancing Photorealism Enhancement
Intel ILS: Enhancing Photorealism EnhancementIntel ILS: Enhancing Photorealism Enhancement
Intel ILS: Enhancing Photorealism EnhancementAlejandro Franceschi
 
SIGGRAPH ASIA 2012 Stereoscopic Cloning Presentation Slide
SIGGRAPH ASIA 2012 Stereoscopic Cloning Presentation SlideSIGGRAPH ASIA 2012 Stereoscopic Cloning Presentation Slide
SIGGRAPH ASIA 2012 Stereoscopic Cloning Presentation SlideI-Chao Shen
 
Introduction to image contrast and enhancement method
Introduction to image contrast and enhancement methodIntroduction to image contrast and enhancement method
Introduction to image contrast and enhancement methodAbhishekvb
 
Shadow Caster Culling for Efficient Shadow Mapping (Authors: Jiří Bittner, Ol...
Shadow Caster Culling for Efficient Shadow Mapping (Authors: Jiří Bittner, Ol...Shadow Caster Culling for Efficient Shadow Mapping (Authors: Jiří Bittner, Ol...
Shadow Caster Culling for Efficient Shadow Mapping (Authors: Jiří Bittner, Ol...Umbra
 
Spatial enhancement
Spatial enhancement Spatial enhancement
Spatial enhancement abinarkt
 
6 texture mapping computer graphics
6 texture mapping computer graphics6 texture mapping computer graphics
6 texture mapping computer graphicscairo university
 
Geoscience satellite image processing
Geoscience satellite image processingGeoscience satellite image processing
Geoscience satellite image processinggaurav jain
 
texture mapping in computer graphics
texture mapping in computer graphicstexture mapping in computer graphics
texture mapping in computer graphicsTayyaba Jabeen
 

Was ist angesagt? (20)

Digital Ortho Image Creation of Hall County Aerial Photos Paper
Digital Ortho Image Creation of Hall County Aerial Photos PaperDigital Ortho Image Creation of Hall County Aerial Photos Paper
Digital Ortho Image Creation of Hall County Aerial Photos Paper
 
On constructing z dimensional Image By DIBR Synthesized Images
On constructing z dimensional Image By DIBR Synthesized ImagesOn constructing z dimensional Image By DIBR Synthesized Images
On constructing z dimensional Image By DIBR Synthesized Images
 
Neural Scene Representation & Rendering: Introduction to Novel View Synthesis
Neural Scene Representation & Rendering: Introduction to Novel View SynthesisNeural Scene Representation & Rendering: Introduction to Novel View Synthesis
Neural Scene Representation & Rendering: Introduction to Novel View Synthesis
 
Chapter01 (2)
Chapter01 (2)Chapter01 (2)
Chapter01 (2)
 
TerraCognito Overview
TerraCognito OverviewTerraCognito Overview
TerraCognito Overview
 
Texture mapping overview
Texture mapping overviewTexture mapping overview
Texture mapping overview
 
Depth of Field Image Segmentation Using Saliency Map and Energy Mapping Techn...
Depth of Field Image Segmentation Using Saliency Map and Energy Mapping Techn...Depth of Field Image Segmentation Using Saliency Map and Energy Mapping Techn...
Depth of Field Image Segmentation Using Saliency Map and Energy Mapping Techn...
 
DPI 1 and DPI 2 Texture Mapping
DPI 1 and DPI 2 Texture MappingDPI 1 and DPI 2 Texture Mapping
DPI 1 and DPI 2 Texture Mapping
 
Satellite image processing
Satellite image processingSatellite image processing
Satellite image processing
 
Image pre processing - local processing
Image pre processing - local processingImage pre processing - local processing
Image pre processing - local processing
 
Google Research Siggraph Whitepaper | Total Relighting: Learning to Relight P...
Google Research Siggraph Whitepaper | Total Relighting: Learning to Relight P...Google Research Siggraph Whitepaper | Total Relighting: Learning to Relight P...
Google Research Siggraph Whitepaper | Total Relighting: Learning to Relight P...
 
Texture Mapping
Texture MappingTexture Mapping
Texture Mapping
 
Intel ILS: Enhancing Photorealism Enhancement
Intel ILS: Enhancing Photorealism EnhancementIntel ILS: Enhancing Photorealism Enhancement
Intel ILS: Enhancing Photorealism Enhancement
 
SIGGRAPH ASIA 2012 Stereoscopic Cloning Presentation Slide
SIGGRAPH ASIA 2012 Stereoscopic Cloning Presentation SlideSIGGRAPH ASIA 2012 Stereoscopic Cloning Presentation Slide
SIGGRAPH ASIA 2012 Stereoscopic Cloning Presentation Slide
 
Introduction to image contrast and enhancement method
Introduction to image contrast and enhancement methodIntroduction to image contrast and enhancement method
Introduction to image contrast and enhancement method
 
Shadow Caster Culling for Efficient Shadow Mapping (Authors: Jiří Bittner, Ol...
Shadow Caster Culling for Efficient Shadow Mapping (Authors: Jiří Bittner, Ol...Shadow Caster Culling for Efficient Shadow Mapping (Authors: Jiří Bittner, Ol...
Shadow Caster Culling for Efficient Shadow Mapping (Authors: Jiří Bittner, Ol...
 
Spatial enhancement
Spatial enhancement Spatial enhancement
Spatial enhancement
 
6 texture mapping computer graphics
6 texture mapping computer graphics6 texture mapping computer graphics
6 texture mapping computer graphics
 
Geoscience satellite image processing
Geoscience satellite image processingGeoscience satellite image processing
Geoscience satellite image processing
 
texture mapping in computer graphics
texture mapping in computer graphicstexture mapping in computer graphics
texture mapping in computer graphics
 

Ähnlich wie A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)

Presentation dr abeermoh_bahrain_gbforum2012kuwait
Presentation dr abeermoh_bahrain_gbforum2012kuwaitPresentation dr abeermoh_bahrain_gbforum2012kuwait
Presentation dr abeermoh_bahrain_gbforum2012kuwaitgreenbuilding
 
Graphics pipelining
Graphics pipeliningGraphics pipelining
Graphics pipeliningAreena Javed
 
satllite image processing
satllite image processingsatllite image processing
satllite image processingavhadlaxmikant
 
Shadow Mapping with Today's OpenGL Hardware
Shadow Mapping with Today's OpenGL HardwareShadow Mapping with Today's OpenGL Hardware
Shadow Mapping with Today's OpenGL HardwareMark Kilgard
 
Texture mapping
Texture mapping Texture mapping
Texture mapping wahab13
 
30th コンピュータビジョン勉強会@関東 DynamicFusion
30th コンピュータビジョン勉強会@関東 DynamicFusion30th コンピュータビジョン勉強会@関東 DynamicFusion
30th コンピュータビジョン勉強会@関東 DynamicFusionHiroki Mizuno
 
A Practical and Robust Bump-mapping Technique for Today’s GPUs (slides)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (slides)A Practical and Robust Bump-mapping Technique for Today’s GPUs (slides)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (slides)Mark Kilgard
 
Build Your Own 3D Scanner: 3D Scanning with Swept-Planes
Build Your Own 3D Scanner: 3D Scanning with Swept-PlanesBuild Your Own 3D Scanner: 3D Scanning with Swept-Planes
Build Your Own 3D Scanner: 3D Scanning with Swept-PlanesDouglas Lanman
 
Conception_et_realisation_dun_site_Web_d.pdf
Conception_et_realisation_dun_site_Web_d.pdfConception_et_realisation_dun_site_Web_d.pdf
Conception_et_realisation_dun_site_Web_d.pdfSofianeHassine2
 
Stereoscopy for Non-Planar Projections (TRUE 3D 2009)
Stereoscopy for Non-Planar Projections (TRUE 3D 2009)Stereoscopy for Non-Planar Projections (TRUE 3D 2009)
Stereoscopy for Non-Planar Projections (TRUE 3D 2009)Matthias Trapp
 
2022-01-17-Rethinking_Bisenet.pptx
2022-01-17-Rethinking_Bisenet.pptx2022-01-17-Rethinking_Bisenet.pptx
2022-01-17-Rethinking_Bisenet.pptxJAEMINJEONG5
 
Bump Mapping Unparametrized Surfaces on the GPU
Bump Mapping Unparametrized Surfaces on the GPUBump Mapping Unparametrized Surfaces on the GPU
Bump Mapping Unparametrized Surfaces on the GPUBrooke Hodgman
 
Interactive Stereoscopic Rendering for Non-Planar Projections (GRAPP 2009)
Interactive Stereoscopic Rendering for Non-Planar Projections (GRAPP 2009)Interactive Stereoscopic Rendering for Non-Planar Projections (GRAPP 2009)
Interactive Stereoscopic Rendering for Non-Planar Projections (GRAPP 2009)Matthias Trapp
 
Interactive Refractions And Caustics Using Image Space Techniques
Interactive Refractions And Caustics Using Image Space TechniquesInteractive Refractions And Caustics Using Image Space Techniques
Interactive Refractions And Caustics Using Image Space Techniquescodevania
 
Interactive Editing of Signed Distance Fields
Interactive Editing of Signed Distance FieldsInteractive Editing of Signed Distance Fields
Interactive Editing of Signed Distance FieldsMatthias Trapp
 
Task 2 displaying 3 d polygon animation
Task 2 displaying 3 d polygon animationTask 2 displaying 3 d polygon animation
Task 2 displaying 3 d polygon animationRexeh1245
 

Ähnlich wie A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper) (20)

Normal Mapping / Computer Graphics - IK
Normal Mapping / Computer Graphics - IKNormal Mapping / Computer Graphics - IK
Normal Mapping / Computer Graphics - IK
 
Presentation dr abeermoh_bahrain_gbforum2012kuwait
Presentation dr abeermoh_bahrain_gbforum2012kuwaitPresentation dr abeermoh_bahrain_gbforum2012kuwait
Presentation dr abeermoh_bahrain_gbforum2012kuwait
 
Graphics pipelining
Graphics pipeliningGraphics pipelining
Graphics pipelining
 
satllite image processing
satllite image processingsatllite image processing
satllite image processing
 
Shadow Mapping with Today's OpenGL Hardware
Shadow Mapping with Today's OpenGL HardwareShadow Mapping with Today's OpenGL Hardware
Shadow Mapping with Today's OpenGL Hardware
 
Texture mapping
Texture mapping Texture mapping
Texture mapping
 
30th コンピュータビジョン勉強会@関東 DynamicFusion
30th コンピュータビジョン勉強会@関東 DynamicFusion30th コンピュータビジョン勉強会@関東 DynamicFusion
30th コンピュータビジョン勉強会@関東 DynamicFusion
 
A Practical and Robust Bump-mapping Technique for Today’s GPUs (slides)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (slides)A Practical and Robust Bump-mapping Technique for Today’s GPUs (slides)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (slides)
 
Build Your Own 3D Scanner: 3D Scanning with Swept-Planes
Build Your Own 3D Scanner: 3D Scanning with Swept-PlanesBuild Your Own 3D Scanner: 3D Scanning with Swept-Planes
Build Your Own 3D Scanner: 3D Scanning with Swept-Planes
 
TransNeRF
TransNeRFTransNeRF
TransNeRF
 
Conception_et_realisation_dun_site_Web_d.pdf
Conception_et_realisation_dun_site_Web_d.pdfConception_et_realisation_dun_site_Web_d.pdf
Conception_et_realisation_dun_site_Web_d.pdf
 
Praseed Pai
Praseed PaiPraseed Pai
Praseed Pai
 
Stereoscopy for Non-Planar Projections (TRUE 3D 2009)
Stereoscopy for Non-Planar Projections (TRUE 3D 2009)Stereoscopy for Non-Planar Projections (TRUE 3D 2009)
Stereoscopy for Non-Planar Projections (TRUE 3D 2009)
 
Svr Raskar
Svr RaskarSvr Raskar
Svr Raskar
 
2022-01-17-Rethinking_Bisenet.pptx
2022-01-17-Rethinking_Bisenet.pptx2022-01-17-Rethinking_Bisenet.pptx
2022-01-17-Rethinking_Bisenet.pptx
 
Bump Mapping Unparametrized Surfaces on the GPU
Bump Mapping Unparametrized Surfaces on the GPUBump Mapping Unparametrized Surfaces on the GPU
Bump Mapping Unparametrized Surfaces on the GPU
 
Interactive Stereoscopic Rendering for Non-Planar Projections (GRAPP 2009)
Interactive Stereoscopic Rendering for Non-Planar Projections (GRAPP 2009)Interactive Stereoscopic Rendering for Non-Planar Projections (GRAPP 2009)
Interactive Stereoscopic Rendering for Non-Planar Projections (GRAPP 2009)
 
Interactive Refractions And Caustics Using Image Space Techniques
Interactive Refractions And Caustics Using Image Space TechniquesInteractive Refractions And Caustics Using Image Space Techniques
Interactive Refractions And Caustics Using Image Space Techniques
 
Interactive Editing of Signed Distance Fields
Interactive Editing of Signed Distance FieldsInteractive Editing of Signed Distance Fields
Interactive Editing of Signed Distance Fields
 
Task 2 displaying 3 d polygon animation
Task 2 displaying 3 d polygon animationTask 2 displaying 3 d polygon animation
Task 2 displaying 3 d polygon animation
 

Mehr von Mark Kilgard

D11: a high-performance, protocol-optional, transport-optional, window system...
D11: a high-performance, protocol-optional, transport-optional, window system...D11: a high-performance, protocol-optional, transport-optional, window system...
D11: a high-performance, protocol-optional, transport-optional, window system...Mark Kilgard
 
Computers, Graphics, Engineering, Math, and Video Games for High School Students
Computers, Graphics, Engineering, Math, and Video Games for High School StudentsComputers, Graphics, Engineering, Math, and Video Games for High School Students
Computers, Graphics, Engineering, Math, and Video Games for High School StudentsMark Kilgard
 
NVIDIA OpenGL and Vulkan Support for 2017
NVIDIA OpenGL and Vulkan Support for 2017NVIDIA OpenGL and Vulkan Support for 2017
NVIDIA OpenGL and Vulkan Support for 2017Mark Kilgard
 
NVIDIA OpenGL 4.6 in 2017
NVIDIA OpenGL 4.6 in 2017NVIDIA OpenGL 4.6 in 2017
NVIDIA OpenGL 4.6 in 2017Mark Kilgard
 
NVIDIA OpenGL in 2016
NVIDIA OpenGL in 2016NVIDIA OpenGL in 2016
NVIDIA OpenGL in 2016Mark Kilgard
 
Virtual Reality Features of NVIDIA GPUs
Virtual Reality Features of NVIDIA GPUsVirtual Reality Features of NVIDIA GPUs
Virtual Reality Features of NVIDIA GPUsMark Kilgard
 
Migrating from OpenGL to Vulkan
Migrating from OpenGL to VulkanMigrating from OpenGL to Vulkan
Migrating from OpenGL to VulkanMark Kilgard
 
EXT_window_rectangles
EXT_window_rectanglesEXT_window_rectangles
EXT_window_rectanglesMark Kilgard
 
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...Mark Kilgard
 
Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
Accelerating Vector Graphics Rendering using the Graphics Hardware PipelineAccelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
Accelerating Vector Graphics Rendering using the Graphics Hardware PipelineMark Kilgard
 
NV_path rendering Functional Improvements
NV_path rendering Functional ImprovementsNV_path rendering Functional Improvements
NV_path rendering Functional ImprovementsMark Kilgard
 
OpenGL 4.5 Update for NVIDIA GPUs
OpenGL 4.5 Update for NVIDIA GPUsOpenGL 4.5 Update for NVIDIA GPUs
OpenGL 4.5 Update for NVIDIA GPUsMark Kilgard
 
SIGGRAPH Asia 2012: GPU-accelerated Path Rendering
SIGGRAPH Asia 2012: GPU-accelerated Path RenderingSIGGRAPH Asia 2012: GPU-accelerated Path Rendering
SIGGRAPH Asia 2012: GPU-accelerated Path RenderingMark Kilgard
 
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and BeyondSIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and BeyondMark Kilgard
 
Programming with NV_path_rendering: An Annex to the SIGGRAPH Asia 2012 paper...
Programming with NV_path_rendering:  An Annex to the SIGGRAPH Asia 2012 paper...Programming with NV_path_rendering:  An Annex to the SIGGRAPH Asia 2012 paper...
Programming with NV_path_rendering: An Annex to the SIGGRAPH Asia 2012 paper...Mark Kilgard
 
GPU accelerated path rendering fastforward
GPU accelerated path rendering fastforwardGPU accelerated path rendering fastforward
GPU accelerated path rendering fastforwardMark Kilgard
 
GPU-accelerated Path Rendering
GPU-accelerated Path RenderingGPU-accelerated Path Rendering
GPU-accelerated Path RenderingMark Kilgard
 
SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
SIGGRAPH 2012: GPU-Accelerated 2D and Web RenderingSIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
SIGGRAPH 2012: GPU-Accelerated 2D and Web RenderingMark Kilgard
 
SIGGRAPH 2012: NVIDIA OpenGL for 2012
SIGGRAPH 2012: NVIDIA OpenGL for 2012SIGGRAPH 2012: NVIDIA OpenGL for 2012
SIGGRAPH 2012: NVIDIA OpenGL for 2012Mark Kilgard
 

Mehr von Mark Kilgard (20)

D11: a high-performance, protocol-optional, transport-optional, window system...
D11: a high-performance, protocol-optional, transport-optional, window system...D11: a high-performance, protocol-optional, transport-optional, window system...
D11: a high-performance, protocol-optional, transport-optional, window system...
 
Computers, Graphics, Engineering, Math, and Video Games for High School Students
Computers, Graphics, Engineering, Math, and Video Games for High School StudentsComputers, Graphics, Engineering, Math, and Video Games for High School Students
Computers, Graphics, Engineering, Math, and Video Games for High School Students
 
NVIDIA OpenGL and Vulkan Support for 2017
NVIDIA OpenGL and Vulkan Support for 2017NVIDIA OpenGL and Vulkan Support for 2017
NVIDIA OpenGL and Vulkan Support for 2017
 
NVIDIA OpenGL 4.6 in 2017
NVIDIA OpenGL 4.6 in 2017NVIDIA OpenGL 4.6 in 2017
NVIDIA OpenGL 4.6 in 2017
 
NVIDIA OpenGL in 2016
NVIDIA OpenGL in 2016NVIDIA OpenGL in 2016
NVIDIA OpenGL in 2016
 
Virtual Reality Features of NVIDIA GPUs
Virtual Reality Features of NVIDIA GPUsVirtual Reality Features of NVIDIA GPUs
Virtual Reality Features of NVIDIA GPUs
 
Migrating from OpenGL to Vulkan
Migrating from OpenGL to VulkanMigrating from OpenGL to Vulkan
Migrating from OpenGL to Vulkan
 
EXT_window_rectangles
EXT_window_rectanglesEXT_window_rectangles
EXT_window_rectangles
 
OpenGL for 2015
OpenGL for 2015OpenGL for 2015
OpenGL for 2015
 
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...
 
Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
Accelerating Vector Graphics Rendering using the Graphics Hardware PipelineAccelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
 
NV_path rendering Functional Improvements
NV_path rendering Functional ImprovementsNV_path rendering Functional Improvements
NV_path rendering Functional Improvements
 
OpenGL 4.5 Update for NVIDIA GPUs
OpenGL 4.5 Update for NVIDIA GPUsOpenGL 4.5 Update for NVIDIA GPUs
OpenGL 4.5 Update for NVIDIA GPUs
 
SIGGRAPH Asia 2012: GPU-accelerated Path Rendering
SIGGRAPH Asia 2012: GPU-accelerated Path RenderingSIGGRAPH Asia 2012: GPU-accelerated Path Rendering
SIGGRAPH Asia 2012: GPU-accelerated Path Rendering
 
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and BeyondSIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
 
Programming with NV_path_rendering: An Annex to the SIGGRAPH Asia 2012 paper...
Programming with NV_path_rendering:  An Annex to the SIGGRAPH Asia 2012 paper...Programming with NV_path_rendering:  An Annex to the SIGGRAPH Asia 2012 paper...
Programming with NV_path_rendering: An Annex to the SIGGRAPH Asia 2012 paper...
 
GPU accelerated path rendering fastforward
GPU accelerated path rendering fastforwardGPU accelerated path rendering fastforward
GPU accelerated path rendering fastforward
 
GPU-accelerated Path Rendering
GPU-accelerated Path RenderingGPU-accelerated Path Rendering
GPU-accelerated Path Rendering
 
SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
SIGGRAPH 2012: GPU-Accelerated 2D and Web RenderingSIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
 
SIGGRAPH 2012: NVIDIA OpenGL for 2012
SIGGRAPH 2012: NVIDIA OpenGL for 2012SIGGRAPH 2012: NVIDIA OpenGL for 2012
SIGGRAPH 2012: NVIDIA OpenGL for 2012
 

A Practical and Robust Bump-mapping Technique for Today’s GPUs (paper)

  • 1. GDC 2000: Advanced OpenGL A Practical and Robust Bump-mapping Game Development Technique for Today's GPUs A Practical and Robust Bump-mapping Technique for Today’s GPUs Mark J. Kilgard NVIDIA Corporation 3535 Monroe Street Santa Clara, CA 95051 (408) 615-2500 mjk@nvidia.com March 30, 2000 Copyright NVIDIA Corporation, 2000. ABSTRACT Bump mapping is a normal-perturbation rendering technique for simulating lighting effects caused by patterned irregularities on otherwise locally smooth surfaces. By encoding such surface patterns in texture maps, texture-based bump mapping simulates a surface’s irregular lighting appearance without modeling the patterns as true geometric perturbations to the surface. Bump mapping is advantageous because it can decouple a texture-based description of small-scale surface irregularities used for per-pixel lighting computations from the vertex-based description of large-scale object shape required for efficient transformation and rasterization. This paper describes a practical and robust bump-mapping technique suited for the capabilities of today’s Graphics Processor Units (GPUs). This paper has six sections including the introduction. The second section presents the theory of bump mapping. The third section reviews several existing hardware bump-mapping techniques. The fourth section describes the cube map texturing and “register combiners” features of NVIDIA’s GeForce 256 and Quadro GPUs. These features in combination are the basis for the bump mapping technique presented in the fifth section. This technique achieves real-time performance on current generation NVIDIA GPUs. The tech- nique can model ambient, diffuse, and specular lighting terms, a textured surface decal, and attenuated and spotlight illumination. The technique is notable because of its robustness and relative fidelity to Blinn’s original mathematical formulation of bump mapping. The sixth section concludes. Several appendices provide OpenGL implementation details. Keywords Bump mapping, texturing, per-pixel lighting, register combiners, GeForce 256, Quadro, OpenGL. reason that people are comfortable calling a stucco wall “flat” 1 INTRODUCTION despite its stucco texture and consider a golf ball “round” de- Video games use texture-mapping hardware to generate inter- spite its dimples. active computer-generated imagery with astounding levels of per-pixel detail, yet conventional hardware texture mapping To capture the everyday sense of texture, computer graphics does not give rendered surfaces a “textured” feel in the every- practitioners use an extension of texture mapping known as day sense of the term. Conventional hardware texture mapping bump mapping. Blinn invented bump mapping in 1978 [4]. gives polygonal models a colorful yet flat appearance. Even Bump mapping is a texture-based rendering approach for when textured models are augmented by per-vertex lighting simulating lighting effects caused by patterned irregularities on computations, polygonal flatness is still evident. The problem otherwise locally smooth surfaces. By encoding such surface is that what computer graphics practitioners call texture is not patterns in texture maps, bump mapping simulates a surface’s what people mean by the word texture in everyday usage. irregular lighting appearance without the complexity and expense of modeling the patterns as true geometric perturba- In everyday usage the word “texture” refers to bumps, wrinkles, tions to the surface. grooves, or other irregularities on surfaces. The computer graphics notion of a texture is more akin to the everyday notion Rendering bumpy surfaces as actual geometric perturbations is of a decal. In the everyday world, we recognize bumpy surfaces just too computationally expensive and data intensive. because of the way light interacts with the surface irregulari- Moreover, the scale of the minute geometric displacements is ties. In a strict sense, these bumps and irregularities are part of typically less than the discrete pixel resolution used for ren- the complete geometric form of everyday objects, but in a dering which leads to aliasing issues. Bump mapping is a more looser sense, the scale of these irregularities is quite small efficient approach because it decouples the texture-based relative the overall geometric form of the object. This is the description of small-scale surface irregularities used for per- 1
  • 2. GDC 2000: Advanced OpenGL A Practical and Robust Bump-mapping Game Development Technique for Today's GPUs 2.1 Classic Height Field Bump Mapping The classic formulation of bump mapping developed by Blinn computes perturbed surface normals for a parametric surface as if a height field displaced the surface in the direction of the surface P unperturbed surface normal. The surface, without any actual height field F displacement, is then rendered and illuminated based on the perturbed surface normals. These computations are performed at each and every visible pixel on the surface. The discussion in this and the next two subsections restates Blinn’s classic motivation for bump mapping [4]. Assume a surface is defined by a bivariate vector function perturbed surface P’ P(u,v) that generates 3D points (x,y,z) on the surface. (A bi- variate vector function is a function of two variables where the Figure 1. A surface perturbed by a height field makes a result is a vector. A 2D texture map containing colors bumpy surface. represented as RGB triples is one example of a bivariate vector function.) The surface normal for a point on P is defined as pixel lighting computations from the vertex-based description ∂P (u, v ) ∂P(u, v) of large-scale object shape required for efficient transformation, N(u , v) = × rasterization, and hidden surface removal. ∂u ∂v Still the computations required for bump mapping as originally formulated by Blinn are considerably more expensive than Equation 1 those required for conventional hardware texture mapping. A second bivariate scalar function F(u,v) defines displacement Many attempts have been made over the last two decades to magnitudes from the surface P(u,v). The displacement direc- reformulate bump mapping into a form suitable for hardware tion is determined by normalizing N(u,v). F can be interpreted implementation. In general, these attempts suffer from various geometrically as a height field that displaces the surface P. and often serious limitations. Together, P and F define a new displaced surface P'(u,v) as This paper describes a new practical and robust bump-mapping shown in Figure 1 and defined as follows technique suited to NVIDIA’s current generation Graphics N (u , v) Processing Units (GPUs). This paper also compares and P' (u , v) = P (u , v ) + F (u, v ) contrasts the new technique with other hardware bump map- N (u , v) ping techniques described in the literature. The surface normal for a point on P' is defined as This paper has six sections. After this introduction, the second section presents the mathematics of bump mapping. The third ∂P' (u , v ) ∂P ' (u , v ) section reviews several hardware bump-mapping techniques N ' (u , v ) = × described in the literature. The fourth section describes the ∂u ∂v cube map texturing and “register combiners” features of NVIDIA’s GeForce 256 and Quadro GPUs. These features in Equation 2 combination with multitexturing are the basis for the bump Expanding these partial derivatives of P' with the chain rule mapping technique presented in the fifth section. This tech- results in nique achieves real-time performance on NVIDIA GPUs. The technique can model ambient, diffuse, and specular lighting  N  ∂  terms, a textured surface decal, and attenuated and spotlight ∂P' ∂P ∂F  N    + F | N |  illumination. The technique supports both a locally positioned = + light and a local viewer model. The technique is notable ∂u ∂u ∂u  N     ∂u  because of its robustness and relative fidelity to Blinn’s origi-   nal mathematical formulation of bump mapping. The sixth   section concludes. Several appendices provide OpenGL implementation details. Equation 3 2 BUMP MAPPING MATHEMATICS  N  ∂  Bump mapping is divided into two tasks. First, a perturbed N ∂P' ∂P ∂F    |N| surface normal is computed. Then, a lighting computation is = + +F performed using the perturbed normal. ∂v ∂v ∂v  N     ∂v    These two tasks must be performed at each and every visible   fragment of a bump-mapped surface. Because we desire a hardware solution that runs at real-time rates, computational Equation 4 efficiency is an imperative. 2
  • 3. GDC 2000: Advanced OpenGL A Practical and Robust Bump-mapping Game Development Technique for Today's GPUs D N N’ N θ N' ∂P/ ∂v -∂F/∂u ∂P/ ∂v A N × ∂P/∂u ∂P/∂u ∂F/ ∂v ∂F/ ∂u ∂P/∂u N × ∂P/∂v D -∂F/ ∂v Figure 3. Interpreting a perturbation as a rotation. Figure 2. Interpreting a perturbation as an offset vector. sent normal perturbations in a bump map. Blinn’s first inter- pretation leads to encoding bump maps as offset vectors. Blinn’s second interpretation leads to encoding bump maps as In the context of bump mapping, F represents the bumpiness of vector rotations. These two interpretations serve as the basis the surface. This bumpiness can be considered micro- for a wide variety of bump-mapping techniques. displacements that are negligible relative to the overall scale of the surface P. So assuming the magnitude of F is negligible, 2.2 Offset Vector Bump Maps the rightmost term in both Equation 3 and Equation 4 can be Blinn’s first geometric interpretation of Equation 5 notes that approximated by zero. Note that even if F itself is negligible, N' can be viewed as N offset by a vector D. That is the partial derivatives of F are significant. N' = N + D Expanding the cross product in Equation 2 gives the following expression for N' Equation 6  ∂P ∂F  N    ∂P ∂F  N   where N' =  +   ×  +   `  ∂u ∂u  N    ∂v ∂v  N   ∂F  ∂P  ∂F  ∂P        N × − N ×  ∂u  ∂v  ∂v  ∂u  which evaluates to D= N ∂F  ∂P  ∂F  ∂P  ∂F ∂F  N×   × N (N × N) ∂P ∂P ∂u  ∂v  ∂v  ∂u  + ∂u ∂v N'= × + + Equation 7 ∂u ∂v N N N 2 Blinn gives a geometric interpretation of D. The two vectors The first term is just N based on Equation 1. The last term is N×∂P/∂v and N×∂P/∂u reside in the tangent plane of the zero because N×N=0. Therefore, N' simplifies to surface. Scaling each vector by an amount proportional to the u and v partial derivatives of F and adding the two vectors pro- ∂F  ∂P  ∂F  ∂P  N×  − N×  duces D. The vector D plus the unperturbed vector N produce ∂u  ∂v  ∂v  ∂u  N'. This interpretation is shown in Figure 2. N' = N + This implies that another way to represent a bump map in ad- N dition to a height field is to store the offset vector function D(u,v). A bump map texture that represents normal perturba- Equation 5 tions this way is called an offset vector bump map or simply an offset map. When analytical partial derivatives are not available for P and F, the partial derivatives in Equation 5 can be approximated 2.3 Vector Rotation Bump Maps using finite differences. Blinn’s second geometric interpretation of Equation 5 treats the Equation 5 computes the perturbed surface normal required for normal perturbation as vector rotation. N' can be generated by bump mapping, but the computations required are too expen- rotating N along an axis in the tangent plane of the surface. sive for direct per-fragment evaluation at hardware rendering This axis vector is the cross product of N' and N. Because N, rates. Additionally, the normal vector as used in lighting equa- N', and D are all in the same plane tions must be normalized, so N' requires normalization. More efficient approaches to compute normalized N' are required. N × N' = N × (N + D) = N × D Blinn gives two different geometric interpretations of N'. Expanding D in the N×D expression above using Equation 7 These two interpretations lead to two different ways to repre- leads to 3
  • 4. GDC 2000: Advanced OpenGL A Practical and Robust Bump-mapping Game Development Technique for Today's GPUs ∂F   ∂P   ∂F   ∂P   A) L1 N×N×  −  N ×  N ×  ∂u   ∂v   ∂v   ∂u   N L1 • N > 0 N × N' = N L2 • N < 0 This can be rewritten using the vector identity Q×(R×S) = L2 R(Q•S) – S(Q•R) and the facts that N•∂P/∂v = N•∂P/∂u = 0 self-shadowed because of Equation 1 and that N•N=|N|2. The simplifications lead to B)  ∂F ∂P ∂F ∂P  N N’ L • N’ > 0 N × N' = N  −  = NA L•N<0  ∂v ∂u ∂u ∂v  L Equation 8 self-shadowed due where to N but not N’ ∂F ∂P ∂F ∂P A= − Figure 4. Self-shadowing situations. ∂v ∂u ∂u ∂v The vector A is perpendicular to the gradient vector of F, i.e. After a perturbed normal is computed for a given fragment, the (∂F/∂u, ∂F/∂v), when expressed in the tangent plane coordinate perturbed normal and other lighting parameters are fed to a per- system with basis vectors ∂P/∂v and ∂P/∂u. This means A acts fragment lighting model. as an axis that tips N “downhill” due to the sloping (i.e., the gradient) of F. So the perturbed surface normal N' is the result Because rotations do not change the length of a vector, one of a rotation around the A axis. consequence of Equation 9 is that the resulting normal is nor- malized and therefore immediately usable in lighting computa- The next task is to determine the angle of rotation. Since tions. |N|A= N×D by Equation 8 and N is perpendicular to D then 2.4 Bumped Diffuse Lighting N×D = N D Diffuse lighting interactions are typically modeled with a lighting model based on Lambert’s law. This pseudo-law says So Equation 8 implies that that surfaces uniformly reflect incident light. The perceived D=A intensity of a surface that obeys Lambert’s law and that is illu- minated by a single point light source is computed as By noting that N, D, and N' form a right triangle, the angle of the perturbation rotation around A is θ where I lambert = I ambient + k diffuse max(0, L • N ) N N tan(θ ) = = Equation 10 D A Iambient is the ambient perceived intensity, kdiffuse is the percent- This is illustrated in Figure 3. age of reflected diffuse light, L is the normalized light vector and N is the normalized surface normal vector. So in addition to height fields and offset vector maps, a third way to store a bump map is encoding normal perturbations as a When discussing lighting equations, the vectors discussed are (u,v) map of vector rotations. Euler angles, 3x3 rotation assumed to be normalized unless otherwise noted. matrices, and quaternions are all reasonable representations for The subexpression max(0,L•N) forces the light’s perceived vector rotations. A bump map texture that represents normal diffuse intensity to zero if L•N is negative. This clamping perturbations this way is called a normal perturbation map or corresponds to the situation when the light and the viewer are simply a normal map. on opposite sides of the surface tangent plane. This is shown in If R(u,v) is such a normal perturbation map, then Figure 4-A. In this situation, the point on the surface is said to “self shadow.” Clamping also avoids the nonsensical contribu- N' tion of negative reflected light. = N (u , v) ⊗ R(u, v ) N 2.4.1 Bumped Diffuse Self-shadowing When bump mapping, there are really two surface normals that Equation 9 should be considered for lighting. The unperturbed normal N is based on the surface’s large-scale modeled geometry while 4
  • 5. GDC 2000: Advanced OpenGL A Practical and Robust Bump-mapping Game Development Technique for Today's GPUs ∑ ( kdiffuse sself max(0, L • N'i ) ) the perturbed N' is based on the surface’s small-scale micro- 1 n structure. I lambert = I ambient + Either normal can create self-shadowing situations. Figure 4-B n i =1 shows a situation where the perturbed normal is subject to illumination based the light direction, i.e. when L•N' is posi- Equation 13 tive. However, the point on the surface arguably should not In conventional texture mapping, pre-filtering of the discrete receive illumination from the light because the unperturbed samples within a texture map is applicable because the normal indicates the point is self-shadowed due to the surface’s texture’s color contribution can be factored out of the shading large-scale geometry. computation. Such an approach is not immediately applicable To account for self-shadowing due to either the perturbed or to Equation 11 because the subexpression max(0,L•N') is not a unperturbed surface normal, Equation 10 can be rewritten as linear expression. Unfortunately, direct application of Equation 13 is impractical I lambert = I ambient + k diffuse s self max(0, L • N' ) for interactive hardware rendering so some pre-filtering scheme for bump maps is required. Equation 11 The reason that the subexpression max(0,L•N') cannot be fac- where tored out is solely due to the self-shadow clamping. If we simply ignore self-shadow clamping and assume that L and sself 1, L • N > 0 are uniform over the pixel’s footprint in bump map space, then s self = 0, L • N ≤ 0 1 n 1 n  Without this extra level of clamping, bump-mapped surfaces ∑ n i=1 (Kdiffuse sself L • N'i ) = kdiffuse sself L •  ∑N'i   n i=1  can show illumination in regions of the surface that should be self-shadowed based on the vertex-specified geometry of the Assuming that L and sself are uniform implies that N is uniform. model. Hardware renderers only have a single N vector available per- pixel because N is interpolated at pixel resolution so assuming In practice, the step function definition of sself shown above that N is uniform over a pixel is a practical assumption. L can leads to temporal aliasing artifacts. During animation, pixels also assumed to be uniform over the pixel if the light is direc- along the geometric self-shadowing boundary of bump-mapped tional. Even in the case of a positional light, the light would surfaces may pop on and wink off abruptly. Modifying sself to have to be extremely close to the surface for L to vary signifi- make a less abrupt transition can minimize this aliasing arti- cantly. fact. For example: Arguably self-shadowing of individual perturbed normals can 1, L•N > c be safely ignored under many circumstances if we simply clamp to zero the dot product of L with the averaged N'. This sself = 1 (L • N ), 0 <L • N≤ c assumption correctly handles two very important cases. These c 0, L•N ≤0 two cases are when all and when none of the perturbed normals are self-shadowed. A situation where the assumption is very poor requires an extreme distribution of perturbed surface nor- Equation 12 mals that is unlikely if N' is generated from a height field with This version of sself uses a steep linear ramp to transition adequate resolution. between 0 and 1. When c=0.125, this modified sself is effective Appreciating the assumptions suggested above, a reasonable at minimizing popping and winking artifacts and is straightfor- bump map pre-filtering scheme for a diffuse lighting model is ward for hardware implementation. 1 n 2.4.2 Bump Map Filtering for Diffuse Lighting N' filtered = ∑ N'i n i =1 Keep in mind that Equation 11 assumes that the L and N' vectors are normalized to unit length. The equation also assumes a single unperturbed normal and a single perturbed Equation 14 surface normal. In practice, a pixel’s bump map footprint Then the perceived intensity of the surface is computed as covers a region of the bump map. Assuming a discrete bump map representation, the pixel’s intensity should be an average I lambert = I ambient + k diffuse sself max(0, L • N' filtered ) of Equation 11 over the collection of perturbed normals within the pixel’s bump map footprint. Assuming a discrete collection of n perturbed normals within a given pixel footprint and equal Equation 15 weighting of the samples, Equation 11 becomes Equation 15 matches Equation 11 except that N' is replaced by N'filtered. Note that N'filtered is not generally normalized. Re- normalizing N'filtered might seem reasonable and has been sug- gested in the literature [21], but not renormalizing when com- 5
  • 6. GDC 2000: Advanced OpenGL A Practical and Robust Bump-mapping Game Development Technique for Today's GPUs puting a surface’s perceived diffuse intensity is actually more The Phong model [20] for a single point light source is correct. I ambient = I ambient Consider the dimpled surface of a golf ball viewed from a dis- tance (assume golf balls are Lambertian for a moment). Also + k diffuse max( 0, L • N) consider a smooth Lambertian ball of the same size viewed shininess from the same distance. Due to its dimpled surface, the per-  R ceived intensity of the golf ball should be dimmer than the per- + k specular s self max  0, L •   ceived intensity of the smooth ball.  R  The brute force filtering in Equation 13 correctly models this dimming of bumpy diffuse surfaces. A robust bump map pre- Equation 17 filtering scheme should also reproduce this effect. where R is the reflected view vector defined as So consider what happens when Equation 14 is used to filter a bump map. If the bump map is indeed “bumpy,” a filtered R = V − 2NT ( N • V ) collection of sampled perturbed normals will point in varying directions though all will be unit length. Averaging these Equation 18 varied normals produces a vector with a length that must be less than one. Similarly, consider what happens when Equation Both models assume the vectors N, L, and V are normalized. 14 is used to filter a “flat” bump map. A flat bump map Both models use exponentiation by a shininess exponent to implies that N=N'=N'filtered so N'filtered is unit length every- model specular highlights. Both models use sself to avoid the where. specular contribution from contribution when the light is self- shadowed. Under otherwise identical circumstances, the filtered “bumpy” bump map correctly produces a dimmer perceived intensity 2.5.1 Blinn Bumped Specular Lighting than the filtered “flat” bump map. Blinn’s original bump-mapping scheme assumes the Blinn Note that if N'filtered is renormalized then bumpy diffuse lighting model. The Blinn model is both less expensive to surfaces incorrectly appear too bright. compute and more physically plausible than the Phong model. Moreover, the half-angle vector is independent of N so substi- This result suggests that linear averaging of normalized tuting a perturbed normal N' into the lighting model is straight- perturbed normals is a reasonable filtering approach for the forward. purpose of diffuse illumination. It also suggests that if bump maps are represented as perturbed normal maps then such The Blinn lighting model assumes that N (or N' when bump normal maps can be reasonably filtered with conventional mapping) is normalized. For this reason, the Blinn model linear-mipmap-linear texturing hardware when used for diffuse works well in conjunction with a bump map encoded as a lighting. normal map because such maps generate normalized perturbed normals (the rotation of a normalized vector remains normal- 2.5 Bumped Specular Lighting ized). However, using the Blinn model with an offset map Bump-mapped specular lighting interactions are typically requires a per-pixel renormalization. modeled with either the Blinn or Phong lighting models. Both The Blinn model similarly assumes that L and H are normal- are empirical models. ized per-pixel. The Blinn model [3] for a single point light source is When computing H•N', arguably for self-shadowing reasons, I ambient = I ambient the specular contribution should be forced to zero if the specu- lar contribution computed with the unperturbed normal, i.e. + k diffuse max( 0, L • N) H•N, goes negative. This effect can be folded into the specular version of the sself term for Equation 16. + k specular s self max(0, H • N ) shininess 2.5.2 Phong Bumped Specular Lighting Equation 16 The Phong model has several interesting advantages despite its additional complexity. The reflection vector R is a function of where H is the half-angle vector defined as the surface normal so the Phong model requires a per-pixel reflection vector computation. However, once the reflection L+V H= vector is computed, it can be used to access a cube map texture L+V encoding the specular illumination. Accessing a cube map has three noteworthy advantages. First, V is the normalized view vector (the vector from the surface the cube map avoids the need to renormalize R per-pixel. position to the eye position). Second, the exponentiation can be encoded into the cube map. Moreover, the object’s filtered environment can be encoded into the cube map to support so-called “bumped environment mapping.” Third, as noted by Voorhies [27], the normal vector 6
  • 7. GDC 2000: Advanced OpenGL A Practical and Robust Bump-mapping Game Development Technique for Today's GPUs N need not be normalized if Equation 18 is rewritten to multi- supposes some statistical bumpiness on a scale smaller than ply both terms by the length of the unnormalized normal vector even the bump map. squared. R then can be computed as Fournier [10] proposed a pre-filtering method for normal maps R = V ( N • N ) − 2N ( N • V ) T that substitutes a small set of “Phong peaks” from a larger sample of perturbed normals to be filtered. The perceived where N is not necessarily normalized. This approach works specular contribution is then approximated as a weighted sum well when the bump map is encoded as an offset map because of the smaller number of Phong peaks. The approximation is such maps do not guarantee normalized perturbed normals max (H • N j ) 1 n m ∑ max (0, H • Ni ) ≅ ∑w (refer back to Equation 6). shininess ej j The advantages of the Phong model for bump mapping should n i =1 j =1 not be overstated though. The technique requires a bump map texture access and a subsequent dependent cube map texture access. When implemented in hardware, expensive latency Equation 20 fifos are needed to effectively hide the memory latency of the second dependent texture access. Because the perturbed where m is the number of Phong peaks, wj is the weighting for normals and the specular cube map will not be oriented in the peak j, Nj is the normalized direction of peak j, and ej is the same coordinate system, a normal coordinate system transfor- exponent for peak j. Fournier suggests fitting the Phong peaks mation is required. Ideally, this transform should be updated using an expensive non-linear least-squares approach. per-pixel to avoid artifacts. The specular cube map assumes Fournier’s approach is poorly suited for hardware implementa- the specular illumination comes from an infinite environment. tion. Each peak consists of at least four parameters: a weight, This means local lights, attenuation, and spotlight effects are an exponent, and a direction (θ,φ). Fournier also suggests that not possible though an unlimited number of directional light as many as seven peaks may be required for adequate recon- sources can be encoded into a specular cube map. Good pre- struction and multiple sets of peaks may need to be averaged filtering of a specular cube map, particularly for dull surfaces, for each pixel. is expensive. Likewise, changing the lighting configuration or Schilling [23] presented another approach that is more amena- environment requires regenerating the cube map. Each mate- ble to hardware implementation yet still out of reach for today’s rial with a unique shininess exponent requires a differently pre- available hardware resources. Schilling proposes the construc- filtered specular cube map. Saving the expense of renormali- tion of a roughness map that encodes the statistical covariance zation of the perturbed normal is only a true advantage if the of perturbed normals within a given pixel footprint. Schilling’s diffuse illumination can also be computed with an unnormal- approach proposes a considerably more tractable representation ized perturbed normal too. The obvious way to accomplish this of the normal distribution than Fournier’s more expensive and is with a second diffuse cube map, particularly if the specular comprehensive approach. cube map encodes multiple directional lights. Unfortunately, a diffuse cube map requires an additional dependent cube map The covariance provides enough information to model aniso- texture fetch unit or requires a second rendering pass. tropic reflection effects. During rendering, information from the roughness map is used for anisotropic filtering of a specular 2.5.3 Bump Map Filtering for Specular Lighting cube map or as inputs to a modified Blinn lighting model. A Both models compute the diffuse contribution based on a more compact roughness scheme is possible by limiting the Lambertian model identical to the previous subsection. There- roughness map to isotropic roughness. fore, the previous analysis to justify pre-filtering of perturbed Without a tractable approach to pre-filtering bump maps for normals for the diffuse contribution still applies. specular illumination given today’s available hardware However, the exponentiation in the specular contribution resources, we are left with few options. One tractable though makes a similar attempt to factor L outside the specular dot still expensive option is simply to apply Equation 19 for some product rather dubious. Assuming a discrete collection of n fixed number of samples using multiple passes, perhaps using perturbed normals within a given pixel footprint and equal an accumulation buffer to accumulate and weight each distinct weighting of the samples, the perceived specular intensity perturbed normal’s specular contribution. should be With no more effective option available, we again consider pre- 1 n filtering the bump map by simply averaging the perturbed = ∑ max (0, H • N i ) shininess I specular normals within each pixel’s footprint and renormalizing. This n i =1 is precisely what we decided was incorrect for diffuse illumination, but in the case of specular illumination, Equation 19 evaluating Equation 16 or Equation 17 without a normalized normal is something to be avoided to have any chance of a The conventional interpretation of the exponentiation is that it bright specular highlight. We can at least observe that this models an isotropic Gaussian micro-distribution of normals. approach is the degenerate case of Equation 20 where m equals The exponent is often referred to as a measure of the surface’s 1 though there is no guarantee that the average perturbed roughness or shininess. In the context of bump mapping, this normal is a remotely reasonable reconstruction of the true distribution of normals. 7
  • 8. GDC 2000: Advanced OpenGL A Practical and Robust Bump-mapping Game Development Technique for Today's GPUs The single good thing about this approach is that there is an Lighting results can be computed in an arbitrary 3D coordinate opportunity for sharing the same bump map encoding between system as long as all the vector parameters involved are the diffuse and specular illumination computations. The oriented with respect to the same single coordinate system. diffuse computation assumes an averaged perturbed normal that This freedom allows us to select the most convenient coordi- is not normalized while the specular computation requires the nate system for lighting. Tangent space is just such a local same normal normalized. Both needs are met by storing the coordinate system. The orthonormal basis for the tangent space normalized perturbed normal and a descaling factor. The is the normalized unperturbed surface normal Nn, the tangent specular computation uses the normalized normal directly while vector Tn defined by normalizing ∂P/∂u, and the binormal Bn the diffuse computation uses the normalized normal but then defined as Nn×Tn. The orthonormal basis for a coordinate fixes the diffuse illumination by multiplying by the descaling system is also sometimes called the reference frame. factor to get back to the unnormalized vector needed for As will be demonstrated, it is convenient to rewrite D in computing the proper diffuse illumination. If N'filtered is tangent space. Equation 7 can be simplified by writing it in computed according to Equation 14, then the normalized terms of Nn and Bn so that version is ∂F  ∂P  ∂F ∂P N' filtered D=  Nn × − Bn ∂u  ∂v  ∂v ∂u N' filtered and the descaling factor is simply the length of N'filtered. Equation 21 As observed by Peercy [21], ∂P/∂v is in the plane of the tangent 2.6 Bump Map Representations and binormal by construction so ∂P/∂v can be expressed as So far, we have discussed three distinct representations of bump maps but have not been very concrete with how each ∂P  ∂P   ∂P  bump map representation is stored as a texture map. The three =  Tn • Tn +  B n • B n representations are height fields, offset maps, and normal ∂v  ∂v   ∂v  maps. Each representation corresponds to one of the three Therefore equations developed previously for computing a perturbed surface normal. Height fields are used with Equation 5. Offset ∂P  ∂P   ∂P  Nn × =  Tn • B n −  B n • Tn maps are used with Equation 6. Normal maps are used with Equation 9. ∂v  ∂v   ∂v  because Bn = Nn × Tn and -Tn = Nn × Bn. 2.6.1 Height Fields This is the most straightforward representation and one that is By substituting this result into Equation 21, D becomes fairly easy to author. A height field bump map corresponds to a ∂F   ∂P   ∂P   ∂F ∂P D=   Tn • B n −  B n •  Tn  − Bn ∂v   ∂v ∂u one-component texture map discretely encoding the bivariate function F(u,v) described in Section 2.1. ∂u   ∂v    Painting a gray-scale image with a 2D-paint program is one Equation 22 way to author height fields. Rendering bumpy surface with geometry and then reading back the resultant Z values from a This expresses D in a form not explicitly dependent on Nn. depth buffer is another means to generate height fields. Because D is expressed in tangent space, we can assign a Equation 5 actually uses the partial derivatives of F rather than convenient orientation to Nn, Tn, and Bn such as Tn=[1,0,0], F directly. Finite differencing can approximate these partial Bn=[0,1,0], and Nn=[0,0,1]. This makes is it very simple to derivatives. This bump mapping approach is called texture compute N' in tangent space: embossing and is further described in Section 3.1. N' = N + D = [0,0, c ] + D = [a, b, c ] 2.6.2 Vector Offset Maps Instead of computing the partial derivatives at rendering time, Equation 23 an offset map is constructed by pre-computing the derivatives where from a height field and then encoding the derivatives in a tex- ture map. This corresponds to encoding D(u,v) from Equation 7 into a texture. In general D is a 3D vector, but because D is orthogo- nal to N, an offset map can be encoded as a two-component texture if we assume some way to orient D with respect to N. Typically ∂P/∂u is used to orient D. When used to orient D, the normalized version of ∂P/∂u is called the tangent vector and here labeled Tn. 8
  • 9. GDC 2000: Advanced OpenGL A Practical and Robust Bump-mapping Game Development Technique for Today's GPUs ∂F  ∂P  ∂F 1 a=−  Bn •  a=− ∂u  ∂v  ∂u k ∂F  ∂P  ∂F ∂P ∂F 1 b=  Tn • − b=− ∂u  ∂v  ∂v ∂u ∂v k c =1 ∂P ∂P c= × ∂u ∂v Equation 25 If offset maps are used this way for bump mapping, the prob- Equation 24 lem remains that N' is not normalized. As described in Section Instead of having to encode D as a 3D vector requiring a three- 2.5.2, this is not an issue if the diffuse and specular contribu- tions are computed using a cube map texture. However, cube component texture, this results means that the values of a and map textures cannot be reasonably oriented in tangent space b can be encoded in a two-component offset map. The value of because tangent space varies over the surface so the tangent c is independent of the height field F and therefore does not space N' must be transformed by a rotation into the cube map’s need to be stored in the bump map. Instead c must be supplied coordinate system (typically, world space). from the surface parameterization during rendering. Often however c is assumed constant over the surface as will be Because the normal component of D in tangent space is zero, a developed below. 2x3 matrix is sufficient to rotate D. Given an unperturbed normal vector oriented in the cube map’s coordinate system, This new form of D is still inconvenient because D is still the perturbed normal is computed as dependent on the surface partial derivatives. This dependency means that the bump map texture is still effectively tied to the N'x = N x + a A 00 + b A 01 surface parameterization. This dependency means that, in gen- eral, the encoding of the bump map cannot be decoupled from N' y = N y + a A10 + b A11 the surface. This makes it difficult to author a single bump map texture that can be applied to multiple objects. In princi- N' z = N z + a A 20 + b A 21 ple, this requires a unique bump map texture for each distinct bump-mapped surface even when the surfaces share the same Equation 26 height field. Texture memory is typically a limited resource so Though the matrix A is constant in the case of a flat plane, A it is very desirable to break this dependency. varies over a curved surface because tangent space on a curved As suggested by Peercy [21], if we are willing to make some surface varies over the surface. Ideally, the rotation matrix assumptions about the nature of the parameterization of the should be updated per-pixel and be scale-invariant so as not to surface P and work in tangent space, we can remove the change the length of D. dependency of D on the surface parameterization. Consider Based on the discussion so far, ∂F/∂u and ∂F/∂v are encoded when the surface parameterization is locally that of a square directly within an offset map. These differentials are signed patch. This implies that ∂P/∂u and ∂P/∂v are orthogonal. This values so the texture filtering hardware must be capable of means that ∂P/∂u•∂P/∂v = Tn•∂P/∂v = 0 and that ∂P/∂u and filtering signed values to support offset maps. ∂P/∂v are equal in magnitude, i.e. |∂P/∂u | = |∂P/∂v|. Fortunately, this assumption is acceptable for many important Additionally, the differentials may vary over a potentially un- surfaces such as flat polygons, spheres, tori, and surfaces of bounded range, particularly when very steep bump maps are revolution. encoded. In general, hardware texture formats typically have a limited range, perhaps negative one to positive one for signed By making the square patch assumption, D can be further textures. Given the existence of the matrix A, one way to cope simplified. Based on the square patch assumption, Equation 22 with the potentially unbounded range of differentials is to becomes compose the rotation in Equation 26 with a uniform scale that ∂F ∂F extends the effective range of the offset map. This combined D=− k Tn − k Bn transform can then be loaded into the matrix A described ∂u ∂v above. The scale required varies depending on the maximum where differential stored in any given offset map. ∂P ∂P All this suggests that a signed two-component offset map with k= = limited range is reasonable to support bump mapping using ∂u ∂v offset maps. Yet to account for reasonable pre-filtering for diffuse illumination as described in Section 2.4.2, an additional and then Equation 24 can be rewritten as unsigned component should also be provided to store the average perturbed normal length when pre-filtering an offset map. In a bump-mapping scheme using diffuse cube maps, this additional component should be modulated with the diffuse 9
  • 10. GDC 2000: Advanced OpenGL A Practical and Robust Bump-mapping Game Development Technique for Today's GPUs cube map result. Otherwise, distant or small diffuse bump- (a, b, c) 1 mapped surfaces will appear too bright. N 'nc = + 2 a2 + b2 + c2 2 2.6.3 Normal Perturbation Maps Much of the mathematics used to develop the offset map also Equation 28 applies to normal perturbation maps, particularly the concept of tangent space. The main difference between the two After filtering when rendering, each range-compressed normal approaches is that normal maps encode rotations instead of is then expanded back to its true negative one to one range for offsets. The primary advantage of using rotations is that then use in the lighting model. the perturbed normal remains normalized. When pre-filtering the three-component vector portion of the Normal maps can be represented in a number of different pre-filtered normal map, each averaged vector should be equivalent representations that all are simply different ways to renormalized. This renormalized vector is used for computing encode rotations. Quaternions, 3x3 matrices, and Euler angles specular illumination. are all possibilities. In addition to the normalized three-component vector in the Consider representing rotations as 3x3 matrices. Then normal map, an additional fourth component can store the un- Equation 9 can be rewritten more concretely as signed averaged normal length before renormalization. This is simply  R00 R01 R02  [N' ] [ ] N z  R10 R11 R12  N 'len = aavg + bavg + cavg 2 2 2 x N' y N'z = N x N y    R20 R21 R22    After the diffuse dot product is computed, the diffuse illumina- tion is then modulated by N'len. This prevents heavily filtered But this entire matrix multiply can be replaced with a direct diffuse surfaces from looking too bright. encoding of the perturbed vector if the computation is done in When the range-compressed vector form is used, this four- tangent space! When N equals [0,0,1], then the above matrix component normal map can be stored exactly like an 8-bit per multiply simplifies to component conventional RGBA texture so existing texture [N' x N' y ] N ' z = [R02 R12 R22 ] fetching and filtering hardware needs no modification for this type of normal map. This makes tangent space an extremely efficient coordinate system for bump mapping computations. 3 PREVIOUS HARDWARE The same mathematics developed in the previous section for APPROACHES computing perturbed normals applies to normal maps except The various hardware bump-mapping implementations that normal maps must renormalize the perturbed normal. The described in the literature use different variations on the prin- perturbed normal in Equation 23 is not normalized, but renor- ciples presented in Section 2. malizing it results in 3.1 Texture Embossing N 'n = [a, b, c] Texture embossing [22][24] is one of the simplest and most limited formulations of bump mapping. The fact that the tech- a2 + b2 + c2 nique can be accelerated with minimal hardware support has made texture embossing the basis for more than one hardware Equation 27 vendor’s claim to support bump mapping “in hardware.”1 Un- fortunately, texture embossing has a number of significant Perturbed normals can be encoded using either the surface- limitations that limit the technique’s practical application. dependent [a,b,c] from Equation 24, or the surface-independent [a,b,c] from Equation 25 by making the square patch assump- Texture embossing uses a height field representation as tion. described in Section 2.6.1 for its bump map representation. The height field for the surface to be bump mapped is stored in This requires a signed three-component normal map. Each a scalar texture. Texture embossing numerically determines component of the normal map is guaranteed to be within the the partial differentials necessary for bump mapping from the negative one to positive one range. To avoid hardware support height field texture during rendering. for signed texture filtering, the components can be “range-com- pressed” into the zero to one range typical of conventional The bump-mapped diffuse lighting contribution requires com- texture hardware before download as part of the normal map puting L•N'. Texture embossing assumes that L and N' are construction process. In this case, the range-compressed oriented in tangent space (as developed in Section 2.6.2). Then perturbed normal is encoded as N' can be expressed as in Equation 23. For simplicity and to 1 NVIDIA’s claim that the RIVA TNT and TNT2 graphics chips support hardware bump mapping is based on single-pass hardware support for texture embossing. 10
  • 11. GDC 2000: Advanced OpenGL A Practical and Robust Bump-mapping Game Development Technique for Today's GPUs eliminate Equation 23’s dependency on the surface parameter- ization, texture embossing makes the square patch assumption. So by combining Equation 23 and Equation 25 +1 (3, 1.5, 0.9) +y  ∂F 1   ∂F 1   N' =  −  −  1 +z  ∂u k   ∂v k   +1 -x +x -z -1 Unfortunately, the N' above is not normalized, but if we assume that N'x and N'y are small, then N' will be almost nor- -y -1 malized. We can assume that k is 1 if we scale the height field appropriately. By making these two assumptions, the diffuse computation becomes Figure 5. The unnormalized direction vector (3, 1.5, 0.9) ∂F ∂F pierces the positive X face of the cube map and projects to L • N' = L z − L x − Ly ∂u ∂v the 2D position (0.5, 0.3) on the face. ment functionality such as NVIDIA’s NV_texture_env_- Equation 29 combine4 extension [17] can provide the signed math operations to evaluate Equation 29. When dual-texturing The two terms with partial differentials can be approximated hardware is unavailable, texture embossing can be numerically using finite differences from the height field. So implemented as a multi-pass algorithm using either subtractive ∂F ∂F frame buffer blending or the accumulation buffer to perform the − Lx − Ly ≅ F (u, v ) − F (u + L x ∆u , v + L y ∆v ) ∂u ∂v necessary signed math. Ideally, the texture coordinate displacements and Lz should be Equation 30 computed per-pixel based on a normalized L. In practice, these parameters are computed per-vertex and then linearly interpo- Evaluating Equation 30 requires differencing two height field lated per-pixel. When surfaces are tessellated coarsely relative texture accesses. The height field texture resolution deter- to the surface’s degree of curvature, linear interpolation will mines the ∆u and ∆v displacements. For example if the height produce objectionable artifacts due to the denormalization of L. field is a 128x128 texture, then ∆u and ∆v are both 1/128, Typically, the CPU is responsible for computing the tangent enough to shift by exactly one texel in each direction. Scaling space vectors and texture coordinate displacements required for by the light direction’s Lx and Lv components further reduces texture embossing. The per-vertex math required for comput- these displacements. Bilinear filtering is required because the ing the texture coordinate displacements is however uniform technique relies on texture coordinate displacements less than enough that it can be off-loaded to specialized per-vertex trans- the scale of a texel. form hardware. The GeForce and Quadro GPUs provide such a The result of Equation 30 is a slope and therefore is a signed texture coordinate generation mode through the quantity. Adding this signed quantity to Lz computes L•N'. NV_texgen_emboss extension [15] to support texture em- Some intuition for embossing can be gained by considering a bossing. few basic scenarios. Consider the case of a flat height field. In Texture embossing has several other issues. The basic this case, F is constant. This means the finite difference of F is embossing algorithm does not account for bumped surfaces always zero. Therefore N' = [0, 0, 1]. In this case, L•N' = Lz facing away from the light direction. This is the situation when by Equation 29. Lz is negative. Unfortunately, the finite differencing result In cases where the surface slopes towards the light, the finite from Equation 30 may be positive in this case, yet most hard- ware clamps negative color values to zero so the positive difference in Equation 30 will be positive and L•N' will results from Equation 30 cannot be cancelled by the negative increase beyond Lz. Likewise, in cases where the surface Lz. Instead, such self-shadowed regions of the surfaces appear slopes away from the light, the finite difference will be nega- incorrectly lit. One solution is to force the values of Lx and Ly tive and L•N' will decrease from Lz. to zero at vertices where Lz is negative so Equation 30 must be One case that does not work correctly is when the light direc- zero. This must be done with care to minimize transition arti- tion matches the unperturbed surface normal. In this case, L = facts. [0, 0, 1]. Equation 30 is always zero in this case because Lx Texture embossing does not interact well with mipmap filter- and Lv are zero making the displacement always zero. The ing. The texture displacements are scaled based on the height value of L•N' is computed incorrectly as merely Lz. This field texture resolution. If ∆u and ∆v are 1/128 and 1/128 for anomaly results from texture embossing’s failure to normalize the base level 128x128 mipmap and mipmap filtering uses the N'. In this situation, texture embossed surfaces look flat and 32x32 mipmap level, these displacements will be too small for too bright. In general, the failure to normalize N' exaggerates the finite differencing to approximate a meaningful differential. the diffuse lighting contribution. Bumpy surfaces rendered with texture embossing and mipmap The technique’s two height field texture accesses are well filtering go flat when smaller level mipmaps are used. The suited for dual-texturing hardware. Extended texture environ- problem is that texture embossing is tied to a single height field 11
  • 12. GDC 2000: Advanced OpenGL A Practical and Robust Bump-mapping Game Development Technique for Today's GPUs Point Texture Rasterization Fetchi ng Line Rasterization Texture Environment Register Polygon Applic ati on Combiners Rasterization Stage #0 Texture Unit #0 Pixel Rectangle Texture Unit #1 Stage #1 Rasterization Final Stage Bitmap Color Sum Rasterization Coverage Fog Applic ati on Per-fragment operations Figure 6. The data flow for register combiners and the standard OpenGL fragment coloring operations. The register combiners enable selects between the two fragment coloring pipelines. This figure is based on Figure 3.1 from the OpenGL 1.2.1 specification [25]. scale. Without mipmap filtering, the technique results in Microsoft includes a bump mapping mechanism in DirectX 6 objectionable aliasing artifacts when mipmapping would called BumpEnv [19]. While the inference from the name is otherwise be helpful. that the mechanism supports environment-mapped bump map- While texture embossing is well suited to today’s hardware ping, the hardware functionality is really a fairly limited de- with dual textures and extended texture environment function- pendent texture mechanism. Two sets of texture coordinates ality, the technique suffers from several significant issues. The are supported. When BumpEnv is in use, a 2D perturbation technique is not robust and has failed to be adopted by applica- texture is accessed using the first set of texture coordinates. tions beyond demos. This fetch returns a signed perturbation (dx,dy). Then this signed perturbation is added to the second set of texture coordi- 3.2 Dedicated Hardware Schemes nates. A 2x2 matrix then transforms the perturbed texture Graphics hardware researchers have proposed a variety of coordinates. Lastly, the perturbed and transformed texture approaches for implementing bump mapping through dedicated coordinates are used to access a second 2D texture containing hardware schemes. This section briefly reviews the literature color data. on other hardware bump mapping approaches. The BumpEnv mechanism’s claim to implement bump mapping Evans and Sutherland and SGI have both proposed bump- is somewhat tenuous. If the approach supported a 2x3 matrix mapping approaches for high-end 3D graphics hardware and accessed a cube map texture along the lines of Visa+ [5][21]. Both approaches propose to support bump mapping in approach, the bump-mapping claim could be better justified. the context of hardware that supports per-fragment lighting As it exists today, the BumpEnv functionality can be consid- operations. The SGI technique relies on lighting in tangent ered a degenerate form of Visa+ bump mapping with only a space. The technique described in this paper borrows heavily single cube map face instead of six faces of two fully populated from SGI’s notion of tangent space. cube maps. This is not to say that BumpEnv is not useful. Under limited conditions such as flat or relatively flat surfaces Researchers at the German National Research Center for with relatively small perturbations illuminated by only Information Technology have described several approaches for directional lights (water outdoors for example), BumpEnv can implementing hardware bump mapping. One of their arguably accomplish bump mapping. However, many of approaches referred to as Visa+ bump-mapping [1][6] uses BumpEnv’s robustness issues are direct results of the corners vector offset maps to encode the bump map perturbations and the approach cuts. uses two cube maps to determine the respective lighting diffuse and Phong specular lighting contributions. This is the approach 4 NVIDIA GPU FEATURES critiqued earlier in Section 2.5.2. The technique described in Section 5 heavily relies on two new Another approach developed by the same researchers is called features supported by both the GeForce and Quadro GPUs. Gouraud bump mapping [7]. This approach bears some simi- This section introduces these new features. The first feature is larities to the technique described in this paper. Both tech- support for cube map textures. The second feature is a greatly niques aim for a low-cost solution. 12
  • 13. GDC 2000: Advanced OpenGL A Practical and Robust Bump-mapping Game Development Technique for Today's GPUs RGB Portion A lpha Portion Stage #0 AB+CD, AB, CD AB+CD, AB, CD general combiner stages Stage #1 AB+CD, AB, CD AB+CD, AB, CD Final Combiner RGBA AB+(1-A)C+D, G f ragment Figure 7. The data flow for register combiner stages. extended fragment coloring mechanism called the register Both OpenGL and Direct3D support cube map texturing combiners. through standard API interfaces. Direct3D added cube map support with its DirectX 7 release. Direct3D and OpenGL 4.1 Cube Map Texturing share the same arrangement of cube faces with each other and Cube map texturing is a form of texture mapping that uses an Pixar’s RenderMan API. unnormalized 3D direction vector (s,t,r) to access a texture that Cube maps are more flexible than other hardware-accelerated consists of six square 2D images arranged like the faces of a approaches for texturing based on direction vectors such as cube centered around a coordinate system origin. sphere maps and dual-paraboloid maps [12]. While sphere Figure 5 shows how an unnormalized direction vector [3, 1.5, maps are view dependent, cube maps are view independent. 0.9] is mapped to a 2D location on the correct cube map face. While dual-paraboloid maps are view independent too, dual- First, the face that the vector pierces is determined. This is paraboloid maps require two texture applications instead of the accomplished by determining which of the vector’s components single texture application required for cube maps. And both has the largest magnitude. The greatest magnitude component sphere maps and dual-paraboloid maps require a non-linear and its sign determine the pierced cube map face. There are warping of a set of cube faces to construct the required six possibilities, each corresponding to one of the six cube textures. Cube maps can obviously use cube face images faces: +x, −x, +y, −y, +z, and −z. In the case of [3, 1.5, 0.9], the directly. largest magnitude is the x component’s value 3.0. The Cube map texturing is closely associated with environment component is positive so the +x face is selected. Second, the mapping [2][11][27] because the cube face images can capture remaining two components are divided by the component of the a complete omnidirectional view of the environment around a largest magnitude. This effectively projects these two point. However, environment mapping is just one application components onto the selected cube map face. Finally, the two of cube maps. The bump-mapping technique described in projected coordinates are scaled and biased depending on the Section 5 uses cube maps to perform per-fragment normaliza- selected face to compute a 2D texture coordinate used to access tion of interpolated light and half-angle vectors. the texture image for the selected face. From this point on, the 2D texture coordinate is used to access the selected face’s Further information about OpenGL programming of cube map texture image just as if it was a standard 2D texture. textures is found in Appendix A. Cube map texturing hardware performs the face selection, pro- 4.2 Register Combiners jection, and scale and bias operations per-fragment to access The GeForce and Quadro register combiners functionality pro- cube map textures. The most expensive operation in deter- vides a configurable (but not programmable) means to deter- mining the projected 2D texture coordinate on a particular cube mine per-pixel fragment coloring. When enabled, the register map face because projection requires a divider. A similar per- combiners replace the standard OpenGL per-fragment texture fragment division is required for perspective correct 2D environment, color sum, and fog operations with a greatly texturing. By reusing this single per-pixel divider for both 2D extended mechanism for coloring fragments. Figure 6 shows texturing and cube map texturing, the additional required this data flow. hardware to support cube map texturing is nominal. 13