Convention converter

Normal Map Converter: OpenGL and DirectX

Switch Y direction or repair channel orientation with vector renormalization on every pixel. Automatic convention detection is not dependable, so the before/after preview remains the final check.

Convention converterChoose a PNG, JPEG, WebP, or BMP (up to 50 MB).
Local image processing
Drop an image hereChoose a PNG, JPEG, WebP, or BMP (up to 50 MB).Local image processing

A reliable workflow

Y conversion is a signed vector operation

The common OpenGL/DirectX conversion negates decoded Y, which is equivalent to inverting the stored green channel around its midpoint.

Height gradient to RGB normal directionA grayscale height change becomes horizontal and vertical gradients, then a normalized vector encoded into RGB.1 · HEIGHT2 · GRADIENTdx + dy + level Z3 · RGB NORMALnormalize → 0…255
1

Renormalize after changing channels

Renormalization restores unit length after channel operations and reconstruction, avoiding strength changes caused by malformed vectors.

2

A purple thumbnail cannot identify Y

A purple appearance does not reliably identify the convention because both Y directions use the same overall channel range.

3

Convert directions rather than recoloring pixels

A normal map converter should decode stored RGB values into signed vectors before it changes an axis. The usual OpenGL-to-DirectX operation negates tangent Y, visually equivalent to reflecting the green channel around its midpoint. Red inversion changes tangent X and is not part of the ordinary Y-convention conversion. Reconstructing Z from X and Y assumes an outward-facing hemisphere, while renormalization restores unit length after quantization or channel edits. These explicit operations make the normal map converter predictable and prevent a generic color adjustment from corrupting vector meaning.

4

Prove the requested convention after conversion

Select the stated input convention, choose the required output, and inspect a feature whose top and bottom are not symmetrical. Move a light vertically in the 3D preview and compare the original with the converted result. If only the vertical relief changes as expected, the normal map converter has addressed the likely convention mismatch; if both axes or flat regions change, recheck the input and channel operations. Save a lossless file with Y+ or Y− in its name, then verify it in the target renderer because importer toggles can apply another conversion after the normal map converter.