Cesium Terrain Truth Benchmark

Quantify the disagreement between an external DEM/DSM and the terrain Cesium actually renders. A companion benchmark to heli-tracking-sdg.

VoxelisAI/heli-tracking-sdg

Google Photoreal (DSM) vs Copernicus GLO-30 (DEM), 6 of 9 patches

mountain
mountain
desert
desert
coastal
coastal
urban
urban
airfield
airfield
canyon
canyon

The green surface is Google Photorealistic 3D Tiles, the orange surface is Copernicus GLO-30.

Results

Headline RMSE in metres:

Patchvs Cesium WT, Copernicusvs Cesium WT, 3DEPvs Photoreal, Copernicusvs Photoreal, 3DEPWT vs Photoreal (DSM gap)
open_sky6.785.980.700.916.62
mountain22.7737.5725.2040.8011.25
forest0.560.243.123.012.96
desert8.5311.1510.2913.175.41
coastal21.1225.3522.5526.529.86
urban58.421.9753.0854.8754.86
airfield4.151.184.024.844.95
canyon26.4435.0425.5934.7810.76
industrial3.142.405.064.825.40

How it works

  1. Cesium sampler inside the Isaac Sim 5.1.0: For each patch in /configs/locations.yaml and each configured Cesium source it sweeps a nadir depth probe over a centred ENU grid and writes cache/<location>/<source>.npz plus a metadata sidecar.
  2. Host-side comparator: For each location loads Cesium heightfields, samples every configured DEM source at the same ENU grid, converts heights to the WGS84 ellipsoid, runs vertical metrics and writes per-patch reports.
flowchart LR
    LocCfg[configs/locations.yaml] --> Sampler[scripts/sample_cesium_patch.py]
    Docker[scripts/run_sample.sh] --> Sampler
    Sampler --> WTCache["cache/{loc}/cesium_world_terrain.npz"]
    Sampler --> GPCache["cache/{loc}/google_photoreal.npz"]

    SrcCfg[configs/sources.yaml] --> Compare[scripts/compare_dem_to_cesium.py]
    WTCache --> Compare
    GPCache --> Compare
    Compare --> DemReader[terrain_benchmark/dem_reader.py]
    DemReader --> Tile["data/dem/{copernicus_glo30|usgs_3dep}/*.tif"]
    Compare --> Reports["reports/{loc}.json + .txt + .png + .3d.html"]
    Reports --> Gif[scripts/render_3d_gif.py]
    Gif --> GifOut["reports/{loc}.3d.gif"]

Other projects