Normal Map Generator

A free normal map generator for turning image detail into surface depth, right in your browser.

Start with a texture or height map. A normal map follows brightness, so photos with shadows or large objects can produce misleading relief.

Try a prepared height map

Generated examples with known heights, for checking relief and normal map settings.

Adjust your normal map

Choose an image to generate your maps.

Conversion settings
Local processing · No credits · No watermark

Your normal map preview will appear here after you choose an image.

Canvas lighting preview. The plane keeps your image proportions and uses a neutral material color.

Repeat the texture to check its edges. This preview does not remove seams.

What is a normal map?

A normal map is a color texture that tells a renderer which direction each point on a surface faces. Its red, green and blue channels encode those directions, creating the appearance of bumps, grooves and fine grain under light. Unlike added geometry, a normal map leaves the model's outline unchanged. This normal map generator estimates surface directions from image brightness: lighter areas become higher, darker areas lower. It works best with evenly lit texture photographs or prepared height images. Shadows and painted color can be mistaken for depth, so inspect the result before applying it to a finished material.

How to make a normal map from an image

  1. 1. Upload your texture

    Drop a photograph or grayscale height image into the normal map maker. Use PNG, JPG or WebP up to 10 MB. Even lighting helps the converter read surface detail instead of cast shadows.

  2. 2. Adjust the surface

    Tune strength and detail, then smooth unwanted noise. Inspect the normal map on the lit sphere and plane. Invert height if raised features should be recessed, and choose your export preset.

  3. 3. Download your maps

    Save the normal map and height map as separate PNG files. Keep their UV scale aligned in your material. Images above 4096 pixels on either edge are resized, with the final dimensions shown before download.

Normal map vs height map vs displacement map

How each surface map changes a material
MapStoresEffect on the model
Normal mapRGB surface directionsChanges shading; preserves the silhouette.
Height mapGrayscale elevationFeeds bump, parallax or displacement effects.
Displacement mapSurface offset valuesMoves geometry when a displacement system applies it.

Keep the normal map and height PNG together in your material library. The height PNG can serve as a displacement input; it is not a displaced mesh. Use a normal map for small surface marks and actual geometry for deep cuts or visible edges.

Export presets: DirectX vs OpenGL green channel

A tangent space normal map describes directions relative to a model's UV surface. OpenGL (+Y) and DirectX (-Y) use opposite green-channel directions, while red and blue remain the same. Start with OpenGL for Blender and Unity, or DirectX for Unreal Engine. The preset and green-channel toggle control the same setting in this normal map creator.

Import the normal map as normal data rather than a color texture. If the vertical lighting looks reversed, check the normal map's green-channel setting in your engine. Flip it in the export or on import; applying the flip twice cancels the correction.

Seamless and tileable textures

Turn on the 2 × 2 tiled repeat to see four copies of your normal map side by side. Use the flat normal map or height view to inspect the center joins, then switch to the lit plane to see how those joins affect shading. This makes mismatched edges easier to find before tiling a material across a large surface.

If you are looking for a seamless texture generator, note that this tool checks repeats but does not repair seams. Begin with a tileable image or edit its opposing edges elsewhere. A normal map cannot hide a discontinuity already present in the source.

PBR maps you can generate

This lightweight PBR texture generator supplies the normal map and grayscale height input for a material workflow. Other PBR channels need information that a single brightness image cannot reliably provide. Here is what is available and what needs separate authoring.

Normal map

Available as PNG

A Sobel gradient converts the height field into a normal map for surface lighting.

Height / displacement

Available as PNG

Grayscale elevation derived from luminance, with your contrast, smoothing and inversion settings applied.

Roughness

Not generated

Surface gloss needs separate authoring. Dark pixels in a photograph do not necessarily mean a smooth material.

Ambient occlusion

Not generated

Reliable occlusion depends on surrounding geometry. This tool does not bake an AO map from your mesh.

Metallic

Not generated

A metalness mask identifies material type. Image brightness alone cannot determine whether a surface is metal.

Works with Blender, Unity, Unreal Engine and 3D printing

Blender

Set the normal map texture to Non-Color and connect it through a Tangent Space Normal Map node. Feed the node into the shader's Normal input.

Unity

Choose the OpenGL export, set Texture Type to Normal map on import, and assign it to the material's normal slot. Check its strength under your scene lighting.

Unreal Engine

Choose DirectX, use normal-map compression and connect the texture to the material's Normal input. Keep color-space conversion disabled for normal data.

3D printing

A normal map changes rendered light only. Apply the height map as geometry displacement in a modeling application, then inspect thickness and mesh quality before exporting a printable model.

Why use Latheo's normal map generator

  • Runs locally, with no image upload. Your browser creates the normal map in a background worker. No account or credits are needed.
  • No watermark. Download a clean normal map and height image for your material workflow.
  • PNG at original resolution. Source dimensions are preserved up to a 4096-pixel long edge; larger inputs are resized proportionally and clearly labeled.

Frequently asked questions

What is a normal map?

A normal map is an RGB texture that stores surface directions for a material shader. It changes how light falls across a model, adding the appearance of fine detail without adding polygons or changing its silhouette.

How do I make a normal map from an image?

Choose a PNG, JPG or WebP texture, then adjust strength, smoothing and contrast in the preview. Select the green-channel convention your renderer expects and download the normal map as a PNG. A separate grayscale height PNG is also available.

Is this normal map generator free?

Yes, this normal map generator is free to use without an account or credits. The conversion runs on your device, and exported PNG files have no watermark.

What is the difference between a normal map and a height map?

A normal map stores a direction in three color channels, which a shader uses for lighting. A height map stores a single grayscale elevation value. When connected to a displacement system, height values can move the actual surface; the resulting geometry depends on subdivision and renderer settings.

Should I use OpenGL or DirectX normal maps — which one for Unity and Unreal?

Start with OpenGL (+Y) for Blender and Unity, and DirectX (-Y) for Unreal Engine. The presets differ only in the normal map's green channel. If the vertical relief looks reversed, check the texture import settings and flip that channel once rather than in both the file and the engine.

Can I make seamless, tileable textures with it?

You can inspect a normal map or height map in a 2 × 2 repeat to spot visible seams. The converter does not blend opposite edges or turn an arbitrary photograph into a seamless texture. For a clean repeat, prepare a tileable source image before converting it.

Are my images uploaded to a server?

No. Image processing happens locally in your browser, and your images are never uploaded. A Web Worker reads the image and creates the normal map and height PNG on your device.

Can I use the generated maps commercially?

You retain ownership of your own source images, and each output is derived from your input. Whether you can use it commercially depends on the rights and licenses attached to that source. Check those permissions before including a normal map in a client project or a product for sale.

What file formats can I export?

You can export a normal map and a grayscale height map as separate 8-bit PNG files. Exports keep the input dimensions unless an edge exceeds 4096 pixels, in which case the image is resized proportionally. Roughness, ambient occlusion and metallic downloads are not provided.

Does it work with Blender, Unity, Unreal Engine and 3D printing?

The PNG normal map can be used in Blender, Unity and Unreal Engine with the appropriate material and import settings. For 3D printing, a normal map alone does not create printable relief. Use the height output to displace and apply geometry in your modeling software, then check the mesh and physical dimensions before printing.

Need a whole 3D model, not just a material?

Build the shape first, then use your normal map for surface detail. Start with an image to 3D model workflow for a reference picture, or a text to 3D model workflow for a written idea.