Bin Navara ground corridors set-wide and give corridors glow, pulse and dash

Navara's ground pass cut each corridor into chunks and tested them per
screen cell, so dense corridor sets were slow (10,000 cost about 150 ms a
frame). A corridor set is now cut into pieces along its great circles,
sorted into lon/lat tiles, each with a pyramid of bins listing the
segment runs within its margin; a pixel takes its tile and the finest
bin that covers its reach and tests only those runs. At 10,000 corridors
a frame now takes 11.8 ms still (Cesium 23 ms), at 15,000 17.9 ms. A
pixel corridor's width is measured across the line, so diagonal lines no
longer draw up to 1.4 times wider.

Pixel corridors take three looks, evaluated on the GPU from a time
uniform: Cesium's PolylineGlow falloff (glow), an alpha pulse and the
annotation route's flowing dash. While a shown set pulses or flows the
engine draws continuously, as Cesium did. Traffic's jam lines take the
glow and pulse again and the Directions route its flowing dash and render
hold, so on Cesium both match the drawing before they moved to the
contract pixel for pixel. The contract suite passes on both engines
(Cesium 69/69, Navara 72/72).
This commit is contained in:
German Khokhlov committed 2026-11-07 09:50:49 +04:00
1 parent 48885d9e61
commit 47d63128ff
30 files changed
+2501 -391

No files matched your search

+5 -2
View File
@@ -209,12 +209,15 @@ one application, and only the globe-bound parts move to the next engine.
- Navara draws them in one screen pass classified on the scene depth
(`src/globe/navara/ground/`). A corridor set is tiles of binned
segments (`corridors.js`): 10,000 corridors draw in about 12 ms still
and 15 ms moving, where Cesium takes 23 ms (the chunks before took 151
and 14 ms moving, where Cesium takes 23 ms (the chunks before took 151
and 196 ms).
- Navara's vector layers were measured against that pass and lost
(`docs/GLOBE-PRIMITIVES.md`).
- On November 7, 2026, `scripts/qa-ground-suite.mjs` (the ground checks
with pixels) passed 3 of 3 on both engines.
with pixels, the corridor looks among them) passed 4 of 4 on both
engines, and `scripts/qa-ground-looks.mjs` drew the jam line and the
route on Cesium as the old materials did, with no pixel changed at four
moments of the pulse and the dashes.
- **Rasters on the ground** (`engine.imagery`) are required of every engine
too: layers of Web Mercator tiles from a URL template or of one image (a
canvas, an image, RGBA bytes or an image URL) over a rectangle, each with
+10 -10
View File
@@ -237,18 +237,18 @@ At 10 000 corridors Cesium allocated 613 MB of WebGL memory, the pass 44 MB
and the vector layers about 70 MB.
The pass with corridor tiles, measured again with the pass before them on
the same afternoon (the machine busier, the empty scene 6.0–8.9 ms):
the same day (the machine busier, the empty scene 6.7–8.1 ms):
| N | Cesium | pass before | pass with tiles |
| ------ | -------------- | -------------- | --------------- |
| 1 000 | 12.8 / 13.9 ms | 19.8 / 24.9 ms | 9.1 / 12.6 ms |
| 10 000 | 23.1 / 23.2 ms | 151 / 196 ms | 12.1 / 15.4 ms |
| 15 000 | 31.8 / 31.4 ms | 226 / 289 ms | 17.7 / 19.7 ms |
| 1 000 | 12.8 / 13.9 ms | 19.8 / 24.9 ms | 8.7 / 10.0 ms |
| 10 000 | 23.1 / 23.2 ms | 151 / 196 ms | 11.8 / 13.8 ms |
| 15 000 | 31.8 / 31.4 ms | 226 / 289 ms | 17.9 / 19.9 ms |
The tiles hold about what the chunks held: 47 MB of textures at 10 000
corridors (46 MB before), 68 MB at 15 000 (69 MB). Packing takes longer:
the commit of 10 000 corridors went from 0.6 s to about 1.9 s, and 15 000
from 0.8 s to 3.0 s.
The tiles hold about what the chunks held: 43 MB of textures at 10 000
corridors (46 MB before), 66 MB at 15 000 (69 MB). Packing takes longer:
the commit of 10 000 corridors went from 0.6 s to 1.1 s, and 15 000 from
0.8 s to 1.7 s.
A pixel corridor's width is now measured across the line (the gradient of
the distance to it), so it is the same at any angle, as on Cesium. Before,
@@ -284,8 +284,8 @@ ground outlines and no metre widths. Their colours are lit, and hiding them
needs a rebuild.
Corridors were the pass's limit: 10 000 lines took 135 ms. With a
set-wide grid of bins (corridor tiles), 10 000 take 12 ms, under Cesium's
23 ms.
set-wide grid of bins (corridor tiles), 10 000 take 12 ms still and 14 ms
moving, under Cesium's 23 ms.
## Imagery: rasters on the ground