How to Create Normal Maps in GIMP Using GEGL

This guide explains how to generate 3D normal maps from 2D images directly inside GIMP using the native GEGL Normal Map filter. Normal maps are essential for 3D modeling, game development, and rendering engines to simulate surface depth, bumps, and fine details without increasing polygon counts. By following these clear steps, you will learn how to prepare your texture, apply the filter, adjust critical depth settings, and export your final texture map.

Step 1: Prepare Your Base Image

  1. Open GIMP and load the image you want to convert into a normal map via File > Open.
  2. For the most accurate results, convert the texture to a grayscale heightmap. Go to Image > Mode > Grayscale, or use Colors > Desaturate > Desaturate so white represents high points and black represents low points.
  3. If your texture needs to tile seamlessly in a 3D environment, ensure edges are seamless beforehand by using Filters > Map > Tile Seamless.

Step 2: Open the GEGL Normal Map Filter

  1. Navigate to the top menu and select Filters > Generic > Normal Map.
  2. Alternatively, if your version requires manual GEGL operations, go to Tools > GEGL Operation... and choose normal-map from the dropdown menu.
  3. Ensure the Preview checkbox is enabled so you can see changes in real-time. The image will turn into the standard purple/blue-tinted normal map spectrum.

Step 3: Configure Filter Settings

Adjust the parameters in the dialog box according to your 3D project requirements:

  • Scale: Controls the strength and intensity of the surface bump effect. Higher values produce deeper, more aggressive bumps, while lower values produce subtle surface variations.
  • Filter Type (Kernel): Choose the algorithm used to calculate slopes (e.g., Sobel, Prewitt, or Gradient). The 3x3 or 5x5 Sobel filter generally provides the smoothest and most standard results.
  • Invert X / Invert Y: Switches the direction of the light vector. Invert the Y-axis if you are creating normal maps for DirectX-based engines (such as Unreal Engine), or leave it standard for OpenGL-based engines (such as Blender, Unity, and Godot).
  • Wrap: Enable this setting if your texture needs to wrap seamlessly around 3D geometry to prevent visible seams at the texture boundaries.

Step 4: Apply and Export

  1. Click OK to render the normal map onto your layer.
  2. Go to File > Export As... and save your image in a lossless format like PNG or TGA to preserve fine color gradients and prevent compression artifacts in your 3D application.