strength 3.0
green channel
Normal map

Drop a texture or heightmap here

or click to choose · or paste (Ctrl/Cmd + V)

processed in your browser · never uploaded

Generate a normal map from a texture image or a heightmap (a grayscale image where brightness represents height). A normal map is a shading texture that makes flat polygons look bumpy and detailed, widely used in game engines (Unity, Unreal, Godot), 3D software (Blender), and for building AI assets such as Stable Diffusion textures. The tool treats the image's brightness as height, runs a Sobel filter to measure the slope (gradient) in X and Y, then computes a normal vector per pixel and encodes it into RGB (red = X, green = Y, blue = Z). Raising the strength exaggerates the bumps; lowering it flattens them. You can switch the green channel between OpenGL (+Y) and DirectX (−Y) to match your engine (Unity and Blender typically use OpenGL; Unreal uses DirectX). If you need dark areas to read as raised instead of recessed, "invert height" flips the direction. The result previews instantly and exports straight to PNG with "Download PNG". No software to install and nothing to upload — loading, generating, and saving all happen locally in your browser, so your source art is never sent anywhere.

How to use

  1. Drop the texture or heightmap (PNG/JPG) you want to convert (or click to choose, or paste with Ctrl/Cmd+V).
  2. Use the strength slider to set how pronounced the bumps are, pick the green channel (OpenGL +Y or DirectX −Y), and toggle "invert height" if needed — it regenerates instantly without reloading.
  3. Click "Download PNG" and import the result as a normal map in Unity, Unreal, Godot, or Blender.

FAQ

Are my images uploaded to a server?

No. Loading, generating the normal map, and saving all happen in your browser. The image is never uploaded, stored, or sent anywhere — everything is processed only on your device.

Should I pick OpenGL or DirectX for the green channel?

Match it to your engine. Unity, Blender, and Godot generally use OpenGL (green = +Y), while Unreal Engine uses DirectX (green = −Y). If the surface looks inverted — bumps reading as dents — switch to the other option.

Can I use a regular texture photo instead of a heightmap?

Yes. The tool derives slopes from brightness, so brick, stone, fabric, wood-grain, and similar texture photos produce a convincing normal map. Images with clear light-and-dark contrast give stronger relief, and the strength slider lets you dial it in.

What do "strength" and "invert height" change?

Strength controls how much the slopes are exaggerated: higher gives more depth and relief, lower is smoother. Invert height flips which tones are treated as raised — useful for matching whether your heightmap uses white-is-high or black-is-high.

Can the output be used directly in a game engine or Blender?

Yes. It is a standard tangent-space normal map PNG, so it imports straight into Unity, Unreal, or Godot materials and into Blender's normal map node. Just choose OpenGL or DirectX to match your engine's convention before exporting.