Normal Map Conventions: OpenGL vs DirectX Explained
Why your normal map looks inverted in Unreal but fine in Unity — a plain-English explanation of tangent-space Y axis conventions, with concrete fixes.
You plug a normal map into Unreal and the surface lights as if the sun were coming from below. You plug the same file into Unity or Blender — looks great. The mesh is identical. The texture is identical. What is going on?
Two Industries, One Axis of Disagreement
Normal maps store a surface direction in their RGB channels. Red = X, green = Y, blue = Z. Every PBR engine decodes them the same way with one exception: the sign of Y.
OpenGL convention (Y+): a brighter green channel means the surface points up. Used by Unity, Godot, Blender (Cycles and Eevee), Substance Painter's default export, and every WebGL-based engine.
DirectX convention (Y−): brighter green means the surface points down. Used by Unreal Engine, the legacy Direct3D toolchain, and some CryEngine/Xbox-era assets.
Same bytes in the PNG. Opposite physical meaning.
How to Tell at a Glance
Look at a hemispherical bump (like a button or a dome) in your normal map. In OpenGL convention, the bottom of the bump will be darker green because the surface is rotating toward Y−, away from the light. In DirectX convention, the bottom is brighter green.
If your lighting feels backwards in-engine — highlights where shadows should be — you have a convention mismatch.
The Fix Takes 5 Seconds
In Unreal, the texture import dialog has a Flip Green Channel checkbox. Toggle it on and the engine inverts the G channel at sample time. No need to re-export your source.
In Unity, set the texture type to Normal map and the importer handles everything — Unity expects OpenGL, but it will warn you if the file looks wrong. In Blender, use a Separate Color → Invert G → Combine Color node chain, or just pick DirectX-style input directly in the Normal Map node.
Why Two Standards in the First Place?
In the 1990s, OpenGL and DirectX defined opposite texture coordinate spaces — OpenGL had Y increasing up, DirectX had Y increasing down. When normal maps became common in the mid-2000s, each toolchain baked its space into its outputs. The divergence stuck because flipping an established pipeline is expensive.
Generating Normal Maps Without the Confusion
The aukimi Normal Map Generator lets you pick the convention explicitly when you export. It runs a Sobel gradient on the luminance of your heightmap, then packs (−dx·s, −dy·s, 1) into RGB — with Y flipped when you choose DirectX. You can toggle the convention after generation and re-download without re-uploading anything.
Internally the formula is identical. The sole difference is the sign we apply to the Y component before writing the green channel. Knowing that, you can convert a file between conventions with any image editor: open the PNG, select the green channel, invert it, save. That is all "Flip Green Channel" does in Unreal.
Quick Reference
- Unity, Godot, Blender, Substance Painter (default): OpenGL (Y+).
- Unreal Engine, legacy Direct3D: DirectX (Y−).
- Looks wrong in Unreal? Enable Flip Green Channel in the import settings.
- Looks wrong in Unity? You probably exported from a DirectX-convention tool — invert the green channel or re-export.
Once you internalize the convention, the fix is trivial. The hardest part is recognizing it the first time.
Enjoyed this article?
Related Articles
The Creative Stack Just Collapsed: One Week of AI Tooling, Late April 2026
Between April 27 and May 4, 2026, Adobe, Luma, Novi, fal, Figma, Canva, HeyGen and Anthropic all crossed the same threshold in eight days. Here is what shipped, what it means, and where it leaves the browser-based creative suites trying to consolidate it all.
AI Music and SFX in 2026: What Actually Works in Indie Game Audio
Three years ago, indie game audio meant either licensing royalty-free libraries (cheap, generic, every game sounds the same) or hiring a composer (great, expensive). In 2026, AI generates score that ships. Here is which tools deliver — and where a human composer still wins.
AI Mesh Generation in 2026: What Actually Ships in Game Pipelines
Image-to-3D went from "uncanny demo" to "shipping in indie projects" in eighteen months. Here is what Tripo, Meshy, Rodin, and Hyper3D actually do in production — and where the 3D artist still beats the model every time.