Normal Map Generator
Make a tangent-space normal map from a height map or photo: Sobel or Scharr, strength, blur, invert, OpenGL or DirectX green, and tiling edges. PNG output.
A normal map stores, for every pixel of a texture, which way its surface faces. Game engines and 3D programs use it to light flat polygons as if they had bumps, grooves and scratches. This generator reads a height map — or a photo whose brightness stands in for height — measures the slope at each pixel and writes a tangent-space normal map in the OpenGL or DirectX convention, with optional seamless edges for tiling textures. It runs in your browser.
How to use this tool
- Choose a height map (white = high) or a texture photo.
- Pick where the height comes from, and invert it if dark areas should stick out.
- Set smoothing, the edge filter and the strength; tick seamless edges for tiling textures.
- Choose the green-channel convention of your engine and download the normal map.
Formula
n = normalize(−s × ∂h/∂x, ±s × ∂h/∂y, 1); RGB = (n + 1) ÷ 2 × 255
h is the height from 0 to 1 and s the strength. The slopes come from a Sobel (1, 2, 1) ÷ 8 or Scharr (3, 10, 3) ÷ 32 filter, or a central difference ÷ 2. Image rows run downwards, so the OpenGL (Y+ up) convention uses +∂h/∂y and DirectX (Y− down) uses −∂h/∂y. Smoothing is a Gaussian blur with σ = radius ÷ 2. With seamless edges, the filters wrap around the borders so the map tiles without a seam.
Example
On a flat area the slope is 0, so n = (0, 0, 1) and the colour is (128, 128, 255) — the familiar light blue. Where the height rises by 0.38 across one pixel, Sobel gives a slope of 0.19; at strength 2 that is 0.38, so n = (−0.38, 0, 1) ÷ 1.07 and the red channel drops to 82.
Frequently asked questions
OpenGL or DirectX?
Blender, Godot, Unity and most glTF tools expect OpenGL (green up); Unreal Engine and 3ds Max expect DirectX (green down). If lighting on your bumps comes from the wrong side, switch this setting.
Can I use any photo?
Yes, but brightness is only a guess at height: dark cracks become low and light stones high, which often looks right for stone, bark and fabric. Painted colours and shadows can create fake bumps, so a real height map gives the best result.
Why does my texture show a seam when tiled?
Turn on seamless edges, so the slopes at the borders are measured across the wrap-around. The texture itself must also tile; the Seamless Texture Maker can help.
Are my textures uploaded?
No. Everything is calculated on your device.
Last updated:
Page address with these inputs: https://kakao.mobile/tools/normal-map-generator/
Cite or embed this tool
kakaoCalc. (2026, November 8). Normal Map Generator. https://kakao.mobile/tools/normal-map-generator/
“Normal Map Generator.” kakaoCalc, 8 Nov. 2026, kakao.mobile/tools/normal-map-generator/.