Copied verbatim from BENCHMARK-METHODOLOGY.md (gv-lab-web).

OverRock™ Benchmark: Testing Methodology (ORB-1.2)

This page explains what the OverRock™ Benchmark does, how it measures, and how the score is calculated. It describes benchmark version ORB-1.2, first shipped in OverRock™ Test (Lab) 0.1.28. The code is earth/bench.js (client) and the leaderboard Worker (server).

1. What runs

The benchmark is a watchable run of about 95 seconds on the app's own 3D globe. The camera orbits the Earth continuously (yaw about 0.11 rad/s). Seven stages run back to back:

# Stage Length What is on screen What it stresses
1 Orbit 10 s Globe at full quality, zoom 1× Base scene: imagery, clouds, atmosphere, shading
2 Weather 14 s Zoom 1.5×, seeded synthetic radar rain field + 300 lightning strikes Weather overlays, blending, lightning
3 Wildfire 12 s Zoom 2.1×, 8,000 seeded fire points + smoke plumes Point sprites, transparent overdraw
4 Close-up 14 s Zoom sweeps from 2.5× to 60× with camera tilt High-detail imagery tiles, texture bandwidth
5 Particle storm 14 s Particle field (1,000,000 on PC, 300,000 on phones) GPU compute (WebGPU) or vertex throughput (WebGL2)
6 Everything 11 s Rain, lightning, fires, smoke and particles together, zoom 1.35× Combined load
7 Planet dive 18 s A cinematic camera rotates to a sunlit landmark, dives on an eased spline down to the Sentinel-2 10 m limit (1 image texel per screen pixel), holds, then swoops back up. Haze and imagery relief shading are on. Large-texture streaming, sampling and atlas uploads at full native resolution

All visual quality categories are forced to their maximum for the run. Weather, fires and lightning come from fixed random seeds, not live data, so every machine renders the same workload.

2. Run modes, resolution and settings

Before each run, a settings pop-up shows the detected rig and graphics API and offers two modes:

Both modes go fullscreen: native fullscreen in the PC app, and immersive mode in the Android benchmark screen. They exit fullscreen afterwards. Esc (PC) or Back (Android) stops a run at any time.

3. Graphics API

4. How frames are measured

5. CPU test

After the GPU stages, a CPU test runs in Web Workers. It is shaped like a game simulation tick:

Procedure: a 0.8 s warm-up on 1 worker, then ST = ticks per second on 1 worker for 4 s, then MT = total ticks per second on min(8, logical cores) workers for 4 s. Each worker has its own data, so working-set size grows with thread count.

Thread scaling is capped at 8 and has diminishing returns (exponent 0.65), so extra cores beyond what games typically use cannot run up the score.

Planet dive details

If every HD tile hasn't arrived within 150 s, the run still finishes but is marked HD tiles incomplete (slow network) and is treated as a custom run: it can't be submitted, so network speed can never shape a ranked score. The dive picks the most sunlit landmark that a single clear Sentinel-2 pass (one acquisition day) fully covers, and builds the close-up only from that pass's granules. They share date, sun angle and processing, so the mosaic has no tone seams or gaps. The 30 m layer above 20 m/px is Landsat (WELD), so there's a slight shift in colour where the dive switches to Sentinel-2.

6. Score formula (ORB-1.2, exact)

Stage score   S_i  = 0.7 × avgFPS_i + 0.3 × onePercentLowFPS_i
GPU score          = round(10 × geomean(S_1..S_7) × sqrt(nativePixels / 2,073,600))
scale              = min(8, max(1, MT / ST))
CPU score          = round(2 × (0.55 × ST + 0.45 × ST × scale^0.65))
OverRock™ Score     = round(0.75 × GPU score + 0.25 × CPU score)

The GPU and CPU sub-scores are always shown separately next to the total. The leaderboard recomputes all scores on the server from the submitted per-stage stats; the score the client calculated is ignored.

7. Vendor neutrality

8. Getting repeatable results

9. Leaderboard and anti-cheat

Leaderboard submission is opt-in and tied to a signed-in Discord account. You choose to submit, either with your Discord name or anonymously. A submission sends the benchmark version, API, resolution, pixel count, per-stage stats, CPU results and detected hardware names. Nothing else is sent. The server (free Cloudflare Worker + D1):

10. Versioning

Scores are only comparable within the same benchmark version (ORB-1.2 here). Any change to the scenes, measurement or formula gets a new version, and the leaderboard only shows and accepts the current version.