Визуальные признаки для пилота: что должно быть видно в симуляторе

Исследование к FR-14a, FR-19, FR-20, FR-21, FR-22, FR-26.

Зачем

В игре нет HUD и подсказок (FR-21, FR-22). Пилот узнаёт об атмосфере, высоте и опасностях только от приборов на трапеции и от картинки вокруг. Поэтому мир — это главный «прибор». Каждый признак ниже — это требование: если признака нет или он нарисован неправдоподобно, опытный пилот теряет информацию, которую в реальном полёте получил бы глазами.

Главное правило: признаки должны быть связаны с моделью атмосферы, а не рисоваться для красоты. Облако стоит над реальным термиком, дым сносится реальным ветром, птица кружит в реальном подъёме. Случайная декорация, не связанная с физикой, хуже её отсутствия: она учит пилота неверному.

Бюджет — NFR-1: 60 FPS на встроенной видеокарте. Поэтому в столбце «Как реализовать» — самые дешёвые приёмы: импостеры, MultiMesh, частицы на GPU, шейдерные эффекты, LOD.

Важность:

  • обязательно — без этого нельзя честно летать без HUD (MVP);
  • желательно — сильно улучшает чтение воздуха (следующий этап);
  • позже — полировка, редкие ситуации.

Источники — сокращения, список в конце.


1. Термики

ПризнакЧто говорит пилотуВажностьКак реализовать в GodotИсточник
Кучевое облако над термикомЗдесь (или чуть с наветренной стороны) есть подъём; высота основания = потолок набораобязательноОблако порождается моделью термика (FR-14). Объёмные облака: raymarch в шейдере по 3D-шуму с низким разрешением + temporal reprojection, либо импостеры-спрайты для дальних (> 5 км)Pagen UtS, SkyNomad TC, FAA GFH-10
Стадия облака: растущее (плотное, белое, «кочан», чёткие края, растущие башенки) / зрелое / распадающееся (рваное, прозрачное, тает)Растущее — термик работает; распадающееся — подъёма уже нет, лететь к нему позднообязательноПараметры плотности, резкости края (порог шума) и размера из фазы жизненного цикла термика. Рост заметен за 1–3 мин наблюденияFR-14a, SkyNomad TC, Pagen UtS
Плоское тёмное основание, самая тёмная/вогнутая частьГде ядро подсоса. Вогнутое (выпуклое вверх) основание — сильный подъёмобязательноВысота основания одна для всех облаков дня (уровень конденсации). Затемнение основания пропорционально толщине облака и скорости в ядре; лёгкая вогнутость над ядромFR-14a, Pagen UtS, SkyNomad TC
Вид из-под основания («последние 100–200 м»)Близость потолка, край облака, риск засасыванияобязательноОблако не должно разваливаться вблизи: плавный переход LOD, туман/серость на подходе к основанию, внутри облака — белая мглаFR-14a, Wiki «Cloud suck»
Облачные улицыЛиния подъёма вдоль ветра, можно лететь без круговжелательноГенератор термиков выстраивает источники в полосы вдоль ветра при ветре > ~5 м/с и хорошей конвекцииSkyNomad TC, Reichmann
Тени облаков на землеГде земля не греется (под тенью термики слабеют); движение тени — ветер на высоте облаковобязательноТень из той же карты плотности облаков: проекция 2D-маски облаков на террейн в шейдере (cloud shadow map), сдвиг с ветромFR-14a, SkyNomad TC, XCmag
Переразвитие (облако выше, чем шире; башни, наковальня)День становится опасным, скоро ливни/гроза — садитьсяжелательноПресет «сильный день»: во второй половине дня часть облаков растёт по вертикали до 6–10 км; тёмные основания, крупнееSkyNomad TC, Pagen UtS
Дымка-купол («haze dome») над сильным термиком в безоблачный деньСухой термик под нимпозжеЛёгкое локальное помутнение (billboard с низкой альфой) на верхней границе слоя над активным термикомFlybubble, SkyNomad TC
Верхняя граница дымки (инверсия)Потолок сухих термиков в «голубой» деньобязательноВысотный туман Godot (volumetric fog / height fog) с плотностью, резко падающей на высоте zi. Выше — чистый воздух и далёкая видимостьFlybubble, SkyNomad TC, Nature1st
Птицы, кружащие в потоке (орлы, коршуны, грифы, аисты)Точное место и ядро термика; набирают — значит работаетобязательно2–10 птиц в термике: MultiMesh + простой машущий/планирующий анимационный шейдер; кружат вокруг оси термика, набирают со скоростью подъёма. Видны с ~300–800 мFAA GFH-10, Frenkel ASA гл. 7, SkyNomad CWT
Ласточки/стрижи, кормящиеся высокоМелкие насекомые поднялись — рядом термик (слабый признак)позжеСтайка быстрых точек на высоте 100–300 м над источникомMaine IFW, JEB 2018
Птица, ушедшая вверх быстрее пилотаПтица держится в более слабом потоке — не каждый «птичий» термик удержит дельтапланжелательноПоляра птиц лучше крыла: минимальное снижение птицы ~0,5 м/сFrenkel ASA гл. 7
Другие пилоты в потоке (боты)Термик найден; по скорости их набора — силапозже (режим соревнований)Боты с той же физикой; их крен и набор видныSkyNomad CWT, adventuro
Пыльный вихрь (сухие районы)Мощный термик от земли; и опасность у землижелательноСтолб частиц GPUParticles3D, вращение, наклон по ветру; только на сухих поверхностях в сильный деньFAA GFH-10, SkyNomad CWT
Поднимающийся мусор/пух/листья/сеноТермик у землипозжеРедкие частицы у основания термикаadventuro, paradrive
Дым из труб/костров: поднимается вертикально, затем растекается на уровнеПодъём / стабильный слой (растекание = инверсия)желательноЧастицы с физикой: скорость = ветер + вертикальный поток из модели; расплывание при входе в инверсиюPagen UtS, Frenkel ASA
Контраст полей (сухие жёлтые/коричневые, пашня, асфальт vs зелёные влажные, вода, тень)Где источники термиковобязательноТекстура/маска земли — тот же слой, что задаёт источники термиков в модели (FR-11). Разные альбедо = разные цветаXCmag, SkyNomad CWT
Солнечные / теневые склоныСолнечный склон работает, теневой — нет; экспозиция меняется по времени дняобязательноРеалистичный DirectionalLight + тени; модель источников учитывает угол солнца к склонуXCmag, FR-11
Триггеры: гребни, отроги, вершины, кромка леса, края полей, скалы, деревниГде термик отрываетсяобязательноРельеф DEM + лес/поля на карте покрытия; кромки видны по цвету и высоте растительностиSkyNomad CWT, XCmag
Работающая техника в поле (трактор, пыль)Триггер отрывапозжеДекоративный объект + пыльXCmag

2. Ветер

ПризнакЧто говорит пилотуВажностьКак реализовать в GodotИсточник
Ветроуказатель (конус) на старте и на посадкеНаправление и сила у земли; порывистостьобязательноМеш конуса с костями/шейдером: угол провисания от скорости, болтание от порывов. Цвета — оранжево-белые полосыWiki Windsock, FAA
Ленточки/флажки на стартеВетер на старте прямо сейчас, циклы термиковобязательноШейдер вершинного смещения по ветру + шумUSHPA/BHPA практика
ДымНаправление и сила ветра на разных высотах (угол наклона шлейфа)желательноТе же частицы, что в разделе 1Pagen UtS
Рябь и тёмные пятна на воде («кошачьи лапы»), полосы пеныВетер: темнее — сильнее; полосы вдоль ветра; с подветренного берега — гладкая полосажелательноШейдер воды: амплитуда нормалей и шероховатость от скорости ветра; порывы — движущиеся пятна; «тень» гладкой воды у наветренного берегаNatural Navigator, Wiki Cat’s paw
Бегущие волны по траве и посевамНаправление и порывы у земли; термик «вдыхает» — волны сходятся к источникужелательноШейдер травы/посевов с бегущей волной по вектору ветра; порывы — пятна шума, едущие с ветромadventuro
Качание и наклон деревьевСила ветра у земли и в посадкежелательноВершинный шейдер качания крон, амплитуда от ветраWiki Ridge lift
Движение теней облаковВетер на высоте облаков (может отличаться от приземного)обязательноСледствие модели: облака сносит ветер на их высотеSkyNomad TC
Снос облаков, наклон термикаТермик наклонён по ветру: искать с наветренной стороны облакаобязательноОблако смещено по ветру относительно источника (модель уже даёт)SkyNomad TC, thermals.md
Снос пилота относительно землиГлавный признак ветра в полёте: «плывёт» земля боком, путевая ≠ воздушнойобязательноСледствие физики; нужна детальная земля (раздел 3), чтобы снос был заметенFR-7
Пыль с дорог и полейВетер у земли, порывыпозжеЧастицы за машинами/над сухими полямиWiki Lee wave

3. Высота и скорость над землёй

ПризнакЧто говорит пилотуВажностьКак реализовать в GodotИсточник
Детальная текстура земли с мелким шумом (detail texture)Скорость над землёй и высота по «течению» текстуры; без неё низко всё плоско и нечитаемообязательноТеррейн-шейдер: макротекстура (спутник/раскраска) + 2–3 слоя detail-текстур с трипланарной проекцией, растущие по мере приближенияFR-19, paragliding-lessons
Масштабные объекты: отдельные деревья, кусты, дома, дороги, столбы, машины, скотРазмер знаком глазу → высота и скорость. Критично ниже 300 мобязательноMultiMesh деревьев (импостеры вдали), дома-коробки на местах OSM, дороги в текстуре. Реальные размеры!paragliding-lessons, Red’s Advice
Трава/кусты у земли (последние 20 м)Точная высота при выравниванииобязательноТравинки MultiMesh вокруг камеры в радиусе ~50 мparagliding-lessons
Тень своего крыла на землеВысота у земли (тень сближается с крылом), курс относительно солнцаобязательноСобственная тень крыла в shadow map; каскад CSM так, чтобы тень была видна до 50–100 м AGLBHPA практика
Параллакс ближнего/дальнегоВысота над склоном, скорость у рельефаобязательноСледствие честного 3D + ближних объектов; не отключать ближние детали—
Горизонт и угол «вниз на точку»Глиссада: точка, которая не движется в кадре, — точка касанияобязательноЧестная перспектива, FOV 70–90°, без искаженийRed’s Advice, BGA circuit
Периферийное зрение при посадкеПилот смотрит вперёд на горизонт, высоту чувствует краем глазаобязательноШирокий FOV в кабинном виде (настраиваемый), ничего не загораживает нижние углы кадра кроме трапецииparagliding-lessons
Посадка: выравнивание с 3–5 м, флер у 1 мНужна точная оценка последних метровобязательноСочетание трава + тень + детальная текстура; отсутствие любого из них делает посадку лотереейparagliding-lessons, fly4fun

4. Ориентация и навигация

ПризнакЧто говорит пилотуВажностьКак реализовать в GodotИсточник
Естественный горизонт, дымка у горизонтаТангаж и крен; дальность видимостиобязательноНебо (PhysicalSkyMaterial/ProceduralSky) + aerial perspective: туман по дальности с оттенком неба, ≥ 20 км (FR-20)FR-20
Силуэты хребтов и приметные вершиныГде я, куда лететь, где стартобязательноРеальный DEM ≥ 20 км + дальний LOD рельефа; силуэты синеют с расстояниемFR-17, FR-18
Реки, озёра, дороги, населённые пунктыНавигация по карте, поиск посадокобязательноИз OSM/спутника в текстуре; реки и озёра — блеск воды (отражение неба)FR-17
ЛЭП и проводаСмертельная опасность на посадке; провода видны только по опорам и просекеобязательноОпоры — меши из OSM power=tower/pole; провода — тонкие линии (провисание по цепной линии), видимые только вблизи (≤ 100–200 м), как в жизни. Просека в лесу виднаPilots of America, Grand Forks Herald
Солнце и тени как компасКурс без компаса; время дняобязательноПоложение солнца по координатам, дате и времени (FR-17)—
Посадочные площадки, поляКуда можно сестьобязательноРовные поля без препятствий в текстуре + ветроуказатель на официальной посадкеFR-18

5. Склон и динамика

ПризнакЧто говорит пилотуВажностьКак реализовать в GodotИсточник
Линия гребня, её форма относительно ветраГде динамический подъём (наветренная сторона, перпендикулярно ветру)обязательноРельеф + читаемое освещение (чтобы гребень не сливался): мягкие тени, AOFR-12, Wiki Ridge lift
Подветренная сторона, отроги, седловиныГде будет ротор и опусканиеобязательноСледствие модели (FR-13); визуально — признаки ветра (деревья, трава на гребне треплет, флаги на старте «мечутся»)chessintheair, Wiki Ridge lift
Деревья и кромка леса на склонеВысота над склоном; турбулентность за кромкойобязательноЛес с реальной высотой крон (15–30 м), а не только текстураWiki Ridge lift
Скальные выходы на солнечном склонеТриггер термика у склонажелательноРаскраска по уклону (FR-19)XCmag

6. Посадка

ПризнакЧто говорит пилотуВажностьКак реализовать в GodotИсточник
Посадочная площадка: ровное поле, контраст с окружениемЦель захода «коробочкой» (подветренная — траверз — финал)обязательноОтдельная площадка на карте «Алтай» с ровной травойRed’s Advice, paragliding-lessons
Ветроуказатель на посадкеНаправление финалаобязательноСм. раздел 2Wiki Windsock
Препятствия: провода, деревья, заборы, столбы, постройкиКуда нельзя; где ротор за лесополосойобязательноРеальные объекты с коллизией; заборы/столбы — MultiMesh вдоль полейPilots of America
Уклон поляСадиться вверх по склону или против ветражелательноРельеф DEM + ближняя детальная трава, чтобы уклон читался—
Растительность (высокая трава, кусты, посевы)Место касания и пробегапозжеРазные типы травы—

7. Собственное крыло и тело в кадре

ПризнакЧто говорит пилотуВажностьКак реализовать в GodotИсточник
Передняя кромка, парус, латы, задняя кромка над головойОриентация крыла, крен (относительно горизонта)обязательноМодель крыла в кабинном виде (FR-26), текстура паруса с латамиFR-26
Трапеция с руками пилотаПоложение ручки = тангаж/скорость; сюда смотрят на приборыобязательноТрапеция движется от ввода пилота; прибор на трапеции (FR-21)FR-21
Тросы, килевая балка, кингпост (у мачтового)Масштаб, вибрацияжелательноТонкие меши; лёгкая дрожь на скорости—
Трепет задней кромки паруса на большой скоростиСкорость высокая, близко к VneжелательноВершинный шейдер: высокочастотная дрожь задней кромки при V > ~70 % VneWills Wing, hanggliding.org
«Мягкий», провисающий, шуршащий парус на малой скоростиБлизко к сваливаниюобязательноАмплитуда медленного колыхания паруса растёт при снижении скорости к сваливанию; синхронно со звуком FR-28FR-28, South Downs HG
Ноги пилота, коконПоложение тела; на посадке — выход из коконажелательноПростая модель; в посадке ноги опускаются—
Крен/рыскание крыла в термике (FR-8)Край термика: крыло выталкиваетобязательноЭто уже физика; камера должна быть жёстко связана с крылом, без сглаживания, «съедающего» толчкиFR-8

8. Атмосфера и освещение

ПризнакЧто говорит пилотуВажностьКак реализовать в GodotИсточник
Дымка, видимостьСтабильность воздуха (сильная дымка — стабильный слой, слабые термики)обязательноHeight fog + distance fog, параметры из пресета погодыPagen UtS
Граница инверсии (верх дымки)Потолок в безоблачный день; выше — резкое улучшение видимостиобязательноВысотный туман с резким верхом на zi; при наборе выше видно далеко и чёткоFlybubble, SkyNomad TC
Сухие термики (голубой день)Облаков нет — только земля, птицы, дымкаобязательноПресет погоды без облаков; остальные признаки должны работатьFlybubble
Освещение по времени дня, высота солнцаКакие склоны работают сейчас; вечерний «штиль»обязательноDirectionalLight по астрономии; цвет неба; тени длинные утром/вечеромXCmag
Перистые облака / пелена сверхуТермики гаснут (затенение), ухудшение погодыпозжеВысокий 2D-слой облаков в небеFlybubble

9. Опасности

ПризнакЧто говорит пилотуВажностьКак реализовать в GodotИсточник
Переразвитие, кучево-дождевое, наковальняГроза, засасывание, шквал — садитьсяжелательноЭволюция облака до Cb в пресете «сильный/грозовой день»SkyNomad TC, Pagen UtS
Вирга, дождевые полосы, тёмная стенаШквал/гаст-фронт через минутыпозжеПолупрозрачные вертикальные полосы-билборды под облакомLookout Mtn, Wiki Virga
Фронт порывов (пыль стеной, резкая смена ряби на воде)Опасный ветер у землипозжеДвижущаяся линия: пыль + волны на траве/водеLookout Mtn
Лентикулярные облака (стоят на месте при сильном ветре)Волна; внизу возможен роторпозжеСтатичные линзы над хребтами в пресете «волна»chessintheair, Wiki Lenticular
Роторные облака (рваные, вращающиеся, стоят за хребтом)Сильная турбулентностьпозжеРваные облака на уровне гребня с подветренной стороныchessintheair, mountainflying
Шапка на вершине, фёновое окноСильный ветер наверху, волнапозжеОблако-шапка над вершиной, неподвижноеchessintheair
Рваные «мечущиеся» ветроуказатели, противоположные ветроуказателиРотор/порывистость у землижелательноВетроуказатель читает локальный ветер модели (с ротором)mountainflying

Черновик раздела требований: «Визуальные требования»

Общий принцип:

  • VR-0. Каждый визуальный признак атмосферы порождается моделью атмосферы и совпадает с ней: облака над термиками, дым и флаги по локальному ветру, птицы в подъёме. Никаких декоративных признаков, противоречащих физике (дополняет FR-22).

MVP

  • VR-1. Облака — по FR-14a. Все кучевые облака дня имеют общее плоское основание; стадия облака (рост / зрелость / распад) видна по плотности и резкости краёв; облако сносится ветром и смещено по ветру относительно источника.
  • VR-2. Тени облаков на земле: движутся с облаками, в тени термики слабее.
  • VR-3. Дымка и инверсия: высотный туман с резкой верхней границей на высоте слоя перемешивания. В безоблачный день верх дымки — видимый потолок термиков. Дальность видимости ≥ 20 км, дальние хребты синеют (FR-20).
  • VR-4. Земля — источник термиков видна: цвет поверхности (сухое поле, пашня, лес, луг, вода, скалы) берётся из той же карты, что задаёт источники термиков. Солнечные и теневые склоны различимы по освещению.
  • VR-5. Солнце и тени: положение солнца по координатам, дате и времени; тени рельефа, деревьев и собственного крыла.
  • VR-6. Высота у земли: детальная текстура земли, трава вокруг камеры, отдельные деревья и постройки реального размера, тень крыла видна ниже ~100 м AGL. Пилот должен выровнять и посадить крыло без прибора высоты.
  • VR-7. Ветроуказатели: конус на старте и на посадке, ленточки на старте; провисание и болтание от локального ветра модели, включая порывы и ротор.
  • VR-8. Птицы в термиках: хищные птицы кружат в части термиков и набирают с их скоростью; видны с 300–800 м.
  • VR-9. Навигация: реальный рельеф с приметными вершинами, реки, озёра, дороги, населённые пункты (OSM/спутник).
  • VR-10. ЛЭП: опоры и провода из OSM; провода тонкие и видны только вблизи, как в жизни; с проводами есть столкновение.
  • VR-11. Крыло в кадре: в кабинном виде видны парус, латы, передняя и задняя кромки, трапеция с прибором и руки. На малой скорости парус «мягкий» и колышется (синхронно со звуком FR-28), камера жёстко связана с крылом.
  • VR-12. Посадочная площадка: ровное поле с ветроуказателем, препятствия вокруг (деревья, провода, заборы) — с коллизией.
  • VR-13. Производительность: всё выше — в пределах NFR-1 (импостеры, MultiMesh, LOD, упрощённые облака на дальности).

Следующий этап

  • VR-14. Облачные улицы при ветре; переразвитие облаков в сильный день.
  • VR-15. Дым от труб и костров: поднимается в термике, сносится ветром, растекается под инверсией.
  • VR-16. Вода: рябь и тёмные пятна от ветра и порывов, гладкая полоса у наветренного берега.
  • VR-17. Трава, посевы, деревья качаются от ветра; порывы бегут волнами.
  • VR-18. Пыльные вихри над сухими полями в сильный день.
  • VR-19. Трепет задней кромки паруса на большой скорости.
  • VR-20. Ветроуказатели в роторе мечутся, соседние могут показывать разное.
  • VR-21. Лес с объёмом: реальная высота крон, кромка леса читается как триггер и как препятствие.
  • VR-22. Поведение птиц: птицы держатся в более слабом подъёме, чем дельтаплан.

Позже

  • VR-23. Другие пилоты (боты) в термиках — для режима соревнований.
  • VR-24. Ласточки и стрижи над источниками, поднимающийся мусор и пух.
  • VR-25. Дымка-купол над сухими термиками.
  • VR-26. Опасные облака: кучево-дождевые с наковальней, вирга, фронт порывов.
  • VR-27. Волна: лентикулярные облака, облака-шапки, роторные облака (пресет «волна»).
  • VR-28. Перистая пелена, гасящая термики.
  • VR-29. Техника в полях (трактор с пылью) как триггер.
  • VR-30. Разная растительность на посадке (высокая трава, посевы).

Источники