Free · No upload · OpenGL & DirectX

Normal Map Generator

Turn any image into a normal map in your browser — free, no upload, no signup.

Try:

Texture in, normal map out

Two textures run through the generator with the default settings, so you can judge the output before loading your own image.

Stone texture used as the generator input
Texture
Normal map generated from the stone texture
Normal map
Brick texture used as the generator input
Texture
Normal map generated from the brick texture
Normal map

Both normal maps were exported from this tool with the default settings (strength 2, OpenGL).

Three ways to get a normal map

The generator reads brightness as height. Anything you can express as a grayscale image can become a normal map.

From a texture photo

Photograph stone, fabric, leather, or plaster and turn it into a normal map for material work. Flat, even lighting gives the cleanest result.

From a painted height map or sprite

Paint brighter where the surface should rise. Hand-painted height maps and 2D sprites both work — smoothing helps soften brush strokes.

How to make a normal map

Four decisions, then one download. Each step below tells you what the option actually changes.

01

Pick the input

Use a photo or drawing where bright areas should read as raised and dark areas as recessed. Shadows and printed patterns are read as bumps, so even lighting matters more than resolution.

02

Tune strength and smoothing

Strength sets how steep the bumps look; lower it if the map looks noisy or faceted. Smoothing blurs the height field before the normals are computed, which removes grain at the cost of fine detail.

03

Choose the convention your engine uses

OpenGL (Y+) is what Blender, Unity, and Godot expect. Unreal Engine uses DirectX (Y−). If bumps look inverted in your engine, switch the convention and export again.

04

Download and mark it as a normal map

Download the PNG, then in your engine set the texture type to Normal Map (or disable sRGB on it). A texture left in sRGB mode will shade incorrectly.

Where a generated normal map helps

A normal map adds surface relief without extra geometry. These are the situations where that pays off.

Game materials

You have a brick, rock, or metal texture and want it to catch light on a low-poly mesh instead of looking flat.

2D sprite lighting

Your 2D game uses dynamic lights and you want characters or tiles to react to them, so you need a matching normal map per sprite.

Blender materials

You are building a procedural or photo-based material and need a bump source that a Normal Map node can consume.

Relief from depth maps

You estimated a depth map from a photo and want terrain or relief shading that reacts to light in a viewer or engine.

What this tool does and does not do

The honest spec sheet, so you know the boundaries before you start.

Input and output

Input is JPG, PNG, or WebP up to 40 MB. The export is an 8-bit PNG with a maximum side of 4096 px; larger sources are scaled down proportionally.

Brightness is height

The generator reads luminance as height. Shadows, specular highlights, and printed patterns in a photo will be interpreted as bumps.

Wrap edges is not tiling

The wrap option keeps edge gradients continuous so opposite borders match. It cannot turn a non-tiling texture into a seamless one.

Normal maps only

This tool produces a single normal map PNG. It does not generate ambient occlusion, roughness, displacement, or any other maps.

Normal map generator FAQ

What people check before they download.

Is this normal map generator free?

Yes. There is no charge, no watermark, and no account. Everything runs in your browser.

Do I need to sign up?

No. There is no registration, login, or credits on this site.

Are my images uploaded anywhere?

No. The image is decoded and processed in your browser's memory and is released when you replace it or leave the page. Nothing is sent to a server.

What is the difference between OpenGL and DirectX normal maps, and which should I pick?

They differ in the green channel direction (Y+ vs Y−). Blender, Unity, and Godot expect OpenGL; Unreal Engine expects DirectX. If bumps look inverted in your engine, switch and re-export.

Can it make a seamless, tileable texture?

No. The Wrap edges option only keeps the normal map's edge gradients continuous so the borders meet cleanly. Whether the underlying texture tiles seamlessly depends on the source image, which this tool does not change.

How should I adjust the Strength slider?

Start at the default of 2. Raise it if the surface looks too flat in your engine, lower it if edges look faceted or noisy. Preview changes appear as soon as you move the slider.

How do I get a depth map from a photo first?

This tool does not estimate depth from photos. Use our sister tool Depth Anything: estimate a depth map (1 credit per image), download the grayscale result, and drop it into the generator above.

Open Depth Anything (1 credit per image)

Ready when your texture is

Open the generator, drop an image, and download the PNG — it takes seconds.