Погода по температуре и суточный ход
Пилот в игре не выбирает «слабый / средний / сильный день» из списка — он задаёт то, что видит в прогнозе: дневной максимум температуры, силу и направление ветра, облачность. Всё остальное — высота термиков, кромка облаков, сила и частота подъёмов, вероятность грозы, дневной ход — модель выводит из этих чисел физически.
Как это устроено
Экран «Полёт…» задаёт три вещи: температуру днём (0…+40 °C, ползунок с подсказкой «обычно в этом
месяце — …»), ветер (0…12 м/с на старте плюс направление, «встречный» или один из 8 румбов) и
облачность («Ясно / Переменная / Облачно»). WeatherModel.derive (чистые функции,
scripts/atmosphere/weather_model.gd, параметры — configs/weather_model.json) превращает эти три
числа в тот же словарь параметров, который раньше был жёстко прописан в пресетах weak/medium/strong.
Влажность отдельно не запрашивается — пилот сочла её лишней: точка росы берётся как обычная для месяца
и места.
Высота термиков и кромка. В перемешанном слое поднимающийся пузырь остывает по сухой адиабате, окружающий воздух наверху — по климатическому градиенту месяца:
где h_v — высота долины (нижние 10 % рельефа в радиусе 10 км), δ = 1 К — перегрев пузыря,
Γ_env = 4 К/км — климатический градиент выше слоя, T_u и T_d — табличная температура на 3000 м
и точка росы для месяца. Верх подъёма — меньшее из двух: z_top = min(z_dry, z_lcl). Запас
m = z_dry − z_lcl определяет, будет ли день кучевым или «голубым» (без облаков, если m < −100 м).
Для опорного места (Алтай, июль: h_v ≈ 400 м, T_u = +2 °C, T_d = +8 °C):
| Температура днём | z_dry | z_lcl | запас m | кромка над средней землёй | день |
|---|---|---|---|---|---|
| +12 °C | 500 м | 900 м | −400 м | 300 м (минимум) | почти мёртвый, голубой |
| +16 °C | 1200 м | 1400 м | −200 м | ~300–500 м | слабые сухие термики |
| +20 °C | 1870 м | 1860 м | ≈ 0 | ~960 м | ≈ слабый (редкие облачка) |
| +26 °C | 2900 м | 2600 м | 300 м | ~1700 м | ≈ хороший день |
| +31 °C | 3760 м | 3210 м | 550 м | ~2300 м | ≈ сильный, переразвитие |
| +34 °C | 4300 м | 3570 м | 700 м | ~2650 м | грозовой: Cb заметно чаще |
Рост кромки — примерно 120–140 м на градус разницы температуры и точки росы, как и знают пилоты по правилу «+1 °C — плюс 120 м».
Сила, размер и частота термиков берутся из кусочно-линейной таблицы опор по высоте верха подъёма
(top_agl) — её строки ровно совпадают со значениями прежних пресетов (калибровка сохранена), с
поправками на сезон (высота солнца в полдень) и на ветер (сильный ветер рвёт термики: множитель к
силе падает с 1,0 при слабом ветре до 0,5 при 45 км/ч).
Облачность по запасу m — доля сухих (безоблачных) термиков, толщина облака, вероятность
переразвития и доля термиков, дорастающих до грозовой ячейки (Cb), — всё зависит от одного числа
m; подробнее про грозы — на странице «Термики».
Суточный ход
Пилот вводит дневной максимум, а не температуру на момент старта: в прогнозе крупно пишут именно
максимум, а при ускорении игрового времени (×10, ×60) число не должно «плыть». Температура на момент
t считается по формуле Партона — Логана — синусоида от восхода к максимуму (полдень + 2,5 ч), затем
спад к закату:
где A — суточная амплитуда по месяцу (июль ≈ 11 К, апрель ≈ 12 К, январь ≈ 6 К), f(t) — синус от
восхода (0) до пика (1), после пика спадает к закату до f ≈ 0,65.
Инерция прогрева земли — по 9 классам поверхности (поле, скалы, лес, застройка, вода, снег…), у
каждого своя постоянная времени: dS/dt = (a·I(t) − S) / τ. Луг прогревается за ≈ 0,5 ч, скалы и
осыпи — за 1,5 ч, вода — за 10 ч (почти не меняется за день), лес отдаёт тепло с запаздыванием ≈ 0,6·τ
— поэтому «вечерние термики с камней» и тёплых стен появляются позже, чем над открытым полем.
Утренняя приземная инверсия держит термики низко, пока прогрев её не пробьёт: кромка поднимается
всё утро, а не сразу стоит на месте максимума. Сила термиков растёт с потоком тепла как (поток/пик)^(1/3)
(масштаб Дирдорфа), доля рождений — как (поток/пик)^1, поэтому вечером термиков заметно меньше, они
шире и мягче (мягкость определяется тем же отношением потока к пику: увеличенный радиус, ослабленное
ядро, слабее болтанка на краю). Ближе к закату механическая болтанка снижается — воздух у земли
успокаивается, а сам склон работает как днём: «тёплый, очень хороший мягкий воздух, хорошая динамика
у склона, термиков мало» (слова пилота, легли в основу этого раздела модели).
Погода в игре пересчитывается раз в 60 игровых секунд и «ведётся» плавно (за ~5 минут) без пересоздания поля: живые термики доживают со старыми параметрами, а рождаются уже новые.

Физика: законы и приближения
Модель опирается на стандартные приближения авиационной метеорологии: сухая адиабата 9,8 К/км, правило LCL (уровень конденсации) ≈ 122–125 м на градус разницы температуры и точки росы — теоретическое значение подтверждается замерами по параплановым трекам (Франция, 2017–2024): наклон «потолок/спред» 101–133 м/°C в зависимости от рельефа, теория даёт 125 м/°C. Климатический профиль выше перемешанного слоя и суточный ход по Партону — Логану — общепринятые упрощения: реальная атмосфера, конечно, не идеально перемешана и не идеально синусоидальна по времени, но для игры этого достаточно, чтобы «жарче у земли при том же воздухе наверху» физически осмысленно означало «термики выше и злее» — то есть весенние +15 °C при холодном воздухе наверху дают такой же хороший день, как июльские +26 °C.
Границы модели
- Точка росы постоянна в течение дня (берётся по таблице для месяца) — в жизни она тоже плывёт, хотя гораздо медленнее температуры; влажность как отдельный параметр пилот не задаёт.
- Источники термиков не смещаются во времени иначе, чем через силу и долю — позиции клеток
(
thermal_spacing_m) фиксированы на весь день по пиковому потоку, иначе термики «прыгали» бы при каждом пересчёте; это сознательное упрощение ради стабильной картины неба. - Высота солнца для выбора источников термиков берётся мгновенно от текущего направления на солнце, а вот сам поток тепла в грунт (и, значит, сила) — с инерцией по классу поверхности; то есть «где будет термик» реагирует на солнце быстрее, чем «насколько он будет силён».
- Таблица опор по
top_aglкусочно-линейна, а не выведена заново из потока тепла в каждой точке: строки таблицы — калиброванные значения прежних пресетов, не прямой расчёт по нагреву конкретного участка склона. - Снег на рельефе не рисуется — зимний холодный воздух с термиками от прогретого леса против снежного поля упомянут как идея на будущее, но в модели пока не реализован.
- Волна скрыта и выключена по умолчанию (
wave.enabled = false): физика подветренной волны (сильный ветер поперёк хребта + устойчивый воздух) существует в коде, но слова «волна» пилот не знает, и по умолчанию она не включается — подробнее на странице «Ветер у склона».
Что рассматривали и почему так
Раньше пилот выбирала из пяти готовых пресетов погоды («Слабый / Средний / Сильный день / Гроза /
Волна») — по отзыву это выглядело странно: в реальном прогнозе таких категорий нет, есть температура и
ветер. Пресеты убраны из интерфейса совсем (без сохранения совместимости со старыми настройками — у
игры ещё нет пользователей, которых нужно было бы переносить), но сами значения weak/medium/strong
остались во внутренних эталонах и тестах как калибровочные точки: убедиться, что +20/+26/+31 °C дают
примерно те же дни, что раньше давали старые пресеты.
Отдельно рассматривался — и был отвергнут в пользу более широкого плана — вариант «поле ветра на сетке, согласованное по массе» (docs/archive/plan/wind-field.md): решать уравнение неразрывности по рельефу и получать физически согласованный ветер без ручных формул для склона. У этого плана не было ни тепла (то есть ни термиков, ни разницы прогретого и холодного склона, ни инверсии), ни инерции (пересчёт по смене погоды был бы мгновенным, без плавного суточного хода). План заменён более общим — docs/plan/air_model.md, «Модель воздуха в трёх масштабах», где тепло и инерция заложены с самого начала.
Дальше
В игре единое физическое поле воздуха на три масштаба: среднее поле (где дует, где держит склон, потолок термиков — установившееся решение уравнений Буссинеска, пересчитывается каждые 15 игровых минут и при смене ветра или погоды), термики (модель пузырей, но источники и сила — из поля, а не из таблицы опор) и возмущения (болтанка и порывы — из статистики турбулентности поля). Суточный ход, инерция прогрева по классам поверхности и температура как входной параметр остались теми же — поле берёт их как вход. Подробнее — модель воздуха, docs/guide/air-model.md.
Подробнее
- docs/archive/plan/weather-by-temperature.md — полный план: интерфейс, формулы, конфиги, ответы пилота.
- docs/guide/atmosphere.md → «Погода из прогноза» — как это подключено в игре.
- docs/research/calibration_data.md — таблицы для калибровки (§1 «Термики», §6 «Профили атмосферы, облака»).
- scripts/atmosphere/weather_model.gd, scripts/atmosphere/surface_heating.gd — код.
- configs/weather_model.json — все числа модели погоды.
- CHANGELOG.md — что для пилота изменилось по датам.