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.

Known limitations (checked 2026-09-13)

This tool produces tangent-space normal maps from 8-bit luminance, with Sobel gradients and clamped edge sampling. That means: it cannot build a normal map from geometry (use a engine bake for that); 8-bit input can band on very smooth slopes; borders use clamped rather than wrapped samples, so perfect tiling needs a tileable height map; and there is no 16-bit PNG output. Conventions follow the Epic and Unity documentation: OpenGL-style maps (green up) suit Blender, Unity and glTF, while DirectX-style targets invert green - verify under a moving light in your target engine.

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

A bump map stores height in a single grayscale channel and carries no direction data - the renderer has to interpret it at shading time. A normal map stores an explicit 3D direction per pixel, so any engine lights it consistently, including specular and reflections. 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?
Almost. Edge pixels use clamped sampling (the border pixel is repeated), so a tileable height map gives a nearly seamless result, but a faint seam can remain. For perfectly tiling output, make the height map itself tile first (offset or mirror its edges), then verify with the 2x2 grid test.

More Normal Map Tools

More Normal Map Tools