Submitted by , posted on 22 February 2003

Image Description, by

A screenshot from the 'Archipelago' demo of GLScene (, you can get the demo there, along with Delphi source). Terrain rendering is a well trodden subject where geomipmapping and brute force seem to have taken the honors recently... However, if the GLScene renderer is an hybrid capable of mixing brute force tiles with dynamic Level Of Detail (LOD), this demo uses view-dependant dynamic LOD exclusively.

Technical details:
  • 512x512 heightmap at 16 bits precision
  • 16 1024x1024x24bits terrain textures with detail map
  • tile-based, split-only ROAM dynamic LOD
  • animated waves, depth-based transparency
  • steerable sailboat with dynamic wake
  • basic OpenGL, nothing fancy, not even VAR/VAO, sorry ;)
  • You should expect more than 210 FPS on an Athlon 1800+ with a GF4 Ti 4200 at 1024x768x32, and this figure is fill rate limited (140 FPS on the same CPU with a GF2 Pro in 800x600). The demo makes use of the stencil buffer, so start it in 24 or 32bits desktop mode if you want to avoid software rendering on some drivers.

    The initial purpose was to showcase large textures (hence its size...), but it ended sweet enough to demonstrate what simple dynamic LOD is capable of: most of the 512x512 heightmap is within visible range in the demo, that would be 500k tris without dynamic LOD, which are reduced to 5k-13k by ROAM, i.e. peanuts.

    The landscape is fully tessellated by a split-only ROAM at each frame, using a tile-based implementation close to what Bryan Turner describes in his Gamasutra article. CPU-wise, tessellation itself takes a fat millisecond on a 1800+, the twist being that rendering starts before the tessellation has completed, so it's not a wasted millisecond for the graphics hardware, especially since the triangles being rendered are eating a higher than average share of fill rate. The smaller wireframe image is a cutout from a wireframe screenshot, you can see that the triangles on the far mountain have almost the same size as those on the nearby mountain (which is the whole purpose of dynamic tessellation). After the terrain layer comes a water layer, that renders wavy tiles over the visible terrain tiles (reuses terrain tile culling), this pass is actually the range-limiting one in the demo (uses several good-old-but-slow sin/cos per vertex).

    Art credits:
  • Terrain elevation map and textures by Mattias Fagerlund (, heightmap and sedimentation maps created with World Machine from Stephen Schmitt (
  • Sailboat model and textures by Daniel Polli (
  • Water and detail textures from Lemog's 3D Textures (
  • Wake texture is mine, behold programmer art! ;)
  • Eric Grange

    Image of the Day Gallery



    Copyright 1999-2008 (C) FLIPCODE.COM and/or the original content author(s). All rights reserved.
    Please read our Terms, Conditions, and Privacy information.