Free Normal Map Generator — From Any Image, Online

A normal map stores surface direction in its RGB channels so a flat texture catches light like real geometry. Drop in any photo, height map or bump map and get a game-ready normal map from your image in seconds — free, and entirely in your browser.

No image handy? Try a sample:
Trusted by 3D artists and game studios worldwide

How to make a normal map from an image

Three steps, no account and nothing to install.

Upload your image

Normal map vs bump map vs height map

All three fake surface detail on flat geometry, but they store different data, and only one of them belongs in the normal slot of a modern material.

Normal map3 (RGB)Lavender-blue. Each pixel's RGB values encode an X, Y, Z surface direction.No. Shading only.
Bump map1 (grayscale)Grayscale. Only height is stored, so the renderer works out the direction from neighbouring pixels.No. Shading only.
Height map1 (grayscale)Usually the very same grayscale file as a bump map, read as elevation instead.Yes, when used for displacement.

Bump and height maps are often the same file. What changes is how the renderer uses it. Either one works as input here: upload a grayscale height map or bump map and this tool converts it to a normal map.

Keep building your material

Frequently Asked Questions

A normal map stores a full surface direction vector per pixel across the red, green and blue channels, so light can be tilted in any direction. A bump map is a single grayscale channel that only encodes relative height. Normal maps are what real-time engines expect; bump maps are the older, cheaper approximation.

Not from a single 2D image. Roughness and metallic describe physical material properties that cannot be reliably inferred from pixel brightness, so this tool outputs a normal map only. To get a complete PBR set with albedo, roughness, metallic and normal maps, apply Meshy's AI Texture Generator to a 3D model.

Use OpenGL (+Y), the default here, for Blender, Godot, Unity and any glTF asset. Switch to DirectX (-Y) for Unreal Engine and 3ds Max. If your surface looks inverted, with bumps reading as dents under the same light, you picked the wrong convention — flip the switch and download again.

In Unity, assign the PNG to the material's Normal Map slot and set the texture type to Normal map. In Unreal Engine, set the texture's compression to Normalmap, turn off sRGB, and wire it into the Normal input. In Blender, add an Image Texture node set to Non-Color, pass it through a Normal Map node, and connect that to the Principled BSDF Normal input.

No. The conversion runs entirely in your browser using the Canvas API. Your image never leaves your device, there is no account to create, and nothing is stored.

Yes. Height maps, displacement maps, bump maps and ordinary photos all work — the tool reads image brightness as elevation, runs a Sobel filter to measure the slope at every pixel, and encodes that slope as a direction. See the normal map glossary entry for the theory behind it.

Last updated August 2026