Exporting
Every engine agrees on what a normal map means and disagrees on how to write it down. The disagreement is one bit — whether green counts upward or downward — and getting it wrong produces no error message. It produces artwork where every bump reads as a dent.
Exporting a normal map
File ▸ Export normal map… (Ctrl+E) opens a dialog to choose the target, then a system dialog for the filename and location.
The output is at your sprite's own resolution. A 32×32 sprite exports as a 32×32 normal map with its edges intact.
You cannot export while a solve is still in progress, or while the preview is showing a draft. A draft is a low-iteration approximation shown to keep the interface responsive while you drag a slider, and it must not reach disk.
Choosing a target
You pick an engine, not a coordinate system, because that is the decision you actually have.
| Target | Green | What to set on import |
|---|---|---|
| Unity | Y+ | Texture Type → Normal Map. Leave Flip Green Channel off. |
| Godot 4 | Y+ | Leave Normal Map Invert Y off. |
| Unreal Engine 5 | Y− | Texture Group → WorldNormalMap. Leave Flip Green Channel off — the flip is already in the file. |
| OpenGL (raw Y+) | Y+ | Nothing engine-specific. Matches Blender and most offline renderers. |
| DirectX (raw Y−) | Y− | Nothing engine-specific. Matches 3ds Max and Source 2. |
In every case the flip you might expect to apply at import has already been applied in the file. Applying it again puts you back where you started, with the map inverted.
Godot and the blue channel
Godot compresses normal maps with a format that stores only two channels, and its built-in material shaders ignore blue regardless of what is in it — the third component is rebuilt in the shader from the other two.
That is not a subtlety to work around; it is a constraint the exports satisfy. Anything relying on blue carrying information would be silently discarded there, so exports stay valid when the third component is reconstructed from the first two. You do not need to do anything about it, but it is worth knowing why nothing appears to be lost.
Calibration targets
File ▸ Export calibration target, then pick a platform.
This writes a small test image whose correct appearance is known: a surface whose facing directions are laid out so that a mistake in the green channel is immediately obvious rather than plausible. Drop it into your engine, light it, and compare.
Do this once per pipeline. It takes two minutes and it settles the one question about exporting that has no error message attached to it. Once you know which target your pipeline wants, every sprite afterwards is right.
It is a separate menu entry with the platforms beneath it, rather than a button governed by whatever target happens to be selected for your normal map — because a calibration check whose first step is invisible in the menu is a check people get wrong.
Exporting a whole animation
File ▸ Export every frame… — one folder prompt, then every frame solved and written as <original>_normal.png. See
Frames and animation.
Exporting hint layers
File ▸ Export hint layers… writes your masks as grey PNGs. See Files and presets.
A checklist before shipping a set
- Calibration target checked in your engine, once.
- The same target selected as the one you calibrated.
- Viewed in Lit mode with the light moved through a full circle, not judged from the purple picture.
- For an animation, stepped through every frame looking for one that jumps.
- In your engine, confirm you have not also enabled a green-channel flip at import.