GenPBR Normal Map Generator

Normal map generator

Free online normal map maker. Upload a PNG, diffuse, or photo, preview tangent-space normals in 3D, and export PNG. No install, and no signup for core resolutions.

Free · No signup for core use · 3 days free · card required · no charge today · Unity, Unreal, Blender & Roblox

A normal map generator converts a flat color texture into a tangent-space normal map so real-time lights pick up grooves, grains, and edges. GenPBR does that in the browser. The same tool is what people mean by a normal map maker, a normal map creator, or a normal map online converter.

Default normals are OpenGL (Roblox, Unity, Blender). Check Invert normal Y (DirectX) on the generator when Unreal, or any other DirectX pipeline, shows dents instead of bumps.

Make a normal map from an image

  1. Open the generator and upload a PNG, JPG, or WebP. A clean albedo or diffuse is better than a beauty render with baked shadows.
  2. Raise Normal Strength until the 3D preview shows the relief you want. The slider runs from 0 to 10. Most plates look believable well below the top of that range.
  3. Orbit the preview under the light. Check grazing angles, where bad normals show up first.
  4. Export PNG. Import that file as non-color data, not as an sRGB color texture.

What the colors in a normal map mean

A tangent-space normal map is not a picture of the surface. Red, green, and blue store X, Y, and Z direction, shifted into the 0 to 255 range. A flat surface is the familiar purple-blue (about 128, 128, 255). Red and green move as the surface tilts. Engines reconstruct a lighting normal from those pixels, so the file has to stay linear. Saving it through a color-space conversion, or a JPEG, softens or shifts that data.

OpenGL and DirectX (green channel)

Two common conventions disagree on the green channel. GenPBR's default matches OpenGL: positive Y points up the texture. That is the usual import for Roblox SurfaceAppearance, Unity, and Blender. Unreal Engine commonly expects DirectX, which is the same map with green flipped.

You do not re-author the map to switch. On the generator, Invert normal Y (DirectX) flips green before export. If a material looks inside-out after import, that checkbox is the first thing to change. Preview again before you export a new PNG.

PNG, diffuse, and photos

JPEG blocks and heavy compression become false high-frequency detail in inferred normals. A PNG or other lossless plate avoids that. The PNG to normal map page is the short checklist for that file type. If the source is specifically a diffuse or albedo, the diffuse to normal map page covers when inference is enough and when you should rebake from height or a high poly instead.

  • Painted color variation that is not geometric will still become bumps. Lower strength, or paint a flatter albedo.
  • Text, logos, and hard color splits read as ledges. Mask them out or use a cleaner plate.
  • Tiling textures should be seamless before you generate. The normal map follows the source edges.

How strong the normal should be

  • Start low and move the light. Over-strong normals sparkle under HDR and fight the roughness map.
  • Fabric, plaster, and fine stone usually want less strength than brick mortar or deep chips.
  • If the preview looks noisy but the large forms are right, the source is carrying compression or sensor grain. Use a cleaner PNG before you push the slider.

Import checklist

TargetAfter you export
RobloxSurfaceAppearance NormalMap. Leave Invert normal Y off.
UnityTexture type Normal map. Leave Invert normal Y off unless the material looks inverted.
BlenderImage Texture node set to Non-Color, into a Normal Map node, then Principled BSDF. Default OpenGL export.
UnrealNormal compression, sRGB off. Turn on Invert normal Y before export if the green channel is inverted in the level.

Normals next to height and roughness

A normal map changes shading. It does not move the silhouette. When you need actual displacement or parallax, generate a grayscale height map on the height map generator from the same image, then check that raised areas agree with the normal. Roughness and metalness come from the roughness map generator and metallic map generator, or all at once from the generator. For the full set, see image to PBR.

Longer background on tangent-space maps and when to stop inferring: the normal map guide.

Frequently asked questions

Commercial license

Start trial