Normal map in Blender: what it is, how to use it and how to bake one
Short answer
A normal map is an RGB image where each pixel stores a surface direction: red for X, green for Y, blue for Z. It makes light react as if the surface had fine detail, without adding polygons. In Blender, load it in an Image Texture node set to Non-Color, run it through a Normal Map node and into the Normal input of the Principled BSDF. To make one, bake a high poly model onto a low poly model in Cycles.
What a normal map stores, OpenGL vs DirectX, wiring one up and baking one in Cycles: every menu name below matches the Blender 5 interface and was checked against the Blender 5.2 manual.
What is a normal map?
Every surface has a normal: the direction pointing straight out of it at a given point. The render engine uses it to work out how light bounces off. A normal map replaces that direction, pixel by pixel, with one stored in an image. Scratches, skin pores, rivets or tile grout then catch the light as if they were modeled.
Normal mapping is the technique; the normal map is the texture. The geometry stays the same: seen edge-on, a flat wall is still flat, and the fake detail casts no shadow on itself.
Why normal maps are blue: what R, G and B store
Most normal maps are tangent space maps. Each point on the surface gets its own frame of reference: Z points out of the surface, X and Y follow the directions of the UV map. Red stores X, green stores Y, blue stores Z. The image holds values from 0 to 1, which become directions from -1 to 1; in the Cycles source code, the conversion is (value - 0.5) × 2.
An untouched surface points straight along Z: 0.5 red, 0.5 green, 1.0 blue, which is also the default Color of the Normal Map node. In an 8-bit image, with 256 levels per channel, that is roughly RGB 128, 128, 255, a light lavender blue. Gently sloped areas stay close to it, hence the familiar blue-purple look.
The node also accepts Object and World space maps, but the manual calls tangent space the right choice in most cases, because the map keeps working on animated objects.
OpenGL vs DirectX normal maps
There are two conventions for the green channel. In OpenGL, its Y axis points up; in DirectX, it points down. Red and blue are the same in both. According to the manual, Blender uses OpenGL by default, for rendering and for baking. A DirectX map plugged in as is looks lit from the wrong side, and bumps can read as dents.
Some texture libraries ship both versions, with GL or DX in the file name; the guide to free 3D textures covers a few of them. For Blender, grab the GL file. If all you have is a DirectX map:
- Blender 5.1 and later: set Convention to DirectX on the Normal Map node. The option arrived in 5.1, per the release notes.
- Older versions: split the channels with Separate Color, flip green alone with Invert Color, then rebuild the image with Combine Color.
- Baking for software that expects DirectX: set the green Swizzle to -Y.
How to use a normal map in Blender
- Open the object's material in the Shader Editor; the Shading workspace is the quickest way.
- Press Shift+A, Texture, Image Texture, then click Open and pick the file.
- Set the image Color Space to Non-Color. A normal map holds data encoded as color, and the manual says this setting is needed for correct results.
- Press Shift+A, Displacement, Normal Map (Blender 4.5 and earlier kept it under Vector). Connect the image's Color output to the node's Color input.
- Connect the node's Normal output to the Normal input of the Principled BSDF.
- Check Space (Tangent) and Convention. If the mesh has several UV maps, pick the one the normal map was made for in UV Map.
Strength scales the effect: 1, the default, applies the map as is, 0 switches it off, and values above 1, up to 10, exaggerate it. The Principled BSDF has a second Normal input under Coat that only affects the clear coat; leave it empty to keep a smooth coat over a bumpy base. The guide to textures in Blender goes further into Image Texture and UV coordinates.
How to bake a normal map in Blender, from high poly to low poly
Baking transfers detail from a heavy model, often a sculpt, onto a low poly model that wraps around it. Baking is a Cycles feature, so first set Render Engine to Cycles in Render Properties.
- Line up both models in the same place. The low poly needs a UV map with no overlapping islands.
- In the low poly's material, add an Image Texture node, click New, choose a size and set Color Space to Non-Color. Leave it unconnected but selected: since Blender 5.0, baking only writes to the selected, active Image Texture node, and every material on the object needs one, or nothing is baked for that material.
- In the Bake panel, set Bake Type to Normal. Under Influence, set Space to Tangent and Swizzle to +X, +Y, +Z.
- Enable Selected to Active. Rays are cast inward from the low poly. If the high poly sticks out in places, raise Extrusion, which inflates the low poly for the bake. Max Ray Distance caps how far rays travel; 0 means no limit.
- Under Output, set Target to Image Textures. Margin Size extends pixels past the edges of the UV islands.
- In Object Mode, click the high poly, then Shift-click the low poly: the last one selected becomes the active object, which receives the bake. Click Bake.
- The result only lives inside Blender for now. In the Image Editor, use Image, Save As (Shift+Alt+S) and save as PNG or OpenEXR: JPEG is lossy, and the lost precision goes straight into the directions.
Without a cage, rays follow the mesh normals, which the manual warns produces glitches on edges. Enable Cage for more control: Blender inflates the low poly by Cage Extrusion, or uses a Cage Object, a hand-tweaked copy of the low poly that keeps the same topology.
Each object you bake from has a fixed memory cost, so the manual suggests joining the high poly pieces first. And if the detail comes from a Multiresolution modifier, Bake from Multires bakes the normal map on that same object, with no second mesh needed.
Normal map vs bump map vs displacement
- Bump map: a grayscale height. The Bump node derives the normal by sampling that height at the shading point and at two nearby points. Easy to paint or to generate procedurally.
- Normal map: a full direction per pixel, in three channels. It is what you bake and export to game engines.
- Displacement: the geometry actually moves. Silhouettes change and the detail casts real shadows, but the mesh has to be finely subdivided, which costs memory.
The method is set per material under Settings, Surface, Displacement: Bump Only (the default), Displacement Only, or Displacement and Bump. With Bump Only, the manual notes, silhouettes are not accurate and there is no self-shadowing. To stack a bump map on a normal map, feed the Normal Map node's output into the Bump node's Normal input. With true displacement, the Normal Map node's Base option (Cycles since 5.1, EEVEE since 5.2) picks Original Base when the normal map and displacement map were made to match, or Displaced Base to lay the normal map over the displaced surface.
Common normal map problems
- Map left in sRGB: Blender decodes it like a photo, the neutral 0.5 is no longer 0.5, and the whole surface looks tilted. Switch to Non-Color.
- Lighting looks flipped: it is a DirectX map. Change Convention or invert the green channel.
- Visible seams: the bake margin is too small, or the UVs were edited after baking. A tangent space map only matches the UVs it was baked with.
- Overlapping UVs: two faces in the same spot of the image both write to it. Separate the islands, or let Pack Islands lay them out.
- Artifacts along hard edges: use a cage, and avoid split edges such as an applied Edge Split modifier.
- Nothing gets baked: the target Image Texture node is not selected. A material without one is skipped, so its faces are not baked.
Making a normal map from a photo
A photo records color and light, not depth. Simple normal map generators, like the two filters below, work from a height map instead: the photo in grayscale, with bright read as high and dark as low. A dark stain turns into a dent, so treat the result as an approximation.
In Blender you can skip the conversion for rendering: plug the photo, set to Non-Color, into the Height input of a Bump node and route its output to the shader. To get an actual normal map file, bake the object with Bake Type Normal and Selected to Active off, using a second Image Texture node as the target. The Cycles source code shows that the Normal bake records the material's shading normal, bump included.
Outside Blender, two free, open source programs can do it: GIMP, under Filters, Generic, Normal Map, with Flip X and Flip Y to fix the orientation, and Krita, with its Height to Normal Map filter. Online generators exist too; check whether they output OpenGL or DirectX.
Frequently asked questions
What is a normal map used for?
To add surface detail such as scratches, pores or rivets without adding geometry. The render engine reads a direction from each pixel instead of the mesh normal, so light reacts as if the detail were modeled. The silhouette of the object does not change.
Why are normal maps blue?
A flat, untouched surface points straight out along Z, which is stored as 0.5 red, 0.5 green and 1.0 blue: roughly RGB 128, 128, 255 in an 8-bit image. Gently sloped areas stay close to that value, so tangent space normal maps look lavender blue.
Does Blender use OpenGL or DirectX normal maps?
OpenGL, for both rendering and baking, with the Y axis of the green channel pointing up. DirectX maps point it down. Since Blender 5.1, the Normal Map node has a Convention setting that reads DirectX maps; in older versions, invert the green channel.
Normal map vs bump map: what is the difference?
A bump map is a grayscale height, and the Bump node works out the slope at render time. A normal map stores the direction directly in three channels. Neither one changes the geometry: for detail that changes the silhouette, use displacement.
How do I bake a normal map in Blender?
Switch to Cycles. Give the low poly model UVs and a selected, unconnected Image Texture node with a new image. Select the high poly, then Shift-click the low poly. In Render Properties, Bake, set Bake Type to Normal, enable Selected to Active, adjust Extrusion, click Bake and save the image.
Rendering the animation on TURNA
When a scene is already well optimised and the frame count is what takes the time, the remaining lever is rendering several frames at once. TURNA does this for Blender: an add-on (Blender 4.0 to 5.2, Cycles and Eevee) sends the scene in one click, and the frames are split across 1, 2, 4 or 8 GPUs in parallel, RTX 5090 first and RTX 4090 when none is free. The add-on shows the estimated cost before anything starts. Prices start at €4.90 per hour, billed on the time actually used, with a 2-minute minimum (30 seconds until November 9), and new accounts get €25 of free credit. A single still image is still rendered by one machine, so the gain is on animations. Tiers and worked examples are on the Blender render farm page.
Before you start an animation, the render time calculator estimates how long the sequence will take from the time of one frame, measured with the final materials and textures, and the number of frames.



