Bump map

From Valve Developer Community
Revision as of 22:23, 20 July 2005 by Mungo (talk | contribs) (One-Step Normal Map Creation)

Jump to: navigation, search

If your texture is supposed to have depth to it, adding a normal map (aka bump map) will make the lighting on it far more realistic. (This is perhaps the main reason Doom3, FarCry, and HL2 are able to look so much better than previous games.) The normal map tells the game what direction each pixel would be facing if your texture were in 3D instead of being a flat image. A normal map is kind of useless for really flat surfaces like smooth concrete or metal. But even rough concrete sometimes has enough depth to it to make a normal map worthwhile. This is an old article but explains the concept well: Normal Maps

The normal map should be created in the same dimensions as the image texture (color map) it will go with. There are a few options for how to create one, depending on the quality you want, your skill with various programs, or your patience.

One-Step Normal Map Creation

If you have Photoshop or PaintShop Pro, you can use Nvidia's normal map tools, available here. There are also tools for those who use the GIMP here, but we will focus on the Photoshop tools. To use them, open a copy of the texture and apply the Normal Map filter. Fiddle with the settings until you get something that you feel will be bumpy enough for your texture. The greater the range of colors, the greater the range of angles on the surface. A very flat surface will look that medium blue color all over. If you want to have more control over it, change the image to grayscale and fiddle with brightness and contrast to make certain details stand out before applying the filter- however, be sure to change the texture back to RGB mode, or else the normal map tool will not work. Do this step multiple times to get different details to stand out, and then put the images together in layers with the blend mode set to overlay.

Image texture (color map).
Normal map created from texture on left using nVidia's filter.

Normal Map from a Height Map

Normal Map from a 3D program

Getting the Normal Map in the Game

1. Save your normal map as a TGA in the same resolution as the original texture. Give it a name that ends in _normal. Then convert it to a VTF. The _normal at the end of the name will affect how Vtex converts it. For the brick wall example, we would name the file brickwall_normal.tga. Place the new VTF in the same place as your original texture.

2. Add this line to the VMT somewhere between the braces:

"$bumpmap" "texture name"

and fill in the path and name of your normal map VTF. Here's an example VMT for a normal-mapped material:

    "$basetexture" "walls/brickwall"
    "$surfaceprop" "brick"
    "$bumpmap" "walls/brickwall_normal"

Also note that multiple materials can use the same normal map file.

See also

Creating Materials