How to make a normal map from a photo

Turn a photo of a surface into normal, height, roughness and occlusion maps: quick ones in your browser at once, AI ones on our GPU in seconds.

22 September 2026 · updated 29 September 2026 · 2 min read

Image to normal map with a cobblestone photo lit on a sphere from its AI maps

You have a photo of a wall, a floor, a piece of fabric, and the engine wants a normal map. This takes a minute. The example is a real cobblestone floor from Poly Haven, and it is one of the two samples on the tool, so you can follow along with the same photo.

  • A photo of a cobblestone floor, taken straight down

    The photo

  • The cobblestones on a sphere, lit from the normal, height and roughness maps made from the photo

    Lit from its maps

  1. Pick the photo

    Straight on, not at an angle. Even light, overcast or a shaded wall, because hard shadows in the photo will be read as depth. If the photo tiles already, the maps will too; the seamless line tells you whether it does. To make a photo tile, use the texture generator first.

  2. Drop it in

    Open Image to normal map and drop the photo, or pick Cobblestones or Brick wall. The quick maps appear at once, made in your browser from the photo's brightness and detail, and the sphere shows them under a light. Drag it around, or switch to Plane 3×3 to see the surface tiled.

  3. Make AI maps

    The quick maps take brightness for height: light is high, dark is low. That works for stone and plaster and fails on anything painted, where a white mortar line comes out raised and a dark stripe becomes a groove. Press Make AI maps and the photo goes to our GPU, where models trained on real materials read the shape instead: the stones raised, the joints sunk. It takes about ten seconds and the photo is not kept.

    The switch at the top flips between AI maps and Quick maps, so you can compare them on the same sphere. The line under it says what the surface was read as, "stone" here.

  4. Set strength, occlusion and the convention

    Strength scales the bumps: too low and the surface looks painted, too high and every grain becomes a crater. Adjust it while looking at the sphere. Occlusion sets how dark the crevices go.

    On the quick maps you also get Smoothing, which blurs the height a pixel or two to remove photo noise and JPEG grain, and Invert height, for the rare photo whose dark parts are the raised ones.

    Blender, glTF, three.js and Godot use OpenGL normals, which is the default. Tick DirectX normals for Unreal.

  5. Download

    Download maps (ZIP): normal, height, roughness and occlusion as PNGs named after the photo. The AI height is 16-bit, so displacement comes out smooth instead of stepped. Click any map under the sphere to download it alone.

What the maps are

Normal for the bumps, height for displacement or parallax, roughness for how the light scatters, occlusion to darken the crevices. What a PBR material is explains what each one does in the renderer.

This tool keeps the photo's own colour. Need a whole material with no photo to start from, a base colour that tiles, and a metallic map for rusty or painted metal? The texture generator makes all five maps from a description.

Image to normal map · Make the normal, height and roughness maps of any photo, so a flat surface catches the light like the real one.Free · on our server

More tutorials