KitForma field notes

Convert a height image into a normal map

Understand what brightness can and cannot describe.

Start with a height-like source

A true height map describes surface elevation. A color photograph also contains lighting, pigment and reflections, so its dark regions do not necessarily represent depressions. This generator treats brightness as height; use a prepared grayscale height image whenever the physical interpretation matters.

Understand the calculation

The generator compares neighboring height samples in the horizontal and vertical directions. These slopes become a normalized tangent-space normal vector, stored as RGB. Strength scales the slopes before normalization. A constant-height surface produces a flat blue normal map rather than invented texture.

Inspect the result under moving light

Import the map into your renderer as non-color data, connect it through the appropriate normal-map node and rotate a light. If painted shadows appear as geometry, correct the height source. Normal maps change shading but do not change the silhouette of the model.

Build and inspect one controlled result

Load the generated radial example, leave strength at 4, and run the tool. Download the normal PNG and height PNG together. The normal image describes direction while the height image shows the brightness data used in the calculation. In a renderer, connect the normal file through a tangent-space normal-map input and inspect it on a simple plane before applying it to a complicated asset.

For your own PNG, JPEG or WebP, use a file under 20 MB and 40 megapixels. The tool reduces the working image to a maximum side of 1,024 pixels. Check the reported output dimensions rather than assuming the original full-resolution image was retained.

Choose strength by comparison

Increase strength gradually and compare the same light position between versions. Excessive values can produce harsh changes because the normal direction follows the sampled brightness gradient. Transparent pixels become zero height, so an otherwise invisible border can generate a strong edge. Flatten or crop that border before conversion when it does not represent a real depression. The strength value does not specify a measured displacement in millimeters.

The evidence behind the check

Sources & assumptions

Formats, algorithms and supported features are documented below. Check the stated scope and inspect your output before using it.

Reviewed 2026-10-17. Read our methodology or report an issue.

Essential local storage remembers this choice for up to 180 days. Your choice applies to this subdomain. Global Privacy Control and Do Not Track override optional measurement.

Advertising has a separate choice. Use Advertising preferences in the footer to allow or reject the optional guide-page banner.