Texturing

OpenGL vs DirectX Normal Maps: Fix Inverted Surface Details

Learn when to flip a normal map’s green channel, diagnose inverted detail and convert OpenGL to DirectX maps locally with the free 3DSkillUp tool.

Texturing3DSKILLUP / JOURNAL
OpenGL vs DirectX Normal Maps: Fix Inverted Surface Details
6 MIN READ26 Sept 2026

A normal map can look correct in your texturing application and make the same surface look strangely dented in another renderer. Before rebaking the asset, check its tangent-space convention. OpenGL and DirectX normal maps use opposite signs for the Y component, stored in the green channel. A mismatch can reverse the lighting response along that direction.

This guide explains how to identify that specific problem, convert the map safely and check the result. It applies to tangent-space normal maps, usually recognizable by their predominantly blue-purple appearance. Object-space maps and height maps need different treatment.

What changes between OpenGL and DirectX normal maps?

For a standard 8-bit tangent-space map, converting between the two Y conventions means replacing every green value with 255 minus that value. Red, blue and alpha remain unchanged. The image dimensions, UV layout and pixel positions also remain unchanged.

Channel Conversion
Red: tangent-space X Keep the decoded value
Green: tangent-space Y Replace G with 255 − G
Blue: tangent-space Z Keep the decoded value
Alpha, when present Keep the decoded value

For example, an RGBA pixel of (128, 64, 230, 180) becomes (128, 191, 230, 180). Applying the operation again restores the original pixel. A green value of 128 becomes 127; this is expected when reversing the integer encoding around its midpoint.

This operation does not flip the texture vertically and does not invert all three color channels. It also does not rebuild mesh normals. If those distinctions are unfamiliar, start with the explanation of face, vertex and normal-map directions.

Diagnose the problem before converting

Use a neutral material and a simple directional light. Rotate the light around the object while inspecting a feature whose intended shape you know: a raised screw, a carved groove or a fabric fold. Temporarily disconnect the normal map, then reconnect it at a moderate strength.

A convention mismatch is a useful suspect when the geometry looks correct without the map but directional relief looks wrong with it. It is less likely to explain a problem confined to one UV seam, a single mirrored island or a damaged section of the mesh. Those symptoms can point to a tangent-basis mismatch, a bake projection problem or inconsistent triangulation.

Work through these checks before editing the texture:

  1. Confirm that the file is a normal map, not a height, roughness or packed mask texture.
  2. Read the source export preset or asset documentation for its Y convention.
  3. Check the destination material and importer settings, including any existing green-channel flip.
  4. Treat the map as data rather than display color. In Blender, use Non-Color for the image and the Normal Map node for the tangent-space interpretation.
  5. Compare a converted copy while keeping light, camera, material strength and geometry unchanged.

The normal-map baking mistakes guide covers the wider relationship between UVs, tangents, triangulation and color space. Resolve those independently if changing green does not improve the shading.

Convert the map locally with 3DSkillUp

Open the free Normal Map Converter and select one PNG, JPEG or static WebP. Choose OpenGL (+Y) → DirectX (-Y) or the reverse, then convert and download the PNG. Both directions perform the same channel inversion; the direction labels make the intended destination clear and determine the filename suffix.

Processing happens in your browser. Your image is not uploaded, and the tool does not require an account or an asset purchase. The original and converted previews help you confirm that a file was processed, but the final shading test must happen on your actual model.

For PNG input, the converter reads pixel samples directly, including RGB values beneath transparent pixels. The download retains the original dimensions and preserves the red, blue and alpha values. Preview images are smaller only to keep the interface manageable.

Use the untouched source for each comparison. Changing the direction in the tool clears the previous download and reconverts the selected original; it does not stack another conversion on the last output. Keep the source and name the exported copy for its destination so a future import does not apply the wrong convention again.

Choose a suitable source file

Prefer a lossless PNG source for normal-map work. JPEG and lossy WebP can introduce compression changes before conversion even starts. Saving them as PNG prevents another lossy export, but it cannot recover the original normal vectors. JPEG decoding can also differ slightly between browsers.

The converter preserves 16-bit PNG input as 16-bit RGBA PNG, using 65535 minus the green value. Other supported inputs produce 8-bit RGBA PNG. Only the small display previews are reduced to 8-bit samples; the downloaded 16-bit file keeps its full precision. Animated files are also rejected. The maximum input size is 75 MiB, with a maximum dimension of 8192 pixels and a device-dependent total pixel limit. The interface displays the applicable limit before you choose a file. A lower-memory device may require a smaller copy even when the source is below the absolute file-size limit.

16-bit PNG uses twice the sample memory, so it has half the total pixel allowance shown for 8-bit input. For formats such as TIFF or EXR, use an image application that supports them; this tool supports 16-bit PNG without a precision-reducing intermediate conversion.

Verify the converted normal map in your scene

Import the downloaded PNG as normal-map data. Disable any additional importer flip that would cancel your file conversion. Test the same known raised and recessed features under the same light used for the original comparison.

Do not choose a convention from the software name alone: presets, custom shaders and importer settings can change what a particular workflow expects. Blender documents the tangent-space and Non-Color requirements in its Normal Map node reference. Unreal Engine exposes normal-map handling options in its Interchange import reference. Check the settings relevant to your project rather than applying a second correction automatically.

If conversion fixes directional detail but leaves seams, address the remaining issue separately. The mesh shading troubleshooting workflow helps distinguish geometry and interpolation problems from texture problems.

Build a repeatable material check

Use one test object, one neutral lighting setup and a known surface detail when evaluating a new material set. Check base color and roughness separately, then enable its normal map. This makes it easier to see which input causes an unexpected result.

The 3DSkillUp PBR material collection provides surfaces to use in your scenes; consult each listing for its included maps and formats. Convert a map only when the destination requires the other Y convention. A purchased material should still pass the same import and shading checks as one you create yourself.

The converter is the first utility in 3DSkillUp Tools, a growing section for focused browser-based production tasks. Pair it with a consistent material test scene, and a convention mismatch becomes a quick, repeatable check instead of an unnecessary rebake.

Continue exploring
Connect the dots

Related guides & tutorials.

The learning hub