TERRAIN STREAMING

Terrain Streaming for Gigabyte DEMs, Orthophotos and Point Clouds

Terrain streaming is how STREAM opens a survey that is far bigger than your graphics memory and keeps it responsive: the terrain is cut into fixed tiles at several levels of detail, and every frame the camera asks only for the tiles it can actually see. The rest stays on disk. That is why a gigabyte DEM pans without a loading bar, why a point cloud becomes a surface you can measure on, and why several DEMs of the same site behave as one — all on your own machine.

What is terrain streaming?

A large DEM does not fit on the GPU, and it should not have to. Terrain streaming keeps the full dataset on disk in a tiled, multi-resolution form and moves only the visible part into graphics memory — coarse tiles for the whole view first, then the fine tiles where the camera is focused.

STREAM does this with a two-level raster path. The source GeoTIFF or BigTIFF is read once through GDAL and converted into a native optimized copy: a deterministic 512 × 512 tile layout with overview levels, Float32 for elevation and RGBA8 for orthophotos. Once that copy is complete, the renderer reads tiles from it directly instead of going back through the source file.

The result is that the file's size stops being the limit. What matters is how much you are looking at, and that is bounded by the screen.

Terrain Streaming in STREAM

Loads only what you look at

Each terrain tile has an identity of level, x and y. Every frame the camera state produces a request set: a pinned coarse set covering the whole view, and a detail set for where you are focused. Tiles outside that set are not decoded, not uploaded and not held.

Converts once, opens in seconds after

On first open STREAM builds its native optimized copy — 512 × 512 tiles, overview levels, ZSTD-compressed tiled BigTIFF. A tile table records what has been built; the cache counts as complete only when every tile is built. From then on the renderer reads tiles directly and reopening is fast.

Decoding off the render thread

Tile decode runs on worker threads as jobs with five priority levels, from background prediction up to critical, under an in-flight limit. Stale jobs are cancelled by generation, so a fast camera move does not leave a queue of tiles nobody needs.

A coarse fallback, never a hole

Upload order follows camera focus and visibility. If a fine tile is not ready yet, the coarser level stands in for it, so the surface is always closed; detail sharpens as the tiles arrive.

Eviction that keeps the fallback

When atlas memory is full, the eviction policy prefers to drop tiles of the same or a coarser level than the incoming one, considers distance from the camera focus, and protects the coverage-fallback pages — so freeing memory for detail never opens a gap in the base.

Several DEMs, one surface

When more than one DEM is visible, STREAM binds the stack into a single virtual mosaic: the topmost valid pixel wins and NoData falls through to the layer beneath. Analysis, contours, cross-sections and hydrology read that same mosaic the renderer draws — not just the first file.

Point clouds become surfaces on import

A LAS/LAZ file is probed first — point count, classification, RGB, bounds — then rasterized asynchronously into the same native tile format. You choose what the surface is: ground points only, all points, or an orthophoto from the point colours.

Height and image streamed separately

Elevation and orthophoto are tracked as separate sparse page sets, each with its own residency, so a heavy orthophoto never starves the terrain of height tiles. Rendering is Vulkan on the GPU, and on a laptop STREAM selects the discrete card itself.

How terrain streaming works in practice

  1. 1

    Open the survey

    Add the DEM (GeoTIFF or BigTIFF). On the very first open STREAM converts it to its native tiled format; a progress card at the bottom right shows the build and can be cancelled.

  2. 2

    Move freely

    Pan and zoom. Coarse tiles cover the view at once; fine tiles stream in where the camera is focused. There is no full-file load to wait for.

  3. 3

    Drape the orthophoto

    Add the orthophoto GeoTIFF. It streams as its own page set at native resolution, independent of the height tiles.

  4. 4

    Bring in a point cloud

    Add a LAS/LAZ file and pick the surface you want from it: ground DEM, all-points DEM, or an orthophoto from point colours. The result is a streamed surface like any other.

  5. 5

    Stack several DEMs

    Load the DEMs of the same site. Visible layers are combined into one virtual mosaic — the top valid pixel shows, NoData falls through — and every analysis reads that mosaic.

  6. 6

    Reopen

    The native copy stays with the project. Next time, the same survey opens in seconds because the conversion is already done.

What surface a LAS/LAZ point cloud becomes on import — the three rasterization options
OptionWhich points are usedWhat you get
Ground DEMClass-2 (ground) points, the minimum elevation in each cell.A bare-earth terrain surface for volumes, slopes and design work.
All-points DEMEvery point, the maximum elevation in each cell.A surface that includes vegetation and structures — what a DSM shows.
OrthophotoThe colour of the highest point in each cell, when the cloud carries RGB.An image layer draped over the terrain, streamed as its own page set.

Supported formats

GeoTIFF / BigTIFF
Source DEM and orthophoto, read through GDAL
LAS / LAZ
Point cloud rasterized into a streamed surface on import
.st.tif / .so.tif
STREAM's native optimized copies — 512 × 512 tiles with overview levels
Virtual mosaic
Several visible DEMs bound into one surface for rendering and analysis

Frequently asked questions

What is terrain streaming?

Keeping a large terrain dataset on disk in a tiled, multi-resolution form and moving only the visible tiles into graphics memory each frame — coarse tiles for the whole view, fine tiles where the camera is focused. The file's size stops being the limit; what you are looking at is, and that is bounded by the screen.

How large a DEM can STREAM stream?

STREAM is built for gigabyte-scale DEMs. Because only the visible tiles are resident, size affects the one-time conversion on first open rather than how the terrain feels afterwards.

Why does the first open take longer than the next ones?

On first open STREAM converts the source into its native optimized copy: 512 × 512 tiles, overview levels, compressed. That build runs once and shows as a cancellable progress card. Afterwards the renderer reads tiles from the native copy directly, so reopening takes seconds.

Does STREAM change my source GeoTIFF?

No. The source is read through GDAL; STREAM writes its own optimized copy alongside and works from that. Your original file is not rewritten.

Can I load more than one DEM of the same site?

Yes. Visible DEMs are bound into a single virtual mosaic — the topmost valid pixel wins and NoData falls through to the layer beneath — and analysis reads that same mosaic the renderer draws. This was a real fix: earlier, some tools only ever read the first DEM.

What happens to a LAS/LAZ point cloud?

It is probed for point count, classification, RGB and bounds, then rasterized asynchronously into the same native tile format. You choose the surface: ground points only (class 2, minimum elevation), all points (maximum elevation), or an orthophoto from the point colours.

Why does detail sharpen a moment after I stop moving?

Because the coarse level stands in until the fine tiles for your focus arrive. Uploads follow camera focus and visibility, decode runs on worker threads under an in-flight limit, and stale requests from a fast move are cancelled rather than queued.

What graphics card does it need?

STREAM renders with Vulkan on the GPU. On a laptop with two cards it selects the discrete one itself and records the high-performance preference for the app; you can see the card actually in use under Help ▸ Performance Diagnostics.

Does terrain streaming need an internet connection?

No. Everything — conversion, streaming, rendering — runs on your machine. Nothing is uploaded and the data does not leave the computer.

What if two rasters have different coordinate systems?

The first valid raster CRS becomes the project CRS. A raster whose CRS does not match is still imported, but it is not drawn into the terrain until the mismatch is resolved — STREAM does not silently guess a transform.

Try Terrain Streaming in STREAM

Free beta for Windows x64. Works fully offline with GeoTIFF, LAS/LAZ and DXF.

Download STREAM free