![](https://habrastorage.org/getpro/habr/upload_files/665/c7a/1b4/665c7a1b4b997c7c179068fc34a3cb15.png)
Когда речь заходит о симуляторах, любой человек в первую очередь думает об играх в этом жанре. Они делятся на аркадные: NFS, War Thunder, Snowrunner, где игроку просто весело, и хардкорные, которые стремятся воспроизвести механику управления для полного погружения.
![](https://habrastorage.org/getpro/habr/upload_files/483/53c/f89/48353cf894c0cdf8c99709f54f9c87c7.png)
Но главное отличие игр от профессиональных симуляторов заключается в том, что игры созданы для удовольствия и приятного времяпровождения, а профессиональные симуляторы созданы, чтобы причинять боль. Обучение — тяжелый процесс оттачивания навыков, где ценой ошибки может стать чья-то жизнь, и тут уже не до игр.
![](https://habrastorage.org/getpro/habr/upload_files/2cc/d07/c1b/2ccd07c1bc7555810a0c9a2d8718aa48.png)
Профессиональные симуляторы делятся на три категории:
-
процедурные;
-
комплексные;
-
тактические.
Процедурные симуляторы
![](https://habrastorage.org/getpro/habr/upload_files/91f/828/1e7/91f8281e79dc718af637e14ff256a6f5.png)
Название говорит само за себя: в рамках тренажера отрабатывается определенная процедура. В режиме обучения испытуемый знакомится с органами управления, их расположением и функционалом, осваивает последовательность действий, отрабатывает навыки. В режиме экзамена симулятор позволяет сэкономить средства на вывозе персонала на объект (например, нефтяную вышку), а также исключает повреждение оборудования и человеческие потери в случае ошибки.
![](https://habrastorage.org/getpro/habr/upload_files/37b/c32/646/37bc326468512ddfba992a7bd31e1a20.png)
Процедурой может быть также взлет или посадка самолета. Отработка требуется в точках принятия решений: например, когда убирать закрылки или выпустить шасси.
Комплексные симуляторы
![](https://habrastorage.org/getpro/habr/upload_files/cde/e85/4fd/cdee854fde05941d6f65f55ad77c5f8e.png)
Комплексные симуляторы представляют собой симбиоз виртуального и физического миров: они полностью повторяют органы управления всей системы, имитируя кабину или рубку управления, обладают подвижностью и дают максимально допустимую перегрузку в 2–3g для полной достоверности происходящего. Обучающийся получает навыки не только управления, но и всех азов, начиная с захода в кабину.
Тактические симуляторы
![](https://habrastorage.org/getpro/habr/upload_files/3b4/7f6/220/3b47f6220ca2cfd39857791622a8d5c4.png)
Этот тип симуляторов направлен на координацию взаимодействия людей. Яркий пример — авиадиспетчерская, где диспетчеры привода, диспетчеры посадки, диспетчеры рулежных дорожек, диспетчеры наземной техники должны взаимодействовать друг с другом, слаженно работать, и не совершать ошибок при координации.
![](https://habrastorage.org/getpro/habr/upload_files/cb1/764/321/cb1764321c0f4a7d1de9b0ea0db37041.png)
Например, крупнейшая катастрофа в истории авиации произошла из‑за несогласованности действий диспетчеров, что стало причиной гибели более чем 500 человек. Именно поэтому обучение персонала в контролируемых условиях так важно — на кону всегда стоят сотни жизней.
По сути, тактические симуляторы очень похожи на мультиплеерные игры. Но это не просто клиент‑серверное приложение, в связке могут находиться несколько серверов, отвечающих за разные сферы: на одном происходит только симуляция физики, на другом — погоды, на третьей — чего‑то еще, и все они взаимодействуют между собой.
Как же устроены авиасимуляторы?
Архитектура симулятора
Стандартный симулятор представляет собой локальную сеть, состоящую из нескольких компьютеров, каждый из которых выполняет какую‑то одну функцию:
-
графический движок для имитации закабинной обстановки;
-
физический движок для моделирования движения и физических взаимодействий с окружающей средой;
-
интерфейс инструктора для управления и настройки симулятора;
-
модули для подключения внешних устройств: джойстиков, рулей управления, подвижных платформ и т.д;
-
модули для обработки и хранения данных о полетах и результатов обучения пилотов.
![](https://habrastorage.org/getpro/habr/upload_files/7bc/31c/e57/7bc31ce57eb88543921b0ecd53049aad.png)
Как это выглядит в UNIGINE
![](https://habrastorage.org/getpro/habr/upload_files/f69/fc6/d25/f69fc6d25798c2862145fe051a2b75b0.png)
Компоненты симулятора обращаются к плагину IG, разработкой которого мы занимаемся в UNIGINE. IG — Image Generator — сервер, отвечающий за визуализацию закабинной обстановки. Простым языком, он «рисует» все то, что происходит в симуляторе, получая от других серверов команды и наборы сущностей, их состояний и позиций.
![](https://habrastorage.org/getpro/habr/upload_files/6f0/79e/9d5/6f079e9d5630374dbd4da55e74f36444.png)
В ответ IG, как правило, сообщает серверам, как объект А видит объект Б, что находится позади объекта, и выполняет роль своего рода сенсорного сервера и отвечает на сенсорные запросы, поскольку другие серверы не обладают информацией об окружающей среде, поверхности, высоте в конкретной точке террейна над уровнем моря, коллизиях, температуре в этой точке, и т. д.
![](https://habrastorage.org/getpro/habr/upload_files/80e/322/3b0/80e3223b0c7c74956318ec16815d9523.png)
Пример типичной команды хостов: «Boeing-737 летит по полосе 32 с такими‑то координатами, у него убраны шасси, закрылки выпущены на 15 градусов, возгорание второго двигателя.» Восприняв эту информацию, IG должен создать корректную визуализацию.
![](https://habrastorage.org/getpro/habr/upload_files/459/757/07d/45975707d6662dc8522275dad88b668f.png)
Если убраны шасси и высота над полосой состаляет 0 м, значит, самолет уже едет на брюхе и за ним тянется пыль. О наличии пыли хосты не предупреждают: предполагается, что Image Generator автоматически должен «понимать», что нужно ее отрисовывать в заданных условиях.
![](https://habrastorage.org/getpro/habr/upload_files/010/955/12b/01095512be2c91393a8aa49db9b03814.png)
Еще одной сложной системой в IG является генератор погодных условий. Он принимает сообщение от хоста в таком виде:
![](https://habrastorage.org/getpro/habr/upload_files/bc8/9b3/57a/bc89b357a14a08be15d1c1bba5d0c0ce.png)
Возникает ряд вопросов:
— как температура влияет на картинку?
— как влияет влажность?
— если температура отрицательная, должен ли идти снег?
На все эти вопросы отвечает IG. После рендера погоды по заданным условиям, IG должен вернуть ответ серверу с информацией с «датчиков», например, продольный срез облаков и их плотность для вывода на приборную панель самолета.
![](https://habrastorage.org/getpro/habr/upload_files/c27/025/dcc/c27025dcc030a98a2395c5a510d91e8e.gif)
Эволюция графики авиасимуляторов
Симулятор самолета имеет очень долгую жизнь: Боинг-737 выпускается с 1967 года, и конструктивно с тех пор мало что поменялось. Соответственно, симуляторы Боинга существуют примерно с тех же самых пор, и органы управления, оригинальная процедура захода, математическая модель, может, и менялись со временем в зависимости от модификаций и улучшений, но базовая часть осталась прежней.
А вот графика закабинной обстановки меняется кардинально каждые 5–10 лет.
В 1967 году графика выглядела примерно вот так:
![](https://habrastorage.org/getpro/habr/upload_files/10f/952/146/10f952146f402b3c4a2743a51bb18440.png)
В 1980-е:
![](https://habrastorage.org/getpro/habr/upload_files/cfd/d47/db9/cfdd47db9142055f02c489d1659805a7.png)
В 1990-е:
![](https://habrastorage.org/getpro/habr/upload_files/1b4/e98/923/1b4e98923bb0b7e714830617a8b120a2.png)
В 2000-е:
![](https://habrastorage.org/getpro/habr/upload_files/196/5e3/81b/1965e381b2da9d3f41c3a8269d4f1994.png)
В 2010-е:
![](https://habrastorage.org/getpro/habr/upload_files/308/9e8/fc8/3089e8fc8e5f0fb64707558c0b2f4f57.png)
Большинство симуляторов используют картинку качества 2010-х годов, как достаточную. Да, пару лет назад вышел Microsoft Flight Simulator 2020, но на него не стремятся переходить, поскольку это игра, ее SDK еще в разработке и недоступен для подключения к комплексному тренажеру.
![Изображение из Microsoft Flight Simulator 2020 Изображение из Microsoft Flight Simulator 2020](https://habrastorage.org/getpro/habr/upload_files/01b/03c/a89/01b03ca89b59d182ff372f8f89bab08b.png)
Плагин IG в UNIGINE позволяет выдавать картинку ничуть не хуже. Полюбуемся скринами:
![Изображение сгенерировано в UNIGINE Изображение сгенерировано в UNIGINE](https://habrastorage.org/getpro/habr/upload_files/041/bb1/ed0/041bb1ed0823aeaa0592882ee2525647.png)
![Изображение сгенерировано в UNIGINE Изображение сгенерировано в UNIGINE](https://habrastorage.org/getpro/habr/upload_files/cc8/de5/aaf/cc8de5aaf52f4ea9f616fa278fb13fe3.png)
![Изображение сгенерировано в UNIGINE Изображение сгенерировано в UNIGINE](https://habrastorage.org/getpro/habr/upload_files/152/145/819/1521458192658d0015c67812e8f1615f.png)
![Изображение сгенерировано в UNIGINE Изображение сгенерировано в UNIGINE](https://habrastorage.org/getpro/habr/upload_files/45d/924/d70/45d924d70a76b7d346fd30eab3aa343b.png)
![Изображение сгенерировано в UNIGINE Изображение сгенерировано в UNIGINE](https://habrastorage.org/getpro/habr/upload_files/6ed/80b/c6c/6ed80bc6c013a0da1c2b5b6a4efc45cb.png)
Для тактических и комплексных симуляторов очень важна хорошая графика — она позволяет глубже погрузиться в процесс обучения. Чем реалистичнее графика «за окном», тем больше психологическое воздействие на человека, и обучающемуся легче представить, что он действительно сидит за штурвалом самолета и управляет огромной махиной, а за спиной у него 300 человек, жизнь которых зависит от принятых им решений. Этот эффект носит название «иммерсивность» — он позволяет по‑настоящему ощутить себя в небе. Для достижения иммерсивности используют различные системы. Как правило, это проекторы, которые проецируют изображения на различные плоскости с целью задействовать периферийное зрение.
![](https://habrastorage.org/getpro/habr/upload_files/ef4/b24/186/ef4b241863de9c9f10d8555ef202cd6c.jpg)
В некоторых случаях используется еще и панорамный пол — например, в симуляторах вертолетов. Для этих целей могут быть использованы мониторы, но это не так интересно, т.к. в плоскости возникает слишком большое перспективное искажение. Поэтому в основном используют экраны‑цилиндры или сферы, проецируя изображение на искривленный экран из нескольких точек.
![](https://habrastorage.org/getpro/habr/upload_files/59c/3d2/341/59c3d2341b7cb30d4ffd6afc71f7c8bd.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/eac/d47/89a/eacd4789ad9a90d68fdc4aac41ab2776.png)
![](https://habrastorage.org/getpro/habr/upload_files/7be/19f/7a2/7be19f7a25144739a416916343681026.png)
В середине сферы стоит кабина самолета или вертолета — частично или полностью воспроизведенная, либо взятая, как есть. То же самое касается поездов и судов:
![](https://habrastorage.org/getpro/habr/upload_files/a28/dbb/16a/a28dbb16a3500a6553fea7aa0fb25a0d.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/017/bb4/8f4/017bb48f4c415590eb44b1347009f759.png)
![](https://habrastorage.org/getpro/habr/upload_files/4fd/ab5/efd/4fdab5efd791cb659c8a7b926707f5ad.png)
![](https://habrastorage.org/getpro/habr/upload_files/637/715/a16/637715a162785300c1349f4bf90771bf.jpg)
Движок это все умеет – выводить картинку, корректо ее искажать, правильно настраивать — чтобы это казалось продолжением реальности, не было видно швов и стыков, и было настроено на точку зрения пилота.
![](https://habrastorage.org/getpro/habr/upload_files/58d/dde/8e5/58ddde8e598bbe9d2727b5db015163ec.png)
У проекционных систем есть огромный недостаток — только одна точка зрителя, в которой перспективное искажение равно нулю. При смещении угла зрения картинка начинает искажаться и теряет свою достоверность. Поэтому в симуляторах обычно имеют две отдельные настройки на первого и второго пилотов, либо располагают точку зрителя где‑то между ними. Такой подход используется в небольших симуляторах, однако для профессиональных симуляторов высокого класса это уже не работает: оба пилота учатся взаимодействовать друг с другом, и в этом случае даже небольшое перспективное искажение допускать нельзя. Для таких симуляторов используется экран обратной проекции: изображение проецируется на сферическое зеркало.
![](https://habrastorage.org/getpro/habr/upload_files/b90/8c4/cd6/b908c4cd6778c3554206124cf99efbec.png)
При использовании таких экранов достигается эффект параллакса, и объекты, расположенные вдали, таковыми и воспринимаются. Подобные системы стоят очень дорого и используются только в самых крутых симуляторах.
![](https://habrastorage.org/getpro/habr/upload_files/8ac/9ea/7c4/8ac9ea7c4feb8e1c32d76d582a019cdf.png)
Естественно, от движка требуется, чтобы он мог осуществлять рендер изображения такого формата. Что касается железа, то один компьютер, конечно же, не справится с рендером всей сферы с разрешением в 16К: на сферу могут «светить» до 12 проекторов. В этом случае используется распределенный рендер: 12 проекторов подключаются к 12 машинам, и одновременно каждая осуществляет рендер сцены. Все они имеют копию сцены, но каждая из этих машин рендит только свой «кусочек», и проецирует на сферу, как мозаику.
![](https://habrastorage.org/getpro/habr/upload_files/4a9/77d/172/4a977d1726521a3c0f4a07d19c17c933.png)
IG получает от хоста команды и распространяет их на “рабов”. В движке UNIGINE есть инструменты для конфигурации таких систем для настройки положения каждого из экранов/проекторов, в какую сторону необходимо направить ту или иную часть изображения.
![](https://habrastorage.org/getpro/habr/upload_files/42f/e59/053/42fe59053f0b3185d7a20dcca1075c30.png)
Кроме того, когда проекторы светят на сферу, они это делают с перекрытием: есть участки, на которые светит 2–4 проектора.
![](https://habrastorage.org/getpro/habr/upload_files/40c/12d/bd3/40c12dbd3227d953298ae545d295f5f4.jpg)
Также в движке есть инструменты для компенсации этого перекрытия — для однородности яркости всего полотна без засветов и избежания искажений.
Вы можете сказать, что это слишком сложно — зачем городить громоздкие экраны и кабины в натуральную величину, ведь давно уже придумали VR, в котором нет перспективных искажений.
Да, действительно, VR широко используется в симуляторах и тренажерах, но, как правило, только для первого этапа — отработки последовательности действий. Это обусловлено тем, что пилотам, например, важны еще и тактильные ощущения, которые пока невозможно реализовать в VR — ведь пилоту необходимо запомнить физическое расположение каждой кнопки или рычага. Индустрия пытается изобрести тактильную обратную связь, но пока все эти проекты находятся в стадии разработки.
![](https://habrastorage.org/getpro/habr/upload_files/8e1/db9/110/8e1db911098d5d7f4714652190d9ebef.jpg)
Именно поэтому VR чаще всего используется для maintainance‑симуляторов технического обслуживания различных систем: двигателей, машин, помещений, зданий, производственных комплексов.
![](https://habrastorage.org/getpro/habr/upload_files/db7/ccd/18d/db7ccd18d9095484d7b51f46a7bc1e4b.png)
![](https://habrastorage.org/getpro/habr/upload_files/980/774/337/980774337a8caa84951bc89cf3b75310.jpg)
Помимо обучения людей, IG также широко используется для обучения нейросетей для беспилотников, квадрокоптеров или беспилотных автомобилей.
Не только для людей: обучение нейросетей
![](https://habrastorage.org/getpro/habr/upload_files/f69/561/0f9/f695610f982ec3aa2544aae59570abd9.png)
Использование фотореалистичной графики для обучения нейросетей гораздо безопаснее, чем отправлять автомобили или летательные аппараты, управляемые компьютером, в мир. Достоинство такого способа еще и в том, что он позволяет моделировать любые ситуации и сценарии, включая критические, не дожидаясь подходящих условий в физическом мире.
Конечно, существуют различия между графикой, предназначенной для человеческого глаза и той, что подается в датчики беспилотника. Изображения «для компьютера» выглядят иначе — видов «зрения» у беспилотников гораздо больше: LiDARы, радары, камеры с широким спектром (не HDR, а заходящие в ультрафиолетовые и инфракрасные диапазоны), поэтому рендер происходит не только в RGB, а в гораздо более широком спектре.
![](https://habrastorage.org/getpro/habr/upload_files/dc3/d46/d6e/dc3d46d6e3025c5ab55815875021f9d1.png)
Для различных проходов рендера в движке настраиваются отдельные текстуры с цветами, освещением, и т. д.
![](https://habrastorage.org/getpro/habr/upload_files/fa1/676/f03/fa1676f032c3c70f23189716ee762707.png)
![На изображении: работа лидара, рендер буфера и передача его беспилотному автомобилю. На изображении: работа лидара, рендер буфера и передача его беспилотному автомобилю.](https://habrastorage.org/getpro/habr/upload_files/07b/4cb/b3d/07b4cbb3d675eee5ac0f31a3f87e9fb2.gif)
Вероятно, после прочтения этой статьи у вас появилось представление о том, что такое симуляторы, и в чем заключаются их отличия в зависимости от сферы применения. Для полноты картины как будто хочется заглянуть не только в специфику самих симуляторов, но и в работу тех, кто занимается разработкой систем, используемых для их построения.
Частные случаи
Создание и настройка визуальных эффектов для симуляторов — довольно интересная работа, в которой часто приходится примерять на себя разные роли: сегодня ты пилот вертолета, а завтра бороздишь моря и океаны, и приходится глубоко погружаться в предметную область, чтобы достичь достоверности и реалистичности.
Самое ценное — полученный в процессе опыт. Рассмотрим часто встречающийся пример с отображением лопастей вертолета. Во всех игровых симуляторах неправильно рисуется винт вертолета, когда он крутится на максимальной скорости. Все пытаются нарисовать его в промежуточном состоянии, как это обычно выглядит в видео:
Это обусловлено тем, что камера снимает с определенной частотой, и при съемке она фиксирует лопасть в каждом кадре, в то время как человеческий глаз это не воспринимает — для него вращающиеся лопасти выглядят как равномерный прозрачный диск:
![](https://habrastorage.org/getpro/habr/upload_files/c10/a8b/b59/c10a8bb5909eadf66ee40506a40df8a4.png)
Симуляторы требуют достоверности, и вращение винта должно выглядеть в нем так, как это видит глаз. Помимо этого, винты вертолета еще и гнутся в разные стороны в разных плоскостях:
![](https://habrastorage.org/getpro/habr/upload_files/144/930/a4f/144930a4f1533ccafd7cf6ef27e28a84.gif)
Еще один пример: пыль от винта, которая пилотами всегда ощущается меньше, чем есть на самом деле. Для того, чтобы вывести ее в поле зрения, иногда приходится «выдвигать» ее чуть вперед:
![](https://habrastorage.org/getpro/habr/upload_files/eb2/c61/469/eb2c614692886b2f6f76d092a6d47c78.gif)
И вот здесь начинаются «фокусы» — ее не просто нужно отобразить, но еще и «пролезть» по производительности (60 fps никто не отменял), и при этом выдать максимально реалистичную картинку.
Как уже говорилось ранее, нужно постоянно разбираться в предметной области. Еще один такой пример — аэродромные огни. Зачастую пилоты приходят в восторг, когда видят, что у нас есть симуляция огней PAPI.
![](https://habrastorage.org/getpro/habr/upload_files/795/554/0d5/7955540d518dc059ad8cd02d7671ea00.gif)
PAPI — это специальное оборудование для захода на посадку, для удерживания в глиссаде (правильный угол для захода на посадочную полосу).
![](https://habrastorage.org/getpro/habr/upload_files/817/85c/d12/81785cd12494f63c3a4f3821df05906f.png)
Если пилот видит два белых и два красных огня, это значит, что он заходит на посадку правильно. Если в его поле зрения все 4 огня светятся белым — значит, он идет сильно выше полосы и пролетит мимо, если все 4 огня красные — он точно не долетит до полосы и разобьется, и нужно срочно забирать выше.
![](https://habrastorage.org/getpro/habr/upload_files/20e/78a/bda/20e78abda7a12113ac8884a5980f6aec.gif)
Соответственно, для правильной реализации всей иллюминации нужно разбить огни на правильные группы, обеспечить их переключение и корректную анимацию каждой группы.
![](https://habrastorage.org/getpro/habr/upload_files/8a1/2ed/e04/8a12ede04a440f875ea8e5c0cad01a30.png)
В рамках этой статьи и лекции ведущего программиста отдела высокоуровневой логики UNIGINE Александра Горбатова мы чуть приоткрыли завесу загадочного мира разработки визуальной части симуляторов. Надеемся, вам было интересно.
Посмотреть другие лекции с Open Air 2022 вы можете на нашем канале, а за новым материалом приезжайте на UNIGINE Open Air 2023. Он состоится этим летом, следите за новостями!
ссылка на оригинал статьи https://habr.com/ru/articles/730052/
Добавить комментарий