Подходы и результаты
Игра строится на физике, а физику можно считать по-разному. Эта страница — карта того, что мы пробовали по ключевым темам, с числами результатов, выбором и причиной выбора. Первая и самая длинная тема — ветер над рельефом: за неделю он прошёл путь от формул через решатель на видеокарте к нейросети.
Как читать: у каждого подхода — что делали, что вышло, что решили и почему, ссылка на источник. Все числа взяты из документов репозитория — реестра выводов, планов в разделе «Планы», исследований, CHANGELOG и дневника; где число — оценка, а не замер, это сказано. Критерий выбора везде один (решение автора): сначала физика в пределах модели, потом точность, потом цена. «Нравится пилоту» — ориентир, а не требование: подгонять коэффициенты «чтобы понравилось» бесперспективно, поэтому подгонка идёт по схеме с измерениями и погрешностями.
Ветер над рельефом
Сводка подходов по порядку:
| № | Подход | Когда | Итог |
|---|---|---|---|
| 1 | Формулы: профиль ветра, подъём по уклону, «линия тени» за гребнем | с первой сборки; версия 0.8.0 | работает, но «не физично»; остался запасным путём и режимом «Упрощённый» |
| 2 | Поле ветра, согласованное по массе (уравнение Пуассона) | план 29.09 | в работу не взят, заменён: нет тепла и инерции воздуха |
| 3 | Связанная система «нагрев → плавучесть → поток»: 2D-прототип и шесть опытов | 29.09 | идея физически верна; выбран метод Пикара |
| 4 | Решатель Пикара на видеокарте, три масштаба | сборка 1.0.0, 01.10 | в игре, режим «Расчёт по рельефу»; есть известные расхождения |
| 5 | Упрощённый режим «как в 0.8.0» | 1.0.3 и 1.0.4, 03.10 | выбор пилота при сбоях и для лёгкого запуска |
| 6 | Нейросеть вместо решателя: пилоты P1, P2, P3 | 02–04.10 | в игре сеть P2, «экспериментально»; заменить решатель не удалось |
| 7 | WindNinja как независимый эталон | 04.10 | не замена решателя; подтверждает разгон на гребнях |
1. Формулы (версия 0.8.0)
Что это. Весь воздух пилот получает через одну функцию Atmosphere.air_velocity_at. Горизонтальный ветер растёт с высотой по степенному закону и с высотой над уровнем моря, направление одно на весь мир:
Склоновый подъём — $w_{ridge} = \mathrm{clamp}(0{,}85 \cdot u \cdot (\hat w \cdot \nabla h) \cdot e^{-agl_s / 250}, \pm 6\ \text{м/с})$ с точкой уклона, сдвинутой против ветра на $0{,}8,agl$ (не более 400 м). Подветренная зона — «линия тени»: ниже линии с наклоном 12° от гребня воздух в роторе (опускание $0{,}25\ldots0{,}7,u$, болтанка $0{,}5\ldots0{,}9,u$, рывки вниз, обратный поток). Подробно — «Ветер у склона».
Что вышло. Пилот-консультант сказал, что обтекание «не физическое». Разбор (исследование) нашёл три расхождения с жизнью: нет разгона ветра на бровке, полоса подъёма — фиксированные 250 м, «труба» в седловине работает наоборот. Ориентиры пилота: разгон до примерно двух высот горы от подножия, на 2,5 высоты — ламинарно, круче склон — сильнее, седловина ×1,5 вдоль оси даже при косом ветре 15° (дневник 29.09).
Когда рядом поставили решатель, нашлись и дефекты самих формул: при 9 м/с «рывки вниз» эвристики давали −13…−18 м/с (в формуле они пропорциональны наибольшему ветру выше гребня), а обратный поток эвристики дублировал поток решателя — минимальная продольная скорость у старта вместо −0,52 м/с была −4,66 м/с (двойной ротор). Литературная проверка: максимум обратного течения за гряды 0,22 ± 0,08 от ветра на уровне гребня (Menke и др. 2019), у поля ≈ 0,2, с эвристикой ≈ 0,4. Решение (AM-08в): вес эвристики 1 − smoothstep(2, 4, превышение/dx), то есть она гаснет там, где решатель сам разрешает отрыв; рывки — 0,42·ΔU (3σw). Источник — журнал модели воздуха, раздел «Разбор на шлюзе».
Что выбрали. Формулы заменены физическим полем, но остались запасным путём (если поле не посчиталось, вне области поля) и основой режима «Упрощённый» (см. п. 5).
2. Поле, согласованное по массе
Что пробовали (на бумаге). Ветер как решение уравнения Пуассона на GPU: рельеф отклоняет поток, масса сохраняется; линейность по ветру (два базовых поля на уровень устойчивости); вложенные сетки вокруг пилота («клипмапы») от 50 до 800 м. План — wind_field, оценка ≈ 31 день работы агентов.
Что вышло. В работу план не взят. Он решал только обтекание рельефа и не давал ни тепла, ни инерции воздуха: без нагрева земли нет притока к прогретому склону, столба над гребнем и потолка термиков на инверсии. Это же показала позже проверка на WindNinja (п. 7): массосогласованная диагностическая модель сохраняет массу, но не теряет скорость на обтекании.
Что выбрали. Заменили планом модели воздуха в трёх масштабах; разделы про сетку, клипмапы и GPU переиспользованы. Платформа счёта: CUDA отвергнута (у пилотов ожидаются карты AMD), Rust + rayon / GDExtension рассмотрены и отклонены (офлайн-счёт на CPU слишком медленный для пересчёта поля в игре), выбран переносимый Vulkan compute (RenderingDevice в Godot).
3. Связанная система и прототип 2D
Идея автора. Клеточный автомат: горячая клетка отдаёт тепло вбок и вверх, подсасывает массу у холодных; дальше — «переход слой→слой умножением на матрицу переноса», «ядро как в обработке изображений». Физический базис — приближение Буссинеска: масса, импульс с плавучестью и нелокальным давлением, энергия.
Прототип на 2D-разрезе хребта (500 м хребет, склоны до 33° и 16°, нагрев до 250 Вт/м², результаты). Над прогретым склоном — подъём 1,65 м/с (оба склона — 2,47 м/с над гребнем), приток к подножию ≈ 0,5 м/с, опускание над долиной −0,08…−0,2 м/с; инверсия 1500–1800 м останавливает столб на 1550 м (без неё 1800). Сохранение: невязка массы ~10⁻¹¹ от массы области. Сходимость по клетке: на 200 м склонового ветра нет, 100 м — самая грубая сетка с правильной картиной, на 50 м подъём с ошибкой около 15 %, мельче 25 м смысла нет.
Шесть опытов: как быстро получить установившееся поле без тысяч шагов по времени (итог, дневник 29.09):
| Опыт | Что проверяли | Результат |
|---|---|---|
| 1, 3. Линейность, суперпозиция ядер | Свести поле к свёртке или цепочке фильтров | Линейно только при подъёме в сантиметры в секунду; при 250 Вт/м² ошибка суперпозиции 69 %, термик из суммы ядер втрое слабее настоящего. Отвергнуто |
| 6. «Ядро струи» | Цепочка формул: размытие нагрева, тёплый бассейн, плавучая струя | 1–2 мс; место, сила и потолок термика ±5–30 %; поле грубое. Годится как мгновенная оценка |
| 4. Матрицы перехода слой→слой | Проход вверх и вниз блочной прогонкой | Та же неподвижная точка, 1–2 %; 56–66 повторов почти не зависят от клетки (200…12,5 м); 0,33 с против 24,6 с шагами на 12,5 м. Запасной вариант для мелких окон |
| 5. ADI-прогонки по линиям | Раунды неявных прогонок | Та же точка, 100–190 раундов, итерация дорогая. Не выбрано |
| 2. Метод Пикара (импульс Озеена + проекция одним V-циклом + тепло) | Итерации до неподвижной точки | ≤ 0,5 % по ветру, ≈ 1 % по температуре, в 5–36 раз быстрее шагов; оценка 3D по области 200 м — 2–5 с. Выбран |
| (Шаги по времени) | Эталон | 3D на 50 м — около 17 мин; на 200 м 7–18 с против 2–5 с у Пикара — слишком дорого для игры, остаются эталоном |
Попутно нашлось, что эталоны базы недосчитаны (абсолютный критерий установления): на 3–8 % по ветру и 10–23 % по температуре от точной неподвижной точки — это независимо нашли все исполнители. Затем метод перенесли на реальный рельеф Онгудая (3D-эталон).
4. Решатель Пикара в игре (1.0.0)
Что сделано. Три масштаба: (1) среднее поле — Пикар на GPU: область 400 м на всё место (38,4 км), окна 100 и 50 м вокруг пилота, пересчёт каждые 15 игровых минут; (2) термики — пузыри, у которых место, сила, потолок и снос берутся из поля; (3) болтанка — спектр порывов, сила из поля. Подробности — «Модель воздуха».
Сверка с измерениями (подробно — на странице механики):
- Askervein (холм 116 м): на мелкой сетке 12,5 м разгон у вершины на 10 м — 0,59–0,61 против измеренных 0,82–0,88; сразу за вершиной модель уже тормозит поток, в измерениях там ещё разгон.
- Perdigão (две гряды): зона обратного течения слабее измеренной — длина 0,40 против 0,50 от расстояния между гребнями (северо-восточный случай), 0,20 против 0,50 (юго-западный); максимум обратной скорости 0,11 против 0,22 от ветра на 100 м.
Калибровка — по схеме Professor (сетка прогонов → полиномы → χ² с погрешностями). Совместная калибровка по двум наборам: общая длина перемешивания 27 м (+4 −3), χ²/ndf = 208/76 — данные модель в пределах погрешностей не описывает; случаи тянут параметр в разные стороны (Askervein хочет 145 м, Perdigão — 10 м). Это структурное расхождение, параметром не снимается.
Что нашёл отбор Морриса (16 факторов × 6 случаев, 1230 прогонов, 5,3 ч GPU): модель мягкая по переключателям и показателю профиля α, жёсткая от данных (94 % — одно направление SVD) и вырожденная (λ/h ≈ α ≈ порядок переноса ≈ local_k, косинусы 0,93–0,94). Найдены и исправлены три ошибки: число Прандтля, выхолаживание и высота слоя в замыкании. Число Прандтля принято 0,85 (решение автора): седловина ×2,05, подъём у старта в штиль −15 %. Вывод «данные тянут λ/h вверх» оказался артефактом ручного α = 0,17: профиль мачты даёт α ≈ 0,22, лучшие точки χ² ≈ 54 при α 0,20–0,24. Источник — реестр выводов, чувствительность, калибровка.
Что сломалось в полёте у пилота и как чинили:
- «Сдувает» на старте при 6 м/с. Проверка физики крыльев показала, что дело не в поляре (по характеристикам любое мягкое крыло идёт против 6 м/с). Причина — ветер меню задавал приток на краю области 38 км, а не U10 над стартом: поле давало 1,0–2,1 × меню (при 6 м/с — 6,2–12,6 м/с на 10 м). Решение — два прохода поля: на всех десяти стартах U10 над стартом к меню — 0,90–1,06 (30 из 30 в пределах ±10 %), загрузка 8,0–14,8 с (Алтай при 3 м/с — 26,7–38,5 с). Применено в 1.0.1 и 1.0.2. Источник — air-start, проверка физики.
- Болтанка у старта. Скачок найден бисектом по коммитам: при 6 м/с и 1,5 м над землёй σw 0,04 м/с (до окон 100/50 м), затем 0,73, в 1.0.0 — 1,05; разброс направления ±86°. Причина целиком в модели воздуха, не в управлении; после правки приземного слоя на Каянче ±21°.
- Загрузка. Этап «Рассчитываем ветер» — 7–8 с почти везде, но 25–60 с при ветре 1–2 м/с, при 3 м/с с юга или запада и в штиль в 9:00: решатель упирается в предел 3000 итераций, при 60 с — таймаут и игра остаётся без поля (исследование).
Известные расхождения (не исправлены, решение автора): слой сдвига над следом даёт болтанку в 3–4 раза сильнее литературной (0,4–0,6 против 0,13–0,15 от скачка скорости); пузырь отрыва за трёхмерными буграми завышен примерно в 1,8 раза. Закрытие модуля: GPU-тесты test_air_ 60/60, контрактные 28, атмосфера 128.
5. Упрощённый режим «как в 0.8.0»
Что произошло. Пилот сообщил, что игра иногда вылетает и спасает откат на 0.8.0: «на 0.8.0 физика не такая правдоподобная, но терпимо ради полёта»; затем — «Не мучай 1.0. Стало хуже. Сейчас 0.8 лучше всех, практически идеальная» (дневник 03.10).
Что сделали. В 1.0.3 — пункт настроек «Ветер над рельефом»: «Расчёт по рельефу» или «Упрощённый» (решатель на видеокарте не запускается, этап «Рассчитываем ветер» пропускается). Разбор различий с 0.8.0: склон, подветренные зоны, термики и болтанка в упрощённом режиме те же; изменился профиль ветра по высоте — в 1.x он зависел от часа и облачности. В 1.0.4 профиль в упрощённом режиме — как в 0.8.0: степенной, α = 0,14, не более ×1,8 от ветра на 10 м.
Почему так. Автоотключения после вылета не делали (решение автора): достаточно пункта в настройках. Откат версии не нужен — можно переключиться на «Упрощённый».
6. Нейросеть вместо решателя: пилоты P1, P2, P3
Зачем. Решатель — это 7–8 с на загрузке, а при слабом ветре и 25–60 с. Заранее посчитанный кеш не спасает: вариантов запуска в меню на один старт 57 564 (4 часа × 13 скоростей × 9 направлений × 41 температура × 3 неба), после огрубления около 2160, это 17–29 ГБ на десять встроенных стартов и 4,5–6,5 ч расчёта на старт, а любая правка модели обесценивает весь кеш (исследование). 02.10.2026 выбрано направление: в игре решателя нет, поле даёт сеть (ONNX, процессор), решатель остаётся офлайн как источник данных — «физика» поля, а сеть — его сжатие. Скорость и стабильность важнее точности: ошибка 10–15 % ветра на месте допустима — пилот примет её за порыв. Главный вопрос — заменимость: воспроизводит ли сеть решатель в пределах погрешности самого решателя (по Askervein решатель сам ошибается на ±10–20 %). План — air_nn.
Пилот P1 (02.10). Набор: 1890 случаев решателя «как в игре» — 4 встроенных места, 5 синтетических форм, 40 процедурных рельефов (≈ 7,5 ч видеокарты; 238 случаев упёрлись в предел итераций). Сеть: U-Net с условием по числам погоды (FiLM), 3,2 млн параметров, проход на процессоре 19 мс (4 потока). Результат на 60 м над рельефом:
| набор | ветер, медиана (профиль притока) | ветер в пределах 0,3 м/с | подъём в пределах 0,1 м/с |
|---|---|---|---|
| знакомый рельеф, новые условия | 0,47 (1,21) м/с | 29 % | 92 % |
| отложенные процедурные | 0,63 (1,75) м/с | 21 % | 83 % |
| Онгудай (вне обучения) | 0,87 (1,12) м/с | 12 % | 61 % |
Ориентир (90 % точек) не выполнен — «правим подход и повторяем». Причины: на проверке ошибка выходит на полку к ~30-й эпохе, на обучении продолжает падать (1188 случаев на 44 рельефах); у Онгудая при сильном ветре сеть завышает скорость почти по всей области (в одном случае +1,7 м/с, +14 %), потому что типичный уклон 400 м у Онгудая 0,22, у Алтая 0,12, у процедурных 0,016 — сеть экстраполировала. Ошибка по ветру падает с числом рельефов (Онгудай 1,16 → 0,82 м/с при 5 → 40 рельефах). Отвергнуто по ходу: приводить все входы к [0, 1] (нормировка на случай стирает масштаб); проверять на гладких процедурных рельефах (в игре вход всегда реальный рельеф) — выбрано 300 реальных рельефов.
Пилот P2 (03.10). 360 мест (пул 300 и четыре отложенные горные системы — Аппалачи, Кавказ, Пиренеи, Южные Альпы Новой Зеландии — по 15), 4320 случаев за ≈ 8 ч на одной видеокарте; около 20 % решений не сошлись, почти все на слабом ветре (цель для них — среднее поздних состояний). Критерий ветра сделан относительным: ошибка в пределах max(0,3 м/с; 10 % скорости решателя). Результат на отложенных системах (60 м, сошедшиеся):
| сеть P2 | профиль притока | |
|---|---|---|
| ошибка ветра, медиана / p90 | 0,62 / 1,84 м/с | 2,46 / 7,86 м/с |
| «ок» по ветру | 35 % | 10 % |
| подъём < 0,1 м/с (без / с нагревом) | 78 % / 72 % | 70 % / 62 % |
| смещение скорости на 60 м | +0,008 м/с | +2,32 м/с |
Смещения нет (завышение на Онгудае ушло); на несошедшихся сеть ошибается на уровне собственного разброса решателя (медиана отношения 0,91). Кривая по числу мест: 25 → 300 — 0,83 → 0,62 м/с, около −7 % на удвоение, полки нет. Но даже на обучающих местах «ок» только 49 %. Сеть — 13 МБ, 21 мс. Вердикт правилом из чисел — «правим подход».
Пилот P3 (03–04.10): физическая кодировка. Гипотеза: сеть учит слишком много с нуля; дать ей физическую базу (линейная теория обтекания, разгон и поворот вместо u и v, уклоны по масштабам, подсеточный рельеф, маска отрыва) или ёмкость. Опыты на 100 местах, отложенные горные системы, 60 м, сошедшиеся (584 случая); ветер — медиана / p90, м/с:
| Опыт | Что | Ветер | «ок» |
|---|---|---|---|
| P3E0 | контроль (кодировка P2, 100 мест, 3,2 млн) | 0,683 / 1,97 | 32 % |
| P3E1 | каналы ×2 (12,3 млн, 48 мс) | 0,665 / 1,95 | 33 % |
| P3E2 | новый вход | 0,706 | |
| P3E3 | новый выход (вероятна ошибка потерь: смещение +0,37) | 0,864 | |
| P3E4 | новый вход и выход | остановлен на эпохе ~90 (решение автора) | |
| P3E5 | лучший вариант на 300 местах | не запускался («ситуация понятна») | |
| P3E6 | фоновая стратификация во FiLM | 0,689 / 1,99 | 31 % |
| P3E7 | U-FNO (спектральные слои) | 0,732 / 2,09 | 29 % |
| P3E8 | обучение только на уверенно сошедшихся | 0,692 / 1,95 | 31 % |
Итог P3: ни кодировка, ни архитектура, ни стратификация, ни чистка целей не дали больше нескольких процентов (ширина ×2 — −2,6 %; U-FNO хуже на 7 %); медиана отношения ошибки сети к погрешности решателя ≈ 1,2 при пороге 0,5; на обучающих местах ошибка у всех вариантов ≈ 0,36 м/с (ρ ≈ 0,5) — сеть не подгоняет даже чистые обучающие случаи. Фон стратификации в наборе почти один (один месяц), вариативность масс — только утром. Лучшая — сеть P2 на 300 местах (0,62 / 1,84 м/с): данные важнее правок. Заменимость не достигнута ни одним вариантом. Источник — план P3, раздел «0. Итог P3».
Что выбрали. В игре — сеть P2, пункт «Нейросеть (экспериментально)»: считает на процессоре, видеокарта не нужна; нет сети или расширения — упрощённая модель и строка в журнале. Этап «Рассчитываем ветер» на сети — около 4 с, из них сама сеть 56 мс, остальное — сборка поля в GDScript. Первый полёт на сети в Аскарово: «в целом даже „летабельно“, совсем чего-то необычного нет» (дневник 03.10, план air-onnx). Решатель остаётся режимом по умолчанию; глубокий вопрос «почему сеть не подгоняет даже обучающие случаи» — фоновое исследование автора.
Идеи «в уме» (не проверялись, кроме отмеченного): тройная плоскость признаков с вертикальным разрезом вдоль ветра; функция тока или потенциал (сохранение массы по построению); безразмерные числа (Фруд, Ричардсон) во FiLM; вторая база — гидравлика мелкой воды для седловин и слабого ветра; каскад окон 50 и 25 м вокруг пилота; батч случаев в решателе; признак седловины (кривизна разного знака); итеративное «вымораживание» поля сетью за 2–4 шага; диффузионная модель живой изменчивости слабого ветра; FNO вместо U-Net — проверено как P3E7, хуже.
7. WindNinja
Что сделали. Сравнили наш решатель без нагрева с WindNinja (3.13 и 4.0.0, лицензия — общественное достояние / BSD-2) на 21 случае в 6 местах (Аскарово, Онгудай и четыре горные системы), 60 м, U10 4–8 м/с (отчёт).
| Показатель | WindNinja | решатель |
|---|---|---|
| разгон на гребнях, от притока | 1,19 | 1,13 |
| направление: медиана угла между векторами | 10° (Пиренеи, Южные Альпы НЗ — 21–27°) | |
| среднее по области к притоку | 1,00 | 0,61 |
| долины / подветренные склоны, от притока | 0,84 / 0,97 | 0,30 / 0,34 |
| время | 0,9 с (400 м), 15 с (100 м), 75 с (50 м), 10 потоков CPU | медиана 2,4 с на GPU (у несошедшихся — десятки секунд) |
Вывод. Разгон на гребнях и поворот потока совпадают. Торможения горным массивом WindNinja не даёт вообще — у него нет импульса и давления; значит, решатель он не подтверждает и не опровергает. Как замена решателя в игре не годится: в долинах скорость выше на 3–5 м/с и ветер «слишком ровный»; лес вместо травы сдвигает его поле на 2 м/с. Годится как независимая проверка разгона и поворота и дешёвая подложка там, где решатель не сошёлся.
Термики и погода
| Подход | Результат и выбор |
|---|---|
| Всплывающее кольцо (Скорер) против колонны | В жизни встречаются оба режима. Выбрана колонна с жизненным циклом, у которой на распаде отрывается низ: то же ощущение «пузыря, ушедшего вверх» без отдельного вихревого кольца |
| Профиль подъёма по радиусу | Гедеон («мексиканская шляпа»): ядро, кольцо опускания, полный поток массы через плоскость равен нулю. Выбран за гладкость: разница подъёма между консолями крыла плавно растёт к краю ядра, крыло кренит «из термика», а не рывком |
| Экстремальные термики 7–9 м/с | Редкие и только в сильный день, под крупным облаком (слова пилота: «+8 — уже надо валить»); тестом проверено, что в слабый и средний день их нет |
| Сухие термики | Отдельная доля, в слабый день не меньше 40 %: пилот ищет их по вариометру |
| Грозы | Раньше при +26 °C гроза у старта почти в каждом полёте. По замеру 100 дней на Онгудае теперь: +26 — Cb ближе 15 км за первый час у 0–1 % полётов, +30 — 20–40 %, +34 — 50–70 %; гроза у старта в начале полёта — 0 / 0–4 / 3–6 %. Растекание соседних ячеек не складывается (раньше до 30–60 м/с) |
| Погода пресетами «слабый / средний / сильный день» | Заменена температурой дня, ветром, направлением и облачностью, из которых термики, кромка и грозы получаются расчётом (0.6.0) |
| Термики из поля (1.0.0) | Место, сила, потолок и снос берёт поле. Онгудай, 12:00, ветер 3 м/с: на прогретых склонах 4,9 источника на км², на слабо прогретых 0,7, в тени 0; сила 2,7–3,2 м/с днём, 1,1–1,5 м/с в 9:00 (радиус ядер 25–60 м); потолок по инверсии, а не по кромке облаков |
| Двойной счёт тепла | Вертикаль поля делится на механическую (идёт пилоту напрямую) и конвективную (только через пузыри); сила по Дирдорфу, $w_*$ термиков и болтанки совпадает: отношение 1,001 ± 0,038 |
| Отдельная нейросеть для термиков | Не нужна: термики считаются формулами из литературы поверх поля, нужные величины даёт сеть поля |
Что модель не воспроизводит: «сильные термики через 1–1,5 толщины слоя» (густота всех ядер N·zi/L = 1,4–1,5 против 1,2 ± 0,4 по литературе совпадает, шаг сильных — нет); «улиц» вдоль ветра; разброс силы между соседними термиками шире, чем в модели. Источники — «Термики», исследование, CHANGELOG.
Крылья: паспорта и модели
| Подход | Результат и выбор |
|---|---|
| Линейка из девяти моделей в четырёх классах (0.6.0) | У каждой — своя поляра, масса и 3D-модель. Классы — по качеству и ветру, в котором комфортно стартовать |
| Парус «кожа на скелете» | Провис ткани между латами (1,5 %, потом 0,5 %); пилот-консультант: «натянут как барабан», разница с гладким незаметна. Прототип удалён |
| Сбор паспортов DHV и производителей | Сводный набор по моделям и размерам: площадь у 186 записей, стартовая масса у 151, Vne у 151, размах у 145. Правила: число меняется, только если есть паспорт той же модели и размера (или явно помеченный аналог); абсолютным L/D из заявок не верим; при расхождении приоритет у DHV |
| Поляры по подобию базы класса или по паспорту | DHV Vmin выше сваливания по полярам на 5–30 % у всех 22 новых крыльев с данными (у баз −10 / −21 / −11 %) — систематика; CL_max по паспортам 1,13 (Condor Crex 3) … 2,91 (Bautek Kite). В 1.0.2 у 38 крыльев сваливание, трим, максимальная скорость и минимальное снижение приведены к паспорту при эталонной массе (в пределах 7–10 %); сваливание многих — на 26–38 км/ч вместо 22–28 |
| 39 новых моделей подобием от базы класса | ≈ 0,5–0,7 МБ каждая, сборка +25–35 МБ; форма паруса, закрутка, профиль и высота кингпоста — от базы, потому что в паспортах этих чисел нет; полная корректность — по отзывам игроков |
| «Сдувает» — виноваты ли поляры | Нет: по характеристикам любое мягкое крыло идёт против 6 м/с (например, «Атлас»: CL_max 1,46, срыв 12,6°); причиной был завышенный ветер в поле (см. п. 4 выше) |
| Размер «Апогея» | 16 м² заменён на 14,4 м² (копия Airwave Magic 155, со слов пилота): при той же массе крыло летает на 5 % быстрее |
Источники — паспорта → конфиги, проверка физики крыльев, 3D-модели, раздел «Модели аппаратов».
Взлёт и управление на земле
| Подход | Результат и выбор |
|---|---|
| Фиксированные времена взлёта и «слабый разбег» | Отказ (решение автора 01.10): отрыв — только физика, подъёмная сила не меньше веса от воздушной скорости (бег плюс ветер); в штиль можно бежать сколько нужно; таймеры ботов и автопилота заменены физикой |
| Предел скорости бега | После исправления разбег в штиль на крыле sport — 67 → 13 м (2,5 с), training — 29 → 11 м, «Атлас» — 64 → 18 м; при встречном 3–6 м/с разбег 1,2–1,8 с и не менялся |
| Рука пилота на земле | Момент крена ограничен $M_{max}\cdot(N/W)$, где $N/W$ — доля веса на ногах; боковой ветер стоя: порог 1,90 м/с при встречном 4 м/с, при встречном 6 м/с — 0,6–1,0 м/с — физика, не дефект. Подвижность ног, шаг в сторону и поза тела не учитываются (граница модели) |
| Зазор крыла над рельефом | На всех стартах при нулевом крене наименьший зазор по рисуемой сетке 0,58 м — рельеф не трогаем |
| Пустырь на старте | Радиус ≥ 2 × длина разбега, убираются только деревья, кусты остаются (направление разбега при боковом ветре заранее неизвестно) |
| Управление мышью и клавишами | Мышь — всегда крыло (режим «Обзор / Трапеция» убран); W/S/A/D на земле — пилот, в полёте — голова |
Источники — control-fix, start-fixes, ui-controls.
Сетевая игра
| Подход | Результат и выбор |
|---|---|
| gRPC | Отвергнут: в Godot нет ни в движке, ни живого аддона; GDExtension с C++ gRPC — тяжёлая сборка под каждую платформу |
| WebSocket + protobuf в JSON | Выбран: встроенный WebSocketPeer без аддонов, читается глазами при отладке; контракт — server/proto/deltaplan/v1/net.proto — единственный источник правды |
| Сервер только на VPS | Дополнен встроенным: «Создать» без адреса запускает сервер на этом компьютере, остальные находят зону по UDP-объявлению в локальной сети; Go-сервер — для игры через интернет |
| Сервер через itch.io | У itch нет сетевого функционала; вариант без VPS — сервер на компьютере пилота поверх Tailscale или ZeroTier; решение автора 01.10: отложено |
| Передача мира по сети | Не нужна: атмосфера детерминирована по месту, дате, времени, погоде и зерну — каждый клиент считает её сам; по сети только параметры зоны, часы и состояния |
Источники — план сетевой игры, исследование про itch, «Сетевая игра».
Офлайн-данные мира
Идея — пакет региона в своём формате вместо загрузки по сети. Решение автора 30.09: план сохранить, реализацию отложить. Замер на Словении: пакет ≈ 80 МБ (вектор OSM 63 МБ, рельеф 30 м — 14 МБ, покров 25 м — 2,4 МБ; 81 % вектора — землепользование); для Альп порядка 150–300 МБ на страну; Россия одним пакетом — около 14 ГБ (оценка), почти всё рельеф и покров, раздавать по субъектам. OsmAnd OBF отвергнут: условия использования запрещают автоматическое скачивание, кеширование и раздачу их файлов; формат нестандартный без живых библиотек; рельефа нужного качества нет; всё полезное — данные OSM, которые проще и законно взять из .osm.pbf. Идея-альтернатива — список мест полётов из OSM и закачка полных данных по выбранному месту. Источники — план, замер, опыт с OBF.
Где искать подробнее
- Числа и источники по закрытым работам — реестр выводов.
- Планы и их статусы — «Планы»; закрытое — архив.
- Исследования и прототипы по темам — «Исследования».
- Как всё это устроено в игре — «Механики»: модель воздуха, ветер у склона, термики, полёт и крыло.
- Хронология решений и отзывов пилотов — дневник.