Модель воздуха в трёх масштабах
Раньше ветер и термики в игре были набором отдельных формул: глобальный ветер одного направления, отдельная надбавка у склона, термики по карте нагрева. Теперь воздух считается одним физическим полем на сетке, а термики и болтанка берут из него место и силу. Модель работает в игре и включена по умолчанию; если поле не удалось посчитать, игра остаётся на прежних формулах.
Ниже — что модель умеет, на чём основана, с какими измерениями её сверяли и где она заведомо ошибается.
Что умеет модель

Ветер обтекает рельеф. Подъём на наветренном склоне, разгон у бровки, опускание за гребнем, обтекание сопок сбоку, усиление ветра в седловине получаются из самого поля, а не из отдельных формул. При косом ветре подъём слабее: при 45° он составляет 0,72 от подъёма поперёк склона (слова пилотов — 0,55–0,8).
Ротор и рывки за гребнем. За гребнем поле показывает след: опускание и ослабление ветра. Поверх него модель добавляет слой смешения между потоком над гребнем и следом (болтанка в нём — 0,14 от скачка скорости), рывки вниз и обратный ветер у земли. Там, где решатель сам даёт обратное течение (окна 50 и 100 м, пузырь покрыт не менее чем 8 клетками), обратный поток берётся из поля; на грубой области 400 м — из оценки по измерениям Perdigão (0,22 от ветра на уровне гребня).
По модельным расчётам это сильно изменило провалы за гребнем при 9 м/с у земли: минимум вертикальной скорости на 10 / 20 / 50 м над стартом был −13,0 / −18,2 / −16,4 м/с (рывки прежней эвристики, считавшей от наибольшего ветра выше гребня), стал −0,9 / −1,2 / −1,8 м/с при −0,8 / −1,0 / −1,4 м/с у самого поля. Болтанка за гребнем у трёх проверенных стартов по расчётам теперь слабее прежней: σw 0,86 / 0,77 / 0,44 м/с против 1,14 / 1,08 / 1,27 (на 25–65 %). Ориентир — физика; прежние ощущения — наблюдение, его проверит полёт пилота.
Термики берутся из поля. Пузыри термиков остались, но где они рождаются, какой они силы, до какой высоты поднимаются и куда сносятся, решает поле: источники — там, где у земли больше тепла и воздух сходится. Для Онгудая в 12:00 (ветер 3 м/с, ясно, типичный июль) на прогретых склонах 4,9 источника на км², на слабо прогретых — 0,7, в тени (где потока тепла нет) — 0. Утром, в 9:00, слой перемешивания тонкий, ядра мелкие (радиус 25–60 м) и частые, сила 1,1–1,5 м/с; в 12:00 — 2,7–3,2 м/с. Потолок — по инверсии, а не по кромке облаков: при инверсии 20 К/км над 2000 м частица поднимается до 2061 м. На реальном рельефе столб термика утром 575 м, в 12:00 — 1440 м, в 15:00 — 1640 м.

Болтанка. Сила считается из поля: из ветра у земли, сдвига ветра, устойчивости и конвекции. Она растёт с ветром; у бровки на 20 м в 1,5 раза сильнее, чем на равнине (воздух там разгоняется); в устойчивом воздухе выше приземного слоя почти гаснет. Спектр порывов теперь близок к закону −5/3: наклон от −1,58 до −2,00 против около −2,9 у прежнего шума.

Поле считается вокруг пилота и обновляется. Три уровня: область 400 м на всё место (38,4 км), окно 100 м (6,4 км) и окно 50 м (3,2 км) вокруг пилота. Окна стыкуются с родителем без ступеньки: за 50 м до края окна ветер на 50 м над землёй меняется на 9–12 % (внутри окна — на 9–18 %). Когда пилот ушёл от центра окна на четверть его стороны, окна пересчитываются фоном (1–3 с), пока игра берёт прежние. Поле пересчитывается каждые 15 игровых минут и при смене ветра (более 0,05 м/с или 1°) или погоды; новое подмешивается плавно, за 60 секунд.

Загрузка. При загрузке места идёт этап «Рассчитываем ветер»: на RTX 4070 SUPER 3,3–3,9 с (на слабых AMD оценка — до 15 с).
Сетевая игра. Каждый клиент считает поле сам, и на разных видеокартах оно получается чуть разным. Общие у всех места термиков: источники выбирает ведущий и рассылает остальным, а силу, потолок и снос каждый считает по своему полю; отличия — не более 0,008 м/с по силе и 0,4 м по оси термика.
На чём основано
Физика
Основа — законы сохранения массы, импульса и тепла в приближении Буссинеска: плотность воздуха считается постоянной, кроме члена плавучести. Модель ищет установившееся решение — среднюю картину за час при перемешанном воздухе, а не расчёт по времени шаг за шагом (на мелкой сетке это стоило бы минуты на кадр). Решает его метод Пикара: приближения уточняются, пока поле не перестанет меняться. Счёт идёт на видеокарте в вычислительных шейдерах Vulkan, поэтому работает и на AMD, а не только на NVIDIA.
Масштабов три:
| Масштаб | Что для пилота | Размер / время | Чем считаем |
|---|---|---|---|
| 1. Среднее поле | где дует, где держит склон, где «стоят» термики, потолок, снос | клетка 400 м по области, 100 и 50 м вокруг пилота; поле на игровой час | уравнения Буссинеска, метод Пикара, GPU |
| 2. Термики | ядро, край, «промахнулся — провалился», жизнь пузыря | 100–500 м, минуты | пузыри (Гедеон, Аллен); место, сила, потолок и снос — из поля 1 |
| 3. Возмущения | болтанка, порывы, удары вниз, ротор | менее 50 м, секунды | статистика турбулентности; сила — из поля 1 и 2 |
Масштабы 2 и 3 берут «где и насколько» из поля по физическим формулам; своими остаются форма и жизнь (пузырь термика, спектр порывов). Вертикаль поля делится на механическую (воздух перетекает рельеф — идёт пилоту напрямую) и конвективную (от нагрева — только через пузыри термиков), чтобы не считать тепло дважды. Силу термика даёт масштаб Дирдорфа по потоку тепла от земли и высоте слоя перемешивания; в болтанке используется та же формула, и w совпадает у неё с w источников: отношение 1,001 ± 0,038 (Каянча, 12:00).
Метод счёта выбирали из нескольких. Шаги по времени точны, но дороги (7–18 с на область 200 м против 2–5 с у метода Пикара на RTX 4070 SUPER); линейные ядра с суперпозицией физически неверны — термик из суммы ядер выходил втрое слабее настоящего. Метод Пикара даёт ошибку не более 0,5 % по ветру и около 1 % по отклонению температуры. Подробнее — итог прототипа.
С чем сверяли
Данные собраны в каталоге: откуда они, что измерено и чем ограничено.
Askervein (остров Южный Уист, Шотландия, 1982–83) — классическая проверка течения над одиночным холмом высотой 116 м: мачты вдоль линий через холм, ветер 210°, 8,9 м/с, воздух почти нейтральный. Данные — Zenodo 4095052, CC BY 4.0. Сравнивали разгон ветра относительно опорной мачты на той же высоте: 36 точек на 10 м и профиль по высоте на вершине.

Не совпало: на мелкой сетке (12,5 м) модель даёт у вершины на 10 м разгон 0,59–0,61 против измеренных 0,82–0,88; сразу за вершиной она уже тормозит поток (0,19 против 0,68 и −0,07 против 0,40), а в измерениях там ещё разгон. Вдоль гребня ниже измеренного на 0,1–0,3.
Perdigão (Португалия, 2017) — две параллельные гряды с перепадом долина–гребень около 200 м и расстоянием между гребнями около 1,4 км, пятна леса; мачты и лидары. Он нужен для следа и ротора, которых Askervein почти не показывает (за холмом всего 3 точки). Отобраны два нейтральных случая: ветер с северо-востока (27.04.2017) и с юго-запада (11.05.2017), около 8,8 м/с на 100 м. Из статьи Menke и др. 2019 взята статистика зоны обратного течения по 1619 десятиминуткам: она есть в 52 % времени, в среднем 697 м длиной (около 2,8 высоты гряды), максимум обратной скорости около 0,22 от ветра на 100 м.

Не совпало: зона обратного течения за гребнем у модели получается, но слабее измеренной — длина 0,40 от расстояния между гребнями против 0,50 (северо-восточный случай), максимум обратной скорости 0,11 от ветра на 100 м против 0,22; в юго-западном случае длина 0,20 против 0,50.
Прочее. Густота термиков N·zi/L = 1,4–1,5 против 1,2 ± 0,4 по литературе (Lenschow & Stephens 1980); число, радиус и сила ядер — по Allen 2006; спектр порывов — закон −5/3. Слова пилотов в подгонку не входили — их сравнили с моделью после калибровки (таблица ниже).
Калибровка
Подгонки «на глаз, чтобы понравилось» нет — решение автора. Калибровка идёт по схеме Professor из физики высоких энергий: сетка прогонов модели по параметрам, полиномиальное приближение каждой наблюдаемой, минимум χ² относительно измерений с погрешностями. Подгоняются только неизвестные параметры с физическим смыслом, известные из литературы фиксируются со ссылкой; параметров заметно меньше, чем наблюдаемых.
Итог последней совместной калибровки: общая длина перемешивания у рельефа — 27 м (+4 −3) по Askervein и Perdigão вместе, χ²/ndf = 208/76 (Askervein 165 на 47 наблюдаемых, Perdigão 43 на 35). Это много больше, чем допускают погрешности: данные модель не описывает в их пределах. Случаи тянут параметр в разные стороны — один Askervein хочет 145 м, один Perdigão — 10 м (нижний край сетки). Это структурное расхождение модели, параметром его не снять. В игре длина перемешивания равна max(40 м, 0,0158·h), где h — толщина слоя; нижняя граница 40 м нужна для сходимости счёта. Показатель профиля ветра по высоте зависит от устойчивости (0,24 в нейтральном слое; 0,11 при ясном полдне в штиль и при 3 м/с); число Прандтля 0,85 взято из измерений нейтрального слоя.
Слова пилотов против модели после калибровки (синтетика, ветер 5 м/с):
| Слова пилота | Цель | Модель | Совпало |
|---|---|---|---|
| полоса подъёма около 2 высот горы, выше спокойно | разгон на 2 H над подножием не более 10 % | 19 % (потенциальное обтекание — 24 %) | нет |
| седловина — «труба» ×1,5 | 1,5 ± 0,2 | ×1,9 на 20 м, ×1,74 на 50 м | нет |
| в седловине ветер поворачивает к оси | не более 5° | 4,2° | да |
| косой ветер 45° | подъём 0,55–0,8 от прямого | 0,72 | да |
Границы модели
- Нет влаги и облаков в поле. Основание облаков берётся из погодной модели, как и раньше. Влага — на потом.
- Установившееся среднее, а не расчёт по времени. Поле — средняя циркуляция за час; пузыри и вихри — дело масштабов 2 и 3.
- Разгон у бровки занижен на 15–20 % на высотах 20–100 м над склоном. Над стартом Каянча при встречном ветре (нейтрально, 6 м/с) скорость при клетке 50 м и 1-м порядке составляет 0,80 / 0,83 / 0,84 / 0,92 от решения с клеткой 25 м и 2-м порядком на 20 / 30 / 50 / 100 м. Причина — численная диффузия переноса 1-го порядка и ограниченное разрешение рельефа. Путь исправления, если пилоты скажут «на бровке слабо»: 2-й порядок в окнах (время ×2–3) или окно 25 м.
- Седловина ×2,05 вместо ×1,5. При числе Фруда около 2 поток переваливает через весь хребет, и седловина работает как понижение гребня. Устойчивость дня идёт из погоды, отдельной «ручки седловины» нет.
- Полоса подъёма над крутым хребтом выше «двух высот». На 2 H разгон ещё около 19 %; потенциальное обтекание того же рельефа даёт 24 %.
- Над вершиной и на наветренном склоне болтанка завышена. На Askervein измеренная турбулентность там почти как на равнине (в разогнанном потоке она не успевает вырасти); модель даёт в 1,5–4 раза больше (после последней калибровки — в 2–3). За гребнем совпадает в пределах погрешности.
- Поверхность — луг везде. Шероховатость 0,1 м для всего поля; классов поверхности (лес, камни, вода) в нагреве нет, над лесом механическая болтанка занижена.
- Порывы и рывки — заданная форма, не расчёт вихрей. Шум несётся одним ветром, а не местным: в тихом следе за гребнем вихри «пролетают» быстрее, чем в жизни (около 10 против 3–5 м/с). У рывков из физики выведены амплитуда и среднее (ноль), но не хвост распределения.
- Термики. Сила ядра — одна доля w* (1,24), без разброса между соседними; в жизни разброс шире. «Сильные термики через 1–1,5 толщины слоя» модель по построению не воспроизводит: густота всех ядер с литературой совпадает, шаг сильных — нет. «Улиц» вдоль ветра нет. Список источников обновляется раз в час поля. Мелкие утренние термики со столбом короче 300 м не рождаются.
- Вечер, ночь, штиль. Ночной струйный максимум не воспроизводится; устойчивые случаи данными притока не проверены (калибровка нейтральная). В штиль счёт сходится дольше и местами не сходится.
Известные расхождения
Модель готова, но у двух вещей поля за гребнем есть известные ошибки. Автор проверил их по литературе и решил не чинить сейчас: на таком объёме данных точнее не откалибровать. Записаны для отдельной задачи.
(а) В сильный ветер за гребнем модель шатает крыло сильнее, чем в жизни. Заметно с подветренной стороны, на 50–100 м над землёй. Слой сдвига над следом даёт болтанку силой 0,4–0,6 от скачка скорости, а в измерениях и расчётах литературы — 0,13–0,15 (слой смешения — 0,14; над подветренным гребнем в Perdigão — около 0,16 от ветра). Разница в 3–4 раза. Отдельные пики вертикальной скорости доходят до 0,54–0,74 от ветра на уровне гребня — при 9 м/с это −6…−9 м/с; это 3–4 σ завышенной болтанки, и распределение вертикальной скорости в следе в измерениях скошено вверх. Источники: Liu и др. 2016, 2020; Bell & Mehta 1990; Menke и др. 2019. Модель ошибается в сторону «сильнее бросает».
(б) Обратный ветер у земли за низкими буграми и пологими склонами завышен. Там, где решатель не разрешает пузырь отрыва (низкие бугры с превышением около 70 м и менее, а на области 400 м — за любыми гребнями вне окон), его заменяет оценка по гряде Perdigão: длина 2,8 высоты и обратная скорость 0,22 от ветра у гребня, без проверки уклона. В жизни отрыв начинается с уклона около 0,27 (двумерный склон) или 0,36 (трёхмерный бугор); при уклоне 0,63 длина пузыря около 1,6 высоты для бугра и 3,5 для гряды. Для трёхмерных бугров длина завышена примерно в 1,8 раза. Обратная скорость 0,22 — максимум внутри пузыря, а не среднее; в аэротрубе она −0,1…−0,2 от ветра, так что как среднее завышена в 1,5–2 раза. Заметно у земли в сильный ветер; ошибка — «слишком много возвратного ветра».
Подробнее
- Модель воздуха в игре — главный документ: что работает, законы, числа, границы.
- План модели воздуха и журнал работ — решения, этапы, закрытие модуля.
- Калибровка, чувствительность, решатель на GPU и окна.
- Калибровка по двум наборам: Askervein и Perdigão.
- Каталог экспериментальных данных; данные Askervein и Perdigão.
- Исследования: 3D-эталон на рельефе Онгудая, термики из поля, болтанка из поля, прототип 2D.
- Ветер у склона, термики, погода; исследования и планы.