Bump map: Difference between revisions
m (Removing Russian youtube advertising.) |
(Bumpmaps do not need to be the same size as albedo, making them uncompressed is also terrible advice due to file size issues) |
||
Line 40: | Line 40: | ||
== Creation == | == Creation == | ||
A bump map should | A bump map should be rendered in Tangent space and use vector directions X+ Y- Z+. | ||
{{note|The green channel may need to be inverted depending on the software used to create it.}} | {{note|The green channel may need to be inverted depending on the software used to create it.}} | ||
Line 87: | Line 82: | ||
When converting your texture: | When converting your texture: | ||
# Choose BGR8888 or BGRA8888 (if your texture has an alpha channel) as your image format.{{tip|You can ''sometimes'' get away with DXT compression. More specifically, normal maps with DXT compression do not work in the | # Choose BGR8888 or BGRA8888 (if your texture has an alpha channel) as your image format.{{tip|You can ''sometimes'' get away with DXT compression. More specifically, normal maps with DXT compression do not work in the 2006 build of Source, but do work in every other build.}} | ||
# Check the "Normal map" box in the texture's flags list after the import is complete. It's about 1/5 of the way down the list. | # Check the "Normal map" box in the texture's flags list after the import is complete. It's about 1/5 of the way down the list. | ||
Line 94: | Line 89: | ||
==== In [[Vtex]] ==== | ==== In [[Vtex]] ==== | ||
# Save your normal map as a [[TGA]] | # Save your normal map as a [[TGA]]. Give it a name that ends in ''_normal''. The ''_normal'' at the end of the name will affect how [[Vtex]] converts it. For the brick wall example, we would name the file <code>brickwall_normal.tga</code>. | ||
# Add <code>nocompress 1</code> and <code>normal 1</code> to <texture filename>.txt in the same folder as your texture, then compile. | # Add <code>nocompress 1</code> and <code>normal 1</code> to <texture filename>.txt in the same folder as your texture, then compile. | ||
Revision as of 08:58, 1 September 2018

Textures often called Bump Maps, or Normal Maps are used to simulate three-dimensional details on a two-dimensional surface by manipulating its lighting. The process is known as Normal Mapping.

Format
Each pixel in a bump map contains the (x, y, z) coordinates that define a normalized vector.
Because of this each color channel in a bump map has a meaning:
- Red
- Horizontal facing (X axis)
- 0 = left
- 128 = forward, or facing viewer
- 255 = right
- Green
- Vertical facing (Y axis)
- 0 = up
- 128 = forward, or facing viewer
- 255 = down
- Blue
- Height (Z axis). Valve's "flat" bump map textures use 248.
- 0 = facing 'in' to the texture, away from the viewer. This is a 'bad' value. Anything under 128 means that the surface should be facing away from the player, which is not possible.
- 128 = maximum depth capable of receiving dynamic light. It's a bad idea to go under this.
- 255 = facing 'out' of the texture towards the viewer.
The three channels represent a normal vector for every pixel which represents the direction that the pixel is facing in 3D space. This allows the engine to generate shadows and highlights on a two-dimensional surface, or give a 3D model more detail.
A bump map is largely useless for really flat surfaces like smooth concrete or metal, but even rough concrete sometimes has enough depth to it to make one worthwhile.
Creation
A bump map should be rendered in Tangent space and use vector directions X+ Y- Z+.

Programs
Various programs can automate the creation of bump maps, either by image analysis or by using 3D geometry the user provides.
- 2D
- Photoshop or Paint Shop Pro
- Substance Designer
- The GIMP
- nDo
- 3D
- XSI
- ZBrush
- Lightwave
- 3ds Max
- Maya
- Blender
- NVIDIA Melody
- Cinema 4D
- NormalMapper
- xNormal
- Other
- Bitmap2Material 3: Alternative to CrazyBump.
- CrazyBump: Produces some very good normal maps. Some of them can be argued as almost having the same depth as a parallax map.
- Filter Forge: Can generate normal maps for its filters and external images.
- InsaneBump: Specifically made to be a free alternative to CrazyBump, produces high quality normal maps.
- MindTex: A cheaper alternative to CrazyBump. Also produces high-quality normal maps.
- Normal2dudv: a third party tool for converting bump maps to Dx8-friendly du/dv maps.
- ShaderMap: A free alternative to CrazyBump.
- SSBump Generator 5.3: Another free, open source alternative to CrazyBump that generates Self Shadowed Bump Maps as well as normal maps.
Conversion
In VTFEdit
When converting your texture:
- Choose BGR8888 or BGRA8888 (if your texture has an alpha channel) as your image format.
Tip:You can sometimes get away with DXT compression. More specifically, normal maps with DXT compression do not work in the 2006 build of Source, but do work in every other build.
- Check the "Normal map" box in the texture's flags list after the import is complete. It's about 1/5 of the way down the list.

In Vtex
- Save your normal map as a TGA. Give it a name that ends in _normal. 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
. - Add
nocompress 1
andnormal 1
to <texture filename>.txt in the same folder as your texture, then compile.
Implementation
See $bumpmap
.
See also
$ssbump
: creation and usage of Valve's new self-shadowing bump maps.- An old article that explains normal mapping quite well
- Polycount wiki page about normal maps
- Material Creation
- [1]