Normal Map FixerLocal browser processing
Drop an image hereChoose a PNG, JPEG, WebP, or BMP (up to 50 MB).Local image processing

Choose a local image or try the sample.

Diagnostic guidance, not certification. Vector statistics exclude fully transparent pixels; thresholds are documented below.

The intended OpenGL/DirectX Y convention cannot be reliably determined from pixels alone.

Every selected vector edit ends with normalization. Alpha and dimensions stay unchanged. Controls always reprocess the original.

Cleanup changes only alpha-zero RGB: one-pixel visible-neighbor padding, then neutral outside. Partial-alpha values are preserved.

Output Y conventionOpenGL · Y+

Drag or touch the lit preview, or use the light sliders.

Lossless RGBA8 PNG; original dimensions and alpha. The filename includes the declared output Y convention.

Normal Map Fixer

This normal map fixer makes deliberate repairs to an existing tangent-space texture. Renormalize directions, correct selected channel signs, reconstruct positive Z, or clean fully transparent RGB. Compare the original and fixed output before exporting a lossless PNG with the same dimensions and alpha mask.

How to Get Started with the Normal Map Fixer

Load the original normal map or try the generated sample, then choose the repairs you actually need. Renormalization is enabled initially. Set the known input Y convention and use Flip Green only when you intend to change it. Compare Original and Fixed under the same light, inspect the difference view, and read before/after seam measurements. Download becomes available only when the latest settings have finished processing; it never exports a stale earlier result.

What Is a Normal Map Fixer?

A normal map fixer edits direction vectors rather than treating the purple texture as a display image. It decodes RGB into signed components, performs the selected numerical operation, normalizes each edited vector, and encodes it back into eight-bit channels. Its focus is repair and review, whereas the converter owns convention conversion and the viewer owns visual inspection. None of these tools can recreate a missing high-resolution sculpt, mesh topology, or authored tangent basis.

Use the convention converter for a conversion workflow

When Normal Maps Need Repair

Ordinary image edits, blending, filtering, and lossy compression can move decoded normals away from unit length. A texture might also have been imported with a mismatched green-channel convention, or contain black RGB padding under transparent edges. The normal map fixer lets you address these distinct cases independently. Diagnose the actual problem first: changing channel signs on an otherwise correct texture can introduce reversed shading, and normalization alone cannot remove spatial compression blocks.

Check the original with the Normal Map Validator

Renormalizing Normal Vectors Safely

Renormalization divides X, Y, and Z by their Euclidean length. It preserves the vector's direction while restoring magnitude, subject to eight-bit rounding. This normal map fixer uses a neutral (0, 0, 1) fallback for decoded lengths below 0.02; exact zero is not representable in standard RGB8, so the near-zero cutoff is explicit. Non-finite derived inputs also fall back safely through the shared math. The exported neutral direction is approximately RGB 128, 128, 255.

Flipping the Green Channel Intentionally

Flip Green negates the signed Y component before normalization. A known Y+ input therefore becomes Y−, and a known Y− input becomes Y+. The output state and filename follow your declared input convention and this toggle, not a guessed average green value. The normal map fixer cannot reliably identify the intended convention from pixels alone. Preview decoding follows the selected output state so a genuine conversion should preserve the intended raised surface under matching interpretation.

Flipping Red for Tangent-Basis Corrections

Flip Red independently negates signed X. It can be useful when a pipeline expects an intentionally inverted horizontal tangent direction, but it is not a universal cure for mirrored UVs or incompatible mesh tangents. Verify the affected axis against a recognizable feature and move the light horizontally. Every vector operation finishes with normalization. Turning all vector repairs off retains the original RGB exactly unless you separately enable transparent-edge cleanup.

Rebuilding the Blue / Z Component

Rebuild Z computes z = sqrt(max(0, 1 − x² − y²)) and then normalizes the resulting vector. It chooses the positive hemisphere explicitly. If x² + y² exceeds one, Z becomes zero and X/Y are normalized onto the equator; the diagnostic summary counts those clamped pixels. This normal map fixer cannot recover a negative Z sign or information lost from X/Y. Use reconstruction for compatible two-component data, rather than as a blanket repair for every suspicious blue channel.

Fixing Transparent Edge Artifacts

Optional alpha cleanup changes RGB only where alpha is exactly zero. It averages immediate visible neighboring directions numerically, normalizes the result, and uses a neutral direction farther outside that one-pixel padding band. Partially transparent texels keep their alpha and are not selected by cleanup; selected vector operations may still repair their RGB. The original alpha mask is always preserved. This small padding repair is not a complete mipmap-aware texture dilation algorithm or a replacement for engine alpha settings.

OpenGL vs DirectX Repair Workflow

Declare the input convention using source documentation, inspect both interpretations if uncertain, and apply only one deliberate Y conversion. Compare the output with an unchanged original under matching conventions. Renormalization and positive-Z rebuilding do not themselves choose Y+ or Y−. The normal map fixer always recalculates from the immutable imported source when a checkbox changes, so repeated interactions avoid accumulating rounding errors. Keep the convention in your asset notes as well as in the predictable exported filename.

What This Normal Map Fixer Cannot Recover

Repair cannot restore slopes removed by JPEG compression, recover full direction from damaged channels, or fix incorrect UV layouts and tangent generation. Seam statistics compare normalized opposite edges before and after; this tool deliberately offers inspection rather than a guaranteed seamless reconstruction. Equalizing edge pixels alone would not guarantee matching derivatives, mipmaps, or a convincing repeating material. If the source needs repeat-aware rebuilding, start from appropriate height data and review the separate seamless generator.

Review wrap-aware normal generation

Common Repair Scenarios and Intended Users

An artist who filtered a normal texture may need renormalization; a developer moving an asset between known conventions may need a green flip; a technical artist receiving two-channel normals may need positive-Z reconstruction. The normal map fixer exposes fallback, reconstruction-clamp, cleanup, and changed-pixel counts so these choices remain reviewable. Use the difference view to locate channel changes, but remember that RGB difference is not a geometric error estimate. Compare seams and the unit-length tolerance separately.

Lossless Export and Final Material Inspection

Normal downloads are genuine RGBA8 PNGs written directly from the numeric buffer without Canvas premultiplication or gamma metadata. Dimensions and every alpha byte are preserved. Supported non-interlaced eight-bit PNG inputs also retain hidden RGB through direct decoding; browser-fallback formats may already have lost hidden values before repairs. Export names include fixed, Y direction, and pixel dimensions. Recheck the downloaded file and inspect the material with the viewer and target renderer before replacing a production asset.

Review the repaired texture in the viewer

Frequently Asked Questions

Does the normal map fixer normalize when I flip a channel?

Yes. Every selected vector edit ends with normalization. Disable all vector operations to keep the original RGB, or enable only alpha cleanup to change fully transparent padding.

Can rebuilding blue restore the original normal perfectly?

Only compatible unit-length X/Y data defines a positive Z candidate. The negative sign and information lost from other channels cannot be recovered.

Does cleanup erase partial transparency?

No. Cleanup targets alpha zero only, and export preserves all alpha values. Partial-alpha RGB can still change if you enable a vector repair.

Does this tool guarantee a seamless texture?

No. It reports opposite-edge differences before and after. A reliable repeating asset also needs appropriate source structure, derivatives, filtering, and renderer checks.