About this tool
A normal map tells a game engine which way every point on a surface faces, so a flat polygon can catch light as if it had bricks, grooves, or pores. This tool derives one from a height map: the brightness of each pixel is read as height, the slope is measured with a Sobel filter, and the resulting surface direction is stored as the familiar purple-blue image. It works on real height maps, on bump maps, and, less accurately, on ordinary photos of a surface.
Strength controls how steep the slopes are. Pick the green channel convention your engine expects: OpenGL style (Y+) for Blender, Unity, and Godot, DirectX style (Y-) for Unreal, Source, and 3ds Max; getting it wrong makes bumps look like dents. Leave wrapping on for tiling textures so the edges match, and export DDS or TGA afterwards if your engine wants those formats.
How to use it
- Drop your PNG, JPG, WebP or BMP files into the box above, or click to browse. Nothing is uploaded.
- Adjust the options if you want; the defaults suit most files.
- Click the button and wait a moment.
- Download the results individually or all at once as a ZIP.
Questions
What should the input look like?
A grayscale image where white is high and black is low gives the best result. Color images are converted to luminance first, so a photo works but bright paint reads as height.
OpenGL or DirectX?
They differ only in whether green points up or down. Blender, Unity, Godot, and glTF use OpenGL (Y+); Unreal, Source, and 3ds Max use DirectX (Y-). If lighting looks inverted top to bottom in your engine, regenerate with the other setting.
Why is the output mostly one flat color?
A flat normal map (128, 128, 255) means the input had no height variation, or the strength is too low for subtle differences. Increase the strength or add contrast to the height map first.
Can I make the height map here too?
Yes, the Noise Texture Generator produces seamless black and white height maps that feed straight into this tool.
Is it free, are files uploaded, which browsers work: the general questions are answered once for the whole site.