Skip to content
Techniques & Technology

Isometric Projection

3D from 2D

Isometric projection created the illusion of three-dimensional space on 2D screens, enabling exploration games impossible with flat side-views.

sinclair-zx-spectrumcommodore-64amstrad-cpccommodore-amiganintendo-entertainment-systemgraphics3dgame-design

Isometric projection displays three-dimensional scenes from a fixed angle where all three axes are equally foreshortened — no axis is preferred over another. On 8-bit computers, this created the impression of explorable 3D space while using only 2D sprite and tile techniques. Knight Lore (Spectrum, 1984), Marble Madness (arcade, 1984), and Solstice (NES, 1990) defined the look. The strategy genre adopted it (Civilization, SimCity 2000) and never let go — modern indies (Hades, Disco Elysium) keep it alive.

The mathematics

True isometric

True isometric uses 30° angles for the X and Z axes (measured from horizontal) with the Y axis straight up:

  • X-axis: 30° from horizontal (right and slightly down)
  • Z-axis: 30° from horizontal (left and slightly down)
  • Y-axis: 90° (vertical)

Each unit step in any axis projects to the same screen distance — true iso-metric (equal measure).

“Pixel isometric” (2:1 ratio)

Most computer games used a 2:1 ratio rather than true 30°:

  • For every 2 pixels horizontal, 1 pixel vertical along the X axis (and the same for Z, opposite direction).
  • Slightly off-true (the actual angle is atan(1/2) ≈ 26.57° rather than 30°).
  • Simpler maths — multiplications and divisions by 2 are shifts on 8-bit hardware.
  • Visually nearly identical to true isometric.

This is what Knight Lore, Solstice, and basically every 2D isometric game uses. Calling it “isometric” is technically inaccurate (purists call it dimetric or 2:1 projection), but the term has stuck.

A magnified corner of a Knight Lore room: two stone walls meeting, their block edges receding as a staircase of pixels that steps two across for every one down.
Knight Lore (Ultimate Play The Game, 1984, ZX Spectrum), magnified seven times. Captured from the original tape.

The ratio is countable in the picture. Follow any receding edge and it moves two pixels across for every one pixel down — no anti-aliasing, no interpolation, just a staircase, because that is what the projection reduces to once tile_width / 2 is a shift.

Measuring every edge in the room this crop was taken from: of 642 leading-edge runs, 321 are exactly two pixels long — half of them, against 10% for the next most common length. That distribution is the 2:1 projection, visible as a statistical fingerprint of the arithmetic above.

It also shows why the 2:1 ratio won over true 30° isometric. A true isometric edge needs a slope of tan(30°) ≈ 0.577, which no whole number of pixels gives you; every edge would need rounding, and neighbouring edges would round differently and stop lining up. At 2:1 every edge is exact, every wall meets every floor cleanly, and the maths is a shift.

Coordinate conversion

Convert from 3D world (tile_x, tile_y, tile_z) to 2D screen coordinates:

screen_x = (tile_x - tile_z) * (tile_width / 2)
screen_y = (tile_x + tile_z) * (tile_height / 2) - tile_y * tile_height

Where tile_width and tile_height are the on-screen dimensions of one tile (typically 32×16 for 2:1 isometric). Note tile_y is up, so it subtracts.

Inverse — screen back to tile (for click detection, mouse picking):

tile_x = (screen_x / (tile_width / 2) + screen_y / (tile_height / 2)) / 2
tile_z = (screen_y / (tile_height / 2) - screen_x / (tile_width / 2)) / 2

Rendering order

Objects must be drawn back-to-front (painter’s algorithm) so closer objects overlay farther ones:

for z from far to near:
    for x from left to right:
        draw_tile(x, y, z)
        draw_objects_at(x, y, z)

For free-position objects (not tile-aligned), sort by depth = tile_x + tile_z + tile_y and draw in order.

See Y-Depth Sorting for the depth-sort details.

Collision detection

Keep world coordinates separate from screen coordinates:

  • Store position in 3D (x, y, z) (or 2D (x, z) plus height).
  • Calculate screen position only for display.
  • Collide in 3D space, not screen space — diagonal-on-screen sprites that are perpendicular in world space shouldn’t collide based on screen overlap.

This is the lesson that Knight Lore established and every isometric game inherits: screen position is not world position.

The Filmation engine

Ultimate Play the Game’s Filmation engine — Knight Lore, Alien 8, Pentagram, Nightshade, Gunfright — is the canonical 8-bit isometric implementation:

Feature Implementation
Solid objects Z-ordered sprite masking (write-mask + write-data per object)
Room-based world Each room rendered fresh as the player enters
Object interaction Physics computed in 3D space, displayed in 2D
Memory efficiency Compact room data; objects shared across rooms

See Filmation Engine for the deep dive.

Tile-based isometric

Common in strategy games (Civilization, SimCity 2000, Theme Hospital, Diablo):

Element Structure
Ground tiles Diamond-shaped (parallelogram-projected square)
Objects Placed at tile positions, may overhang neighbouring tiles
Height Stacked tiles or vertical offset
Multi-tile objects Big buildings span 2×2, 3×3 tile footprints

Challenges

Depth sorting in complex scenes

Objects can overlap in non-trivial ways:

  • A character moving diagonally between two pillars must be sorted between them.
  • Multi-tile objects must be sorted by their entire footprint, not just their anchor.
  • Different heights complicate things further (a flying creature behind a wall but above it in Y).

Standard solution: depth = tile_x + tile_z + tile_y with tie-breakers for stable rendering.

Click / touch detection

Convert screen-space input to world-space tile via the inverse formula. UI complications: clicks on tile boundaries need rounding rules.

Movement

Eight-direction movement is natural — diagonals along the X/Z axes feel “natural” because they correspond to game-world directions:

  • Up arrow → moves toward back corner (decreasing screen Y, but in world space a diagonal between -X and -Z).
  • Left arrow → moves left-screen, which in world space is “decrease X and increase Z”.
  • Rotational input via four-way controllers mapping to world axes is its own design problem.

Notable games

Game Year Platform Innovation
Qbert** 1982 Arcade Early commercial isometric
Zaxxon 1982 Arcade Isometric shoot-em-up; popularised the look
Ant Attack 1983 ZX Spectrum One of the first 8-bit isometric games
Knight Lore 1984 ZX Spectrum Filmation engine; defined 8-bit isometric
Marble Madness 1984 Arcade Atari’s isometric ball-rolling masterpiece
Alien 8 1985 ZX Spectrum Filmation engine refinement
Batman 1986 ZX Spectrum Jon Ritman and Bernie Drummond for Ocean; CRASH found it “viewed and played in the same fashion” as Knight Lore
Head Over Heels 1987 ZX Spectrum, Commodore 64 Two-character isometric puzzle; ZZAP! 64 Gold Medal for the C64 version
Solstice 1990 NES Late console-era isometric
Populous 1989 Various Bullfrog’s god game popularised isometric on 16-bit

On the Commodore 64

By the end of 1987 ZZAP! 64 had a settled name for the look. Its Christmas 1987 compilation round-up files Strike Force Cobra as “isometric forced perspective action”, Bobby Bearing as a “3D isometric perspective arcade adventure with fabulous feel” and The Great Escape as an “isometric perspective wartime romp”, and the same issue previews The Edge’s Inside Outing as “a full colour Fairlight clone” with “fast isometric perspective 3D action”.

The C64 version of Ocean’s Head Over Heels (1987) took a ZZAP! Gold Medal. The magazine’s description is the game’s design in miniature: two spies “travelling about on each other’s shoulders”, where “Head can jump great heights and turn in mid air, while Heels is a flyer on the ground but not so good a jumper”, working through “300 odd rooms” in which “seemingly innocuous floors are fatal to the touch and innocent-looking creatures turn nasty at the drop of a hat”.

Modern use

Isometric persists in many genres:

  • City builders: SimCity 2000 / 3000 / 4, Tropico, Cities: Skylines (modern uses true 3D but isometric-feeling camera).
  • Tactical RPGs: Final Fantasy Tactics, Tactics Ogre, Disgaea, XCOM.
  • Action RPGs: Diablo series, Path of Exile, Torchlight.
  • Strategy: Civilization II / III used true isometric; later moved to 3D-with-isometric-camera.
  • Indie: Hades, Bastion, Transistor, Pyre (Supergiant).
  • Atmospheric / narrative: Disco Elysium.

See also

Not yet fact-checked. This entry was drafted by an AI and nobody has verified it. The dates, figures and technical details may be wrong. Use it to find your bearings, then confirm anything that matters against a primary source.