feat(map): add seamless five-band grid LOD

This commit is contained in:
Codex
2026-08-05 19:36:01 +03:00
parent 2cd3b33141
commit 80e948c018
10 changed files with 638 additions and 62 deletions
+22
View File
@@ -157,6 +157,28 @@ outline плашки отключён и не создаёт дополните
доступной поверхности, а depth-fail material не даёт стержню исчезнуть при
пересечении рельефа.
### Планетарная сетка и LOD
Map Page использует один сохраняемый профиль сетки из пяти LOD. По умолчанию
LOD 1–3 рендерятся как приподнятая пространственная сетка, а LOD 4–5 — как
гратикульная проекция по поверхности. Для каждого LOD отдельно задаются
верхняя высота (кроме последнего), шаг и режим. Общими остаются центр, размер
стабильного тайла, радиус, высота 3D-слоя, допустимый угол от надира, линии,
кружки и кресты. Старые layout автоматически дополняются этими полями только
в client state и переписываются после явного Application Save.
Выбор band использует hysteresis `0.08`, поэтому камера у границы не заставляет
слой дрожать между соседними LOD. При camera-centered режиме центр квантуется
по `gridTileSizeKm`: небольшое движение внутри тайла не пересобирает геометрию.
Опция `gridRebuildOnMoveEnd` сохраняет доказанный Engine-паттерн и по умолчанию
не запускает тяжёлую перестройку во время движения.
Смена геометрии выполняется двойным буфером. Следующий `CustomDataSource`
сначала монтируется рядом с текущим; текущий удаляется только после двух
готовых post-render кадров (`dataSourceDisplay.ready`) либо по bounded cleanup
timeout. Запрещено очищать live grid через `entities.removeAll()` до подготовки
замены: именно это создаёт видимые дыры при переходе между LOD.
## Acceptance fixtures
- `registry/fixtures/map/map-empty-offline-v0.1.json` — отсутствие provider/live data без разрушения shell и управляющих действий.