How to use
- Load a texture or height image. A grayscale height map gives the clearest result.
- Adjust the Strength slider and compare the normal map preview with the original.
- Click download to save the normal map as a PNG.
A normal map stores the direction a surface faces in the red, green and blue channels, which lets a renderer fake small bumps and dents without extra geometry. This tool builds one from the brightness of your image. It converts each pixel to grayscale, then uses a Sobel filter to measure how quickly brightness changes in the horizontal and vertical directions. Those slopes become the X and Y components of the normal and the result is normalized and stored as red, green and blue.
Strength runs from 1 to 20 in steps of 0.5 and starts at 4. Higher values exaggerate the slopes, which produces a deeper surface relief, and lower values keep it subtle. The page suggests values around 2 to 6 for terrain. Because the tool treats brightness as height, light areas read as raised and dark areas as lowered, so a plain color photograph can give odd results. A grayscale height map or a texture with clear light and dark detail works best.
For speed, images larger than 2048 pixels on the longest side are scaled down before the map is calculated. The alpha channel of the source is copied to the output. The file is saved as a PNG named after your image with _normal added.
The calculation uses a canvas in your browser, and your image is not uploaded.
FAQ
What kind of image should I start with?
A height map or a texture with clear light and dark detail. The tool reads brightness as height.
What does the Strength slider do?
It scales the slopes found by the Sobel filter. Higher values make the surface look deeper.
Is there a size limit?
Images are scaled down so that the longest side is at most 2048 pixels before the normal map is computed.
Which channel holds which axis?
Red stores X, green stores Y and blue stores Z.
Is my texture uploaded?
No. The map is generated in your browser.
