NormalMap

Free Normal Map Generator

Turn any height map or photo into a tangent-space normal map in your browser - free, no upload.

Quick answer: Upload a height map or photo, tune Strength and Smoothing, then download a tangent-space normal map as PNG - free and fully in your browser.

Drop an image or click to upload

Height map or photo → normal map. Runs locally.

OpenGL (Blender, Unity) uses Y+ up (default). DirectX / Unreal may need the green channel flipped.

Input

No image

Normal map

Core facts
Price100% free, no sign-up, no watermark
InputHeight map or photo (JPG, PNG, WebP)
OutputTangent-space normal map (PNG)
ProcessingRuns locally in your browser - images never uploaded

What is Normal Map Generator?

A normal map is a texture that stores surface direction instead of colour. Each pixel encodes a small tilt in red, green and blue, so a flat low-poly model can look like it has bolts, bricks or scratches without adding geometry. This normal map generator converts a grayscale height map - or a plain photo you turn into one - into a tangent-space normal map using a Sobel gradient. Everything runs locally in your browser, so your images are never uploaded to a server.

Common Uses for Normal Map Generator

  • Create normal maps for Blender, Unity or Unreal materials from height maps
  • Turn a bump map or grayscale displacement into a tangent-space normal map
  • Add surface detail to 3D-printed models without extra polygons
  • Generate tileable normal maps for game environment textures
  • Convert a photographed surface (fabric, stone, wood) into a normal map

How this normal map generator works

The generator converts your image to luminance (a height value per pixel), optionally blurs it to remove noise, then runs a Sobel operator to measure the slope in the X and Y directions. Those slopes become the X and Y components of a surface normal, with Z pointing straight out. The normal is normalised and packed into RGB, where 128,128,255 is a flat surface. Because the maths is simple and local, it runs instantly even on large textures.

Normal map vs bump map - what's the difference?

A bump map stores height in a single grayscale channel, so it can only fake shading. A normal map stores a full 3D direction per pixel, so lighting, reflections and specular highlights all respond correctly. Engines ultimately use normals for lighting, so a bump map is usually converted to a normal map before use - which is exactly what this tool does.

Normal map resolution and format tips

Match the normal map resolution to your diffuse texture and keep it a power of two (512, 1024, 2048, 4096) for clean mipmapping. Export as PNG to avoid JPEG artefacts - compression noise in a normal map shows up as weird shading. For mobile, 1024 is usually plenty; use 2048 or 4096 only for hero assets where the surface is seen up close.

Making a height map from a photo

For photographic surfaces, convert the image to grayscale and boost contrast first, then raise the Smoothing value in this tool - photos carry high-frequency noise that turns into a gritty normal map. A good workflow is: desaturate, adjust levels so the range spans black to white, blur slightly, then generate. For man-made repeating patterns, build the height map by hand or with a displacement layer and the result will be far cleaner.

Frequently Asked Questions

Is this normal map generator free?
Yes. It is completely free, runs in your browser, and needs no sign-up or watermark. Your images never leave your device.
What image should I upload?
Any grayscale height map works best: light pixels are high, dark pixels are low. You can also upload a normal photo and increase smoothing - the generator converts luminance to height before computing normals.
OpenGL or DirectX normal map?
By default the output is OpenGL / tangent-space (Y+ up), used by Blender, Unity and glTF. If a target engine expects DirectX (Y- down, some Unreal setups), tick 'Flip green (DirectX)'.
How do I make the effect stronger?
Raise the Strength slider. Higher values exaggerate the slope encoded in the map, making bumps look deeper. Values around 2-3 suit most height maps; beyond 5 the map becomes noisy.
Can I get a tileable / seamless normal map?
If your source height map is seamless, the output is seamless too. The generator samples edge pixels from the opposite border, so maps designed to tile will not show seams.

More Normal Map Tools

More Normal Map Tools