3D Terrain

Blog › Heightmaps for Unity, Unreal, Godot and Blender — the 16-bit Pipeline

Heightmaps for Unity, Unreal, Godot and Blender — the 16-bit Pipeline

October 27, 2026 · 3 min read

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)

A gradient bar running black to white: black is the region's lowest point, white its highest, with 65,536 steps between

Blender

  1. Add a plane, subdivide it to the resolution you need (the heightmap's pixel dimensions are a good target).
  2. Displace modifier → new texture → Image → load the PNG.
  3. Set the texture's Mapping to your region's elevation span, or scale Z afterwards.
  4. 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
← Turn a GPX Route into a 3D Map You Can ShareHow to 3D Print a Terrain Map (from Any Place on Earth) →