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.