What each one stores
A bump map stores a single grayscale height value per pixel - high means raised, low means recessed. A normal map stores a full 3D direction per pixel as RGB. Bump is one number; normal is three.
How light responds
Bump maps only affect diffuse shading, so they cannot bend specular highlights or reflections. Normal maps give the renderer a real surface direction, so highlights, fresnel and reflections all follow the bumps. In a PBR pipeline, that difference is the whole point.
Which should you use?
Use normal maps for anything lit by a modern engine - Unity, Unreal, Godot, glTF, Blender. Use bump maps only for legacy compatibility, or as the height source you then convert. When in doubt, generate a normal map.
- PBR / physically based lighting → normal map
- Legacy 2D shading or very old tools → bump map
- You only have a bump texture → convert it to a normal map
Converting between them
Bump to normal is straightforward: treat the grayscale as height and compute slopes, which is what our bump-map and height-map converters do. Normal to bump is lossy - a normal map has no absolute height, so you can only approximate a height field from its slopes.