How to Create Seamless Normal Maps in GIMP

Creating seamless normal maps in GIMP is a straightforward process that allows 3D artists and game developers to add realistic surface depth to 3D models without visible edge artifacts. This guide covers how to make a standard texture tileable using offset and healing tools, generate a normal map using GIMP's built-in GEGL filters, and export the final texture for use in modern rendering engines.

Step 1: Make the Base Texture Seamless

Before generating a normal map, you must eliminate any visible seams on your base texture so the resulting depth map tiles perfectly.

  1. Open your base texture image in GIMP by navigating to File > Open.
  2. Go to Layer > Transform > Offset.
  3. In the Offset dialog, click the By width/2, height/2 button. This shifts the edges of the image to the center, exposing the seams.
  4. Click OK.
  5. Select the Clone Tool (press C) or the Healing Tool (press H).
  6. Hold Ctrl to select a clean source area from the texture, then carefully paint over the visible horizontal and vertical cross-seams in the center until they blend naturally with the surrounding pattern.

Step 2: Convert the Image to a Normal Map

GIMP 2.10 and newer includes a native normal map generator powered by GEGL, removing the need for external plugins.

  1. With your seamless texture selected, navigate to Filters > Generic > Normal Map.
  2. A preview window will appear, showing your texture converted into a tangent-space normal map (characterized by its blue/purple coloration).

Step 3: Configure Normal Map Settings

Adjust the normal map generation settings to match the requirements of your 3D software or game engine:

  • Scale: Controls the perceived depth and strength of the bumps. Higher values produce deeper, more aggressive bumps, while lower values produce subtle surface variations.
  • Filter: Choose the algorithm used to detect edges. Sobel is standard for general textures, while Prewitt or Gradient can provide different sharpness levels.
  • Invert Y: Check this option if your target engine uses the DirectX format (such as Unreal Engine). Leave it unchecked for OpenGL formats (such as Blender, Unity, or Godot).
  • Invert X: Rarely needed, but available if your pipeline requires an inverted red channel.

Click OK once you are satisfied with the preview.

Step 4: Verify Seamlessness

Because the Normal Map filter samples neighboring pixels, edge pixels may occasionally sample across the image boundaries slightly differently.

  1. Go back to Layer > Transform > Offset.
  2. Offset the normal map by half the width and height again.
  3. Inspect the center lines. If any slight discoloration or line appears, use the Clone Tool set to a soft brush with low opacity to gently blend the affected areas, or re-run the normal filter on a texture with an extra padded border.

Step 5: Export the Normal Map

  1. Navigate to File > Export As.
  2. Choose a lossless file format such as PNG or TGA to prevent compression artifacts from corrupting the vector data in the normal channels.
  3. Click Export, ensure color profile and pixel data settings are preserved, and confirm the export.