Resources / Tools / Normal Map Generator

Normal map generator

Turn a height map or grayscale texture into a tangent-space normal map directly in your browser. Tune the surface strength, smooth noisy height data, switch between OpenGL and DirectX, and export a PNG.

Normal map settings

Runs locally in your browser. Images are not uploaded.
Normal format

Best results come from height information with clear light-to-dark surface relief. Use OpenGL for Blender by default; switch to DirectX when your renderer expects an inverted green channel.

How this normal map generator works

The tool reads image brightness as height, measures the change in height around each pixel, and converts those slopes into tangent-space surface normals. The result is encoded into the red, green, and blue channels of a standard normal map.

This approach is based on the Sobel-style height-to-normal workflow used by Christian Petry's open-source NormalMap-Online project. twirl keeps the core normal-generation workflow while removing unrelated map generators and legacy interface controls.

Use a height map when possible

A proper height map gives the cleanest result because its values already describe surface elevation. White usually represents higher areas and black lower areas. If the relief appears backwards, use Invert height.

You can also use a grayscale photograph, but shadows and highlights in the source can be interpreted as physical depth. For material work, a neutral height texture is usually more reliable.

OpenGL vs DirectX normal maps

The main difference is the green channel. OpenGL normal maps use +Y while DirectX normal maps use -Y. If dents look like bumps or lighting feels inverted in your target renderer, switch the normal format and export again.

Blender commonly expects OpenGL normals. Many real-time pipelines use DirectX normals, but the correct setting depends on the shader and import configuration.

Strength and smoothing

Strength controls how strongly height differences tilt the generated normals. Higher values make relief read more aggressively. Smoothing reduces tiny variations before the normal is calculated, which can help noisy scans and compressed images.

On this page

How it worksSource imagesOpenGL vs DirectXStrength and smoothingFAQ

FAQ

What is a normal map?

A normal map stores surface direction in RGB values so a renderer can shade small bumps and grooves without adding geometry.

Should I use OpenGL or DirectX normal maps?

Use the convention your renderer expects. OpenGL uses a positive green channel, often called +Y. DirectX uses an inverted green channel, often called -Y.

Can I create a normal map from a photo?

Yes, but the best source is a true height map or a grayscale image where brightness represents surface height. Lighting baked into a photo can create false surface detail.

Does this upload my image?

No. The normal map is calculated in your browser and the source image is not uploaded by this tool.

twirl

© 2026 twirlTerms·Privacy