What is a normal map?

Updated · 6 min read

A normal map is a texture that stores a surface direction (a "normal") in each pixel instead of a colour. Its red, green and blue channels hold the X, Y and Z of that direction, so the renderer lights tiny bumps, scratches and seams as if they were modelled, without adding any polygons.

This guide explains how that works, why most normal maps are light blue, the difference between tangent-space and object-space maps, the OpenGL vs DirectX green-channel issue, and how a normal map differs from bump and displacement maps.

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

How a normal map works

A normal is the direction a surface faces, pointing straight out of it. Lighting depends on it: a surface that faces the light is bright, and one that turns away is darker. On a plain low-poly model, the normal changes smoothly across each triangle, so a flat panel lights up flat.

A normal map replaces that smooth normal with a new one for every pixel. The geometry stays exactly the same, but the shading now tilts pixel by pixel, so rivets, pores, wood grain or brick joints catch the light like real relief.

How a direction becomes a colour

Each part of a direction runs from -1 to +1, but a colour channel only runs from 0 to 1. So the value is squeezed: colour = direction × 0.5 + 0.5, and the shader reverses it when it reads the map. The glTF 2.0 spec spells it out: red maps to X, green to Y, blue to Z.

ChannelStoresColour rangeDirection range
RedX (left / right tilt)0 to 1-1 to +1
GreenY (up / down tilt)0 to 1-1 to +1
BlueZ (straight out of the surface)0.5 to 10 to +1

Why normal maps look blue or purple

On most surfaces, most pixels point almost straight out. "Straight out" is X = 0, Y = 0, Z = 1, which encodes to the colour (0.5, 0.5, 1.0), or about (128, 128, 255) in an 8-bit image: a light blue-violet. Only slopes shift the colour, so edges facing one way turn pinkish (more red) and edges facing up turn greenish (more green).

That is why a normal map does not look like a photo of the surface. It holds data, not colour, so it must be loaded as Non-Color (Blender) or linear data, never as sRGB. Loading it as a colour image is the most common reason a normal map shades strangely.

Tangent space vs object space

The direction in each pixel has to be measured relative to something. There are two common choices:

Tangent spaceObject space
Directions are relative toThe surface at that point (its normal, plus a tangent and bitangent that follow the UVs)The whole object’s own X, Y and Z axes
Typical lookMostly light blueA rainbow of colours
Works on a bending, animated meshYesPoorly, because the map does not follow the deformation
Can be tiled or reused on other modelsYesNo, it only fits the mesh it was made for
Needs tangentsYes (computed from the UVs if the file has none)No
Where you see itGames, glTF/GLB, most engines and renderersSome baking and static-mesh workflows

Tangent-space maps are the default almost everywhere. Blender’s manual calls them the most common type because they survive object transforms and mesh deformation. glTF supports only tangent-space normal maps: if a GLB has no tangents, the viewer computes them with the MikkTSpace method from the mesh and its UVs.

Because tangent space is built from the UVs, a tangent-space normal map only fits the UV layout it was made for. Re-unwrap the model and the old map no longer lines up. If UVs are new to you, see UV unwrapping explained.

OpenGL vs DirectX normal maps

There are two conventions for the green channel, and they are exact opposites:

  • OpenGL (Y+, "green up"): Blender, Unity, Godot, three.js and the glTF format. The Blender glTF manual lists glTF normal maps as "tangent space, +Y up".
  • DirectX (Y-, "green down"): Unreal Engine and some other DirectX-based tools.

Red and blue are the same in both. If bumps look pushed in when they should stick out, or the light seems to come from below, the map is in the other convention. The fix is to invert the green channel, which most texture tools and our normal map generator can do with one switch.

Normal map vs bump map vs displacement map

Bump (height) mapNormal mapDisplacement map
StoresOne grey value per pixel: heightThree values per pixel: a directionOne grey value per pixel: height (or a vector)
What it changesShading onlyShading onlyMoves the actual vertices
Changes the outline (silhouette)NoNoYes
CostCheapCheapNeeds a dense or subdivided mesh
Typical useSimple surface detail, older pipelinesReal-time detail in games, web and ARFilm, close-ups, real geometry for 3D printing

A bump map only says how high each pixel is, so the renderer has to work out the slope from neighbouring pixels. A normal map stores the slope directly, in two directions, which gives more control over how light bends. Unity’s manual describes both as kinds of bump mapping.

The big limit of both: the edge of the model does not change. Look at a normal-mapped brick wall from the side and its outline is still perfectly flat. When the silhouette has to change, or the detail must be printed, you need real geometry or displacement.

How normal maps are made

  • Baked from a high-poly model. Artists sculpt a detailed version, then bake its surface directions onto the low-poly game model’s UVs. This gives the most accurate result.
  • Made from an image. A tool reads the texture’s brightness as height and turns the slopes into a normal map. It is fast and works well on stone, wood, fabric and other textures where light and dark follow the relief, but it is a guess from shading.
  • Painted or sculpted directly in texturing apps that paint height or normal detail as layers.

Make a normal map in your browser

From a texture or photo: our free normal map generator turns an image into a tangent-space normal map, with strength and detail settings, an OpenGL / DirectX switch and a moving-light preview. The image is processed on your device.

For a whole 3D model: in the AI 3D Texturing Studio, first paint the model’s colour with AI, then press Make PBR maps. The studio builds a normal map from the painted texture (with a Bumpiness slider), plus roughness, metal and ambient-occlusion maps. While the PBR preview is on, the GLB you download carries the normal map in glTF’s normal slot, and PBR maps (PNG) saves it as a separate image. Like any image-based normal map, it is estimated from the texture’s light and dark areas, not baked from extra geometry.

To see how the normal map fits next to the other maps, read PBR maps explained.

Paint a model, then add normal detail

Texture a model with AI and make its normal, roughness and AO maps in the browser.

Open the studio

Questions

Why is a normal map blue?

Because most pixels point straight out of the surface. That direction (X 0, Y 0, Z 1) is stored as the colour 0.5, 0.5, 1.0, a light blue. Only the slopes add red or green.

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

A bump map stores only height (one grey value per pixel) and the renderer works out the slope. A normal map stores the slope itself as a direction in three channels. Neither changes the model’s outline.

Does a normal map change the shape of the model?

No. It only changes how light falls on the surface. The geometry and the silhouette stay the same. To change the shape you need a displacement map or more geometry.

Why do my normal map bumps look like dents?

The map is probably in the other green-channel convention. OpenGL maps (Blender, Unity, Godot, glTF) and DirectX maps (Unreal Engine) differ only in green. Invert the green channel and it will look right.

Can a GLB file contain a normal map?

Yes. glTF 2.0 has a normalTexture slot for a tangent-space normal map, stored as linear data. A GLB can pack that image inside the file next to the base colour texture.

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-17. Other tools change their features and prices often, so check their own pages too.