By · Updated

Normal Map Generator

Make a Normal Map from a Height or Bump Image, Free

No ratings yet

Drag to orbit, scroll to zoom, right-drag to pan

OneTask is free, with no sign-up, and built by one person.
If this tool saved you time, a coffee helps keep new ones coming.

How the Normal Map Generator works

This normal map generator runs in your browser. A normal map tells a 3D renderer which way each point of a surface faces, so a flat polygon can catch light as if it had grooves, rivets or brickwork. This tool builds one from any greyscale height or bump image: drop the picture, set the strength, and the purple-blue map appears on a lit plane, sphere or cube that you can orbit to judge the relief. Download the map as a PNG at the source resolution and drop it into Blender, Unity, Unreal or Godot. Nothing leaves your browser.

Normal map generator: detail without polygons

A normal map stores the direction a surface faces at every pixel, so a renderer can light a flat polygon as if it were covered in bumps, grooves, rivets or grain. A 2048 × 2048 map carries about 4.2 million surface directions. Modelling the same detail as geometry would take millions of triangles, and a phone or a browser tab cannot draw that at 60 frames a second. That is why almost every real-time 3D material, from game walls to product viewers on shop pages, ships with one.

The map is only a lighting trick. It changes how light falls across the surface, not its outline, so a brick wall with a normal map still has a perfectly straight edge. Where the silhouette has to change, use real geometry or displacement. The heightmap terrain preview shows the difference by displacing a mesh from the same kind of image.

Where normal maps are used

What happens to your image

The tool reads each pixel's brightness with the Rec. 601 weights (0.299 red, 0.587 green, 0.114 blue), so white is high and black is low, and a colour photo is treated as its greyscale. Blur, if set, softens the image before anything is measured. A Sobel filter then measures the slope across and down at every pixel from its eight neighbours. Strength multiplies those slopes, and each result is normalised to a unit vector and packed into colour as (direction × 0.5 + 0.5) × 255.

A perfectly flat pixel therefore comes out as 128, 128, 255, the familiar lavender blue. Red rises and falls with slope across the image and green with slope up and down. Blue stays above the midpoint, because a surface never faces away from the viewer. The filter wraps around the edges, so a seamless height image gives a seamless normal map.

How to read the result

In the preview, the plane shows the map as a wall or floor would use it. The sphere and cube show how it reads at grazing angles, where weak maps disappear and over-strong ones look like crumpled foil. Plain grey is the clearest surface for judging relief. Height image puts the source back on as a colour map. Tiles across repeats the texture, which exposes any seam at the edges, and auto-rotate turns the shape under the light.

Expert tips and common pitfalls

Downloading

Download normal map saves the map itself as a PNG at the source size. Download PNG saves a picture of the lit preview, at up to 4K, for a portfolio or a product listing. To check the map on a real model, load a glTF file into the glTF viewer. Make the source tile first with the seamless texture maker, and generate the matching maps with the roughness and AO map generator.

FAQ

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

A bump or height map is a single channel of height, black to white. A normal map stores a direction for each pixel in the red, green and blue channels. Renderers light normal maps directly, so they are faster and give a better result than deriving the slope every frame.

Should I choose OpenGL or DirectX?

Blender, Godot, Maya, Substance's default and three.js expect OpenGL with Y up. Unreal, 3ds Max and some Unity pipelines expect DirectX with Y down. When in doubt make the map, apply it and see whether bumps look raised when lit from above; if they look sunken, switch.

Why does my map look noisy?

JPEG compression and photo grain become tiny slopes that the filter amplifies. Add a pixel or two of blur, or use a lower strength, and the noise disappears while the real features stay.

What resolution is the downloaded map?

The same as the image you dropped. A 2048-pixel height image gives a 2048-pixel normal map. Resize the source first if you want a specific texture size.

See also: all Mockups & 3D Making tools, Images, Audio, Video & Screen, PDF, SVG, Simulations & Screensavers, Generative Art, Chart Makers, 3D Model Viewers, Drawing Pads, Diagram Makers, 3D Science, Tracker Music.

Related tools