Трава, вода и ориентиры

В игре нет HUD и подсказок — пилот узнаёт о ветре и воздухе только по картинке вокруг, как в настоящем полёте. Каждый признак ниже связан с реальной моделью атмосферы: трава колышется от настоящего ветра в этой точке, дым сносит настоящий локальный поток, рябь на воде — от того же ветра, что чувствует крыло. Ничего не рисуется «для красоты» отдельно от модели — иначе картинка учила бы неправильно.

Трава колышется по ветру

Травинки вокруг камеры (GrassField) реагируют на средний ветер у земли и на порывистость: по траве и ниве бегут пятна порывов (трава светлеет — видна изнанка листьев) и рябь вдоль направления ветра. Над термиком у земли — изломанная закрученная волна, сходящаяся к оси потока, и усиленное колыхание: трава как будто «вдыхается» в термик. Смещение рисунка порывов копится на CPU кадр за кадром, а не выводится из общего времени игры — поэтому при резкой смене направления ветра рисунок не дёргается назад. Деревья при этом качаются (амплитуда макушки растёт с ветром). Видно с 50–300 м от камеры, дальше плавно гаснет.

Травинки приминаются у ног пилота на старте и на посадке, на официальных посадочных площадках трава скошена прямоугольником по их реальной оси. Подробности расстановки, прореживания вдали и приминания — в docs/guide/vegetation.md.

Рябь на воде

Вода реагирует на тот же ветер, что и трава:

  • штиль — зеркальная гладь;
  • к полной скорости ветра — матовая рябь: шероховатость и направление нормалей идут поперёк ветра;
  • в пятнах порывов — рябь темнее («кошачьи лапы» — меньше отражённого неба), против солнца искрится;
  • у наветренного берега — гладкая полоса: суша с наветренной стороны гасит ветер, и вода там остаётся спокойной (расчёт по нескольким выборкам маски берега против направления ветра).

Вдоль всякого берега, независимо от ветра, — тонкая полоса мокрого грунта. Всё это — часть общей модели рельефа и воды, описанной на странице Рельеф и места.

Дым костра

У лагеря на старте горит костёр (кольцо камней, поленья, пламя-частицы, мерцающий свет). Дым — 26 клубов в мировых координатах, их скорость тянется к сумме «ветер + всплытие»; ветер берётся из модели атмосферы у самого костра на двух высотах (клуб использует ту, что ближе его собственной), с учётом вертикального потока склона или термика. Всплытие затухает со временем и делится на скорость ветра: в штиль дым идёт тонкой струйкой почти вертикально, на 3 м/с — заметно наклонён, на 7 м/с — прижат к земле и тянется по ветру. Обновляется несколько раз в секунду — порывы колышут весь шлейф целиком, а не только последний клуб.

Ветроуказатели и ленточки

На каждом старте — конус на мачте и вешки с красно-белой лентой по краям полосы разбега; на посадках — конус на более высокой мачте. Воздух для них берётся прямо у вертлюга/полотнища (со всеми порывами, ротором и термиками), поэтому в роторе соседние конусы на одном старте могут показывать разное направление, а в термике конус слегка задирается вверх. Наполнение конуса и провисание ленты растут со скоростью ветра по формулам, сверенным с фотографиями настоящих конусов; болтание хвоста усиливается порывистостью. Устройство этого прибора, его формулы и настройка — на странице Приборы.

Ленточка на тросе трапеции

Отдельная маленькая деталь в кабине — ленточка («ниточка»), привязанная к переднему тросу трапеции: на старте показывает направление и силу ветра, в полёте — поток воздуха у самого крыла (скольжение, рыскание). Она видна на периферии зрения, как у настоящих пилотов, без каких-либо подсказок сверху. Подробнее о её узле крепления и параметрах — на странице Приборы и в docs/guide/telltale.md.

Дымка и видимость

Дальность видимости и цвет дальних хребтов — тоже признак состояния воздуха: под ясным небом дальние гряды синеют с расстоянием (голубая дымка чистого воздуха), под слоем перемешивания видимость ограничена и резко улучшается выше его верхней границы. Подробно про дымку, инверсию и её связь с высотой облаков — на странице Рельеф и места (раздел мира и неба) и в docs/guide/atmosphere.md.

Что из списка сделано, а что нет

Полный список визуальных признаков воздуха для пилота с их важностью собран в исследовании docs/research/visual_cues.md (список VR-1…VR-30). По коду и документации на сегодня сделано заметно больше, чем «обязательный минимум»:

Сделано (MVP и часть «следующего этапа»):

  • кучевые облака со стадией жизни, тени облаков по форме, дымка и инверсия, цвет земли = карта источников термиков, солнце и тени рельефа/деревьев/крыла, детальная трава и объекты у земли, ветроуказатели и ленточка на старте, птицы в термиках, навигация по реальному рельефу и OSM, провода ЛЭП с коллизией, крыло и трапеция в кабинном виде, посадочная площадка с ветроуказателем;
  • из «следующего этапа»: рябь и гладкая полоса на воде от ветра, качание травы и деревьев волнами порывов, дым от костра со сносом ветром, ветроуказатели, честно показывающие ротор (разный ветер у соседних конусов), объёмный лес с кромкой как триггером и препятствием, пыльные вихри у сильных термиков над сухой землёй (dust_devils.gd);
  • из «позже»: часть опасной погоды уже есть — грозовые ячейки с наковальней и ливнем (storm_field.gd), волновые лентикулярные облака и роторные клочья (wave_field.gd), перистая пелена верхнего яруса, гасящая термики (cirrus_layer.gd).

Пока не сделано (нет упоминаний в коде/доках репозитория): поведение птиц, набирающих в более слабом потоке, чем способен удержать дельтаплан; ласточки/стрижи над источниками термиков и поднимающийся мусор/пух; дымка-купол над сухими термиками в безоблачный день; техника в полях (трактор с пылью) как триггер отрыва термика; разная растительность на самой посадочной площадке (высокая трава, посевы) — сейчас посадка везде скошена одинаково.

Границы модели

  • Признаки читают модель, а не имитируют её приближённо: если термика или ветра в этой точке нет, ни трава, ни вода, ни дым не покажут ложного движения — но и наоборот, слабые эффекты (например, очень слабый термик под порогом видимости облака) не получают никакого визуального признака вообще — «голубой день» без термика и «голубой день» со слабым нерабочим термиком неотличимы по картинке.
  • Дальность признаков ограничена бюджетом: трава видна с 50–300 м, дым — до сотен метров, дальше признаки гаснут не потому, что явление прекратилось, а по правилам отрисовки (wind_fade_m и аналогичные параметры).
  • Не все признаки из исследования одинаково точны: например, дым — это частицы с усреднённым ветром по двум высотным пробам, а не честная симуляция дыма; рябь на воде — процедурный шейдер по скорости и направлению ветра, а не расчёт волн.

Что рассматривали и почему так

  • Только признаки, завязанные на физику. Исследование visual_cues.md изначально собирало десятки идей из литературы для пилотов (Pagen, FAA Glider Flying Handbook, статьи SkyNomad и другие источники по метеорологии для планеристов) и намеренно делит их на «обязательно», «желательно», «позже» — реализация шла в этом порядке, а не по красоте эффекта. Общее правило (VR-0) — не рисовать ничего декоративного, что противоречило бы модели: декоративный признак без физики был бы хуже его отсутствия, потому что учил бы пилота неверно. Источники подобраны и проверены отдельно; часть из них требует сверки при появлении печатных книг (Bradbury, Martens, Pagen «Performance Flying») — это отмечено в самом исследовании как открытый вопрос, а не факт.
  • Приоритет — то, без чего нельзя честно летать без HUD: ветроуказатели, трава и объекты у земли для оценки высоты, тень крыла на посадке — сделаны в первую очередь, потому что без них оценка высоты и скорости на выравнивании превращается в лотерею.

Подробнее

Ветер по воде: штиль и порывы

Дым костра при ветре 0, 3 и 7 м/с — сносит реальный ветер модели

Рябь на воде и тени облаков вместе