Blog › Heightmaps for Unity, Unreal, Godot and Blender — the 16-bit Pipeline
Heightmaps for Unity, Unreal, Godot and Blender — the 16-bit Pipeline
Every engine terrain starts from the same thing: a grayscale image where brightness means elevation. The quality of everything downstream — displacement, landscape sculpting, water lines — depends on two properties of that image. Here is what they are and how to get them right.
Why 16 bit, not 8
An 8-bit image has 256 brightness steps. A real region spans hundreds of metres of elevation, so each step becomes metres tall — and your terrain comes out in visible staircases, especially on gentle slopes where the whole relief lives in a few steps.
A 16-bit heightmap has 65,536 steps. Step size drops from metres to centimetres, which is below what terrain workflows can express anyway.
The terrain app exports the exact elevation grid behind its 3D model as a 16-bit grayscale PNG. Black is the region's lowest point, white the highest, and the legend prints both in metres — so mapping pixels back to real elevations is one linear formula:
height = min + fraction × (max − min)
Blender
- Add a plane, subdivide it to the resolution you need (the heightmap's pixel dimensions are a good target).
- Displace modifier → new texture → Image → load the PNG.
- Set the texture's Mapping to your region's elevation span, or scale Z afterwards.
- Strength is your vertical exaggeration dial. Real proportions = strength equal to (max − min) × plane width in metres ÷ 256 if you skipped step 3 — easier to set step 3 properly.
The STL of the same region imports at true scale too, which makes a useful sanity check: overlay the displaced plane on the STL and they should register.
Unity
Unity's Terrain importer takes 16-bit raw heightmaps, but the export here is a PNG. Convert once with any image tool (16-bit PNG → 16-bit RAW, little-endian), or use a plugin that reads PNG directly. Set terrain height to the legend's (max − min) and you have real-world proportions.
Unreal
Landscape import is the easiest of the three: UE reads 16-bit PNG heightmaps directly. Choose a landscape size whose resolution is close to the heightmap's, import, then set the Z scale from the legend values. Water planes sit naturally because rivers and lakes are part of the same elevation source.
Godot
Terrain3D and similar heightmap plugins load the PNG directly. As everywhere else: the legend's min and max metres are your scale factors.
Getting the area you actually need
Draw a box anywhere on Earth, pick a named region, or import a GeoJSON polygon — the export follows the selection. A whole country comes out coarse; a single valley comes out fine, because the underlying grid resolution concentrates as the area shrinks. For game work, an 8–30 km box is usually the sweet spot.
Licensing note
The elevation data is open (AWS Terrain Tiles: SRTM, NED and national programs). Keep the credit line that ships with exports, same as you would for any map you publish — including in a shipped game's credits screen.
Try it while it's fresh
The whole tool runs in your browser — pick a region, shape the relief, export. No account, nothing to install.
Open the terrain app