SuperPower Normals
SuperPower Normals is the best way to generate normal maps from height maps and displacement maps: exactly flat areas stay exactly flat (128,128,255 in 8-bit, 32768,32768,65535 in 16-bit), 16-bit and float input, a Bezier height-curve editor with local and fade modes, A/B comparison and export to PNG, TIFF, OpenEXR, TGA, JPEG, WebP and DDS BC5. Free, runs entirely in your browser, nothing is uploaded.
JavaScript is required to run the app. Everything is processed locally in your browser.
Features
- Converts height maps and displacement maps into normal maps entirely in the browser; nothing is uploaded
- Exactly flat areas stay exactly flat: 128,128,255 in 8-bit and 32768,32768,65535 in 16-bit, with no noise, dithering or auto-levels
- Lossless input: 16-bit PNG, TIFF (up to 32-bit float), OpenEXR, PSD, RAW/R16/R32, PGM/PFM, plus JPG, WebP, BMP, GIF, AVIF
- Export: PNG 16/8-bit, TIFF 16/8-bit, OpenEXR half float, TGA, JPEG, WebP, DDS BC5 with mipmaps
- OpenGL (Y+) and DirectX (Y-) conventions; Sobel, Scharr and central-difference gradients
- Height curve editor with Bezier handles, black and white points; global, local and local-plus-fade modes
- Smoothing before and after the curve; tileable (seamless) edges
- A/B split comparison, mask view of flat zones, light preview, 16-bit preview
- Multi-threaded processing of large maps (tested at 8192 x 8192) with full-resolution 1:1 preview of the visible area
- Interface in 16 languages, including right-to-left languages
FAQ
How do I convert a height map or displacement map to a normal map?
Open the height map (drop a file onto the page), choose OpenGL or DirectX, set the relief height and save the normal map as PNG, TIFF, EXR or DDS.
Is my image uploaded anywhere?
No. All processing happens locally in your browser. Only anonymous usage statistics (formats and features used, never images or file names) are sent, and you can turn them off.
Why do flat areas stay exactly flat?
Where neighboring pixels are identical the slope is exactly zero, so the normal is exactly (0, 0, 1), which is 128,128,255 in 8-bit. No filtering or dithering is added.
Which formats are supported?
Input: PNG (8/16-bit), TIFF (8/16/32-bit float), OpenEXR, PSD, RAW/R16/R32, PGM/PFM, JPG, WebP, BMP, GIF, AVIF. Export: PNG, TIFF, OpenEXR, TGA, JPEG, WebP, DDS BC5.
OpenGL or DirectX normal map?
Blender, Maya, Unity and Substance use OpenGL (Y+); Unreal Engine and 3ds Max use DirectX (Y-). Switch with one click.