Bump vs normal vs displacement map

Updated · 9 min read

Short answer: a bump map and a normal map only change how light falls on a surface, so they add detail cheaply but leave the outline flat. A displacement map moves the real geometry, so it changes the silhouette and casts real shadows, but needs a dense mesh and costs far more to render. Bump stores height in one grey channel, normal stores a direction in three colour channels, and displacement stores height (or a 3D offset) used to push vertices.

The table below compares all three side by side. After it: when to use each, how to combine them, how to make each one, and how to convert between them.

Try it on your own model

Upload a GLB, OBJ, FBX, STL or PLY file (or pick a sample), describe the look, and let AI paint it from every side.

Open the AI 3D Texturing Studio

Bump vs normal vs displacement map: comparison table

Bump mapNormal mapDisplacement map
Data storedHeight: one grey value per pixel (white high, black low)Direction: X, Y, Z of the surface tilt in red, green and blueHeight in grey, or a 3D offset in RGB (vector displacement)
Looks likeA greyscale imageA mostly light-blue imageA greyscale (or rainbow, for vector) image
Changes geometry?No, shading onlyNo, shading onlyYes, moves the vertices
Changes the silhouette?NoNoYes
Real shadows and occlusionNoNoYes, displaced parts cast and receive shadows
Mesh neededAnyAny, with UVs and tangentsA dense or subdivided mesh
Render costLowLowHigh: more triangles, memory and render time
Bit depth8-bit is usually enough8-bit is common; 16-bit avoids banding on smooth curves16 or 32-bit float to avoid stepping
In glTF / GLBNo slotYes (normalTexture)No slot: bake it into the mesh
Typical useSmall detail in offline renders, older or simple pipelinesReal-time detail in games, web, AR and VRFilm, close-ups, terrain, sculpted detail, 3D printing

Bump and normal maps are both forms of bump mapping: they fake relief by tilting the shading normal per pixel. Displacement is the only one of the three that is real geometry. That single difference explains the rest of the table.

What each map stores

Bump map (height map)

A bump map is a greyscale picture of height. The renderer compares each pixel with its neighbours to work out the slope, then shades the surface as if it were tilted that way. Because it only knows "higher or lower", it handles one kind of detail well: small, soft relief such as pores, scratches, fabric weave or hammered metal. Blender’s manual calls it the least accurate but most memory-efficient way to add surface detail.

Normal map

A normal map skips the slope calculation and stores the direction itself, one per pixel, packed into red, green and blue. That gives the renderer more control over how light bends, which is why baked normal maps can carry the look of a whole high-poly sculpt onto a low-poly game model. The encoding, the blue colour and the OpenGL vs DirectX green channel are explained in what is a normal map.

Displacement map

A displacement map also stores height, but the renderer uses it to move the mesh: each vertex is pushed out along its normal by the height under it. A vector displacement map stores a full 3D offset in RGB instead, so it can push surfaces sideways and make overhangs, such as ears, horns or curled leaves, that a plain height map cannot. Because vertices move, the result needs enough vertices to move: a low-poly cube with a displacement map stays a cube.

The same greyscale height image can serve as a bump map or a displacement map. What makes it one or the other is the slot you plug it into, not the file.

When to use each one

  • Use a normal map for almost all real-time work: games, web viewers, AR and VR. It is cheap, works on any mesh with UVs, and glTF, Unity, Unreal, Godot and three.js all support it. It is the default way to add fine and medium detail.
  • Use a bump map when you only have a height image and the detail is small, mostly in offline renderers (Blender Cycles, KeyShot, V-Ray) where it can be plugged in directly. For real-time use, convert it to a normal map instead: glTF has no bump slot, and game engines expect normal maps.
  • Use displacement when the outline must change or the camera gets close enough to see that the surface is flat: brick walls seen from the side, rocky terrain, a close-up of a sculpted face, or a model you will 3D print. Plan for the extra triangles and render time.

The middle ground: parallax mapping

Between normal maps and true displacement sits parallax mapping (and its better version, parallax occlusion mapping). It uses a height map in the shader to shift the texture depending on the viewing angle, so bricks seem to stand out and hide parts of each other as you move. The geometry is still flat, so the silhouette and edges give it away, but it is much cheaper than displacement. Unity’s Standard Shader calls this a Height Map, and its manual says it is usually used together with a normal map.

A quick way to decide

  1. Will anyone see the edge or silhouette of this detail? If yes, you need displacement or modelled geometry.
  2. Is it real-time (a game, a web page, AR or VR)? If yes, use a normal map, plus parallax for deep surfaces like brick or cobblestone.
  3. Is it an offline render with only a height image to hand? A bump map is fine, and quicker to set up.

Using bump, normal and displacement together

They are not exclusive. A common offline setup is displacement for the big shapes, and a normal or bump map for the fine detail on top: the displacement moves stones out of a wall, and the normal map adds the grain on each stone without subdividing the mesh further. Blender’s material settings offer exactly this as Displacement and Bump, next to Bump Only and Displacement Only.

Two things to check when you stack them:

  • Do not double the same detail. If the displacement already moves the stones, a normal map baked from the same stones will over-shade them. Keep the normal map for detail the displacement does not carry. Blender’s manual notes that once a mesh is subdivided very finely, keeping the bump only costs memory and render time.
  • Some engines use only one. In three.js, for example, a bump map is ignored when the material also has a normal map, so combine the two into one normal map first.

How to make each map

MapMost accurate wayQuick way
Bump / heightBake height from a high-poly sculpt onto the low-poly UVsUse the texture’s brightness as height (light = high), or paint it in greyscale
NormalBake it from a high-poly modelGenerate it from a height map or a texture in a normal map generator
DisplacementBake it from a sculpt at 16 or 32-bit floatUse a height map from a texture, at a low strength, on a subdivided mesh

Baking is the route artists use for game assets, because the detail comes from real geometry. What is texture baking explains how a bake works and which maps you can bake.

The quick way reads light and dark as high and low. It works well for stone, wood, bark, concrete, fabric and other textures where shading follows the relief, and badly for printed patterns or strong baked shadows, which turn into fake bumps. Our free normal map generator does it in the browser: drop a texture, set Strength and Detail, flip Invert height if dark parts should be raised, choose OpenGL or DirectX, and download the normal map, plus the height map if you want it as a bump or displacement map. The image never leaves your device.

Plugging them in

ToolBump mapNormal mapDisplacement map
BlenderImage Texture (Non-Color) into a Bump node, then into the Normal inputImage Texture (Non-Color) into a Normal Map node, then into the Normal inputImage Texture (Non-Color) into a Displacement node, then the Material Output’s Displacement; set the material to Displacement Only or Displacement and Bump
three.jsmaterial.bumpMap (ignored if normalMap is set)material.normalMapmaterial.displacementMap, on a geometry with enough vertices
glTF / GLBNot supportednormalTextureNot supported: apply the displacement to the mesh before export

Converting between bump, normal and displacement maps

  • Bump or height to normal: easy and common. The slope of the height becomes the direction. This is what a normal map generator does.
  • Height to displacement: no conversion needed. Plug the same image into the displacement slot, then tune the strength and the midlevel (the grey value that means "no change").
  • Normal to height or displacement: possible but approximate. A normal map stores slopes, not heights, so the height has to be rebuilt by adding up the slopes, and small errors pile up into a tilt across the image. If you have the original height or sculpt, use that instead. Never plug a normal map straight into a bump or displacement slot.

Add normal detail to a whole 3D model

The generator above works on flat textures. For a whole model, the AI 3D Texturing Studio first paints the colour with AI, then Make PBR maps builds a normal map from the painted texture (with a Bumpiness slider), plus roughness, metalness and ambient-occlusion maps. While the PBR preview is on, the GLB you download carries the normal map in glTF’s normal slot. Like any map made from an image, it is estimated from the texture’s light and dark areas, not baked from extra geometry, and the studio does not make displacement maps.

For how the normal map fits with the other maps of a material, read PBR maps explained.

Paint a model, then add normal detail

Texture a model with AI, make its normal, roughness and AO maps, and download one GLB.

Open the studio

Questions

What is the difference between a bump map and a normal map?

A bump map stores only height in one grey channel, and the renderer works out the slope from neighbouring pixels. A normal map stores the slope directly as a direction in three colour channels. Both change shading only, not the geometry.

Is a normal map better than a bump map?

For real-time work, usually yes: it gives more control over how light bends and every major engine supports it. A bump map is simpler to make and fine for small detail in offline renders. You can turn a bump map into a normal map with a normal map generator.

What is the difference between a displacement map and a normal map?

A normal map only changes the lighting, so the outline stays flat. A displacement map moves the mesh itself, so the silhouette changes and the detail casts real shadows, but it needs many more polygons and render time.

Is a height map the same as a bump map?

Mostly, yes. Both are greyscale images where light means high. "Height map" describes the data, while "bump map" and "displacement map" describe how a renderer uses it: shading only, or moving the geometry.

Can I use a normal map as a displacement map?

Not directly. A normal map stores directions, not heights. Convert it to a height map first (the result is approximate), or better, use the height map or sculpt it was made from.

Does a GLB file support displacement or bump maps?

Core glTF 2.0 has a normal map slot but no bump or displacement slot. Convert bump detail into the normal map, and apply displacement to the mesh before exporting the GLB.

Ready to texture something?

Upload a GLB, OBJ, FBX, STL or PLY file (or pick a sample), describe the look, and let AI paint it from every side.

Start texturing

Step-by-step tutorials

Keep reading

Sources

Checked 2026-10-18. Other tools change their features and prices often, so check their own pages too.