Как делаются симуляторы

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Когда речь заходит о симуляторах, любой человек в первую очередь думает об играх в этом жанре. Они делятся на аркадные: NFS, War Thunder, Snowrunner, где игроку просто весело, и хардкорные, которые стремятся воспроизвести механику управления для полного погружения. 

Но главное отличие игр от профессиональных симуляторов заключается в том, что игры созданы для удовольствия и приятного времяпровождения, а профессиональные симуляторы созданы, чтобы причинять боль. Обучение - тяжелый процесс оттачивания навыков, где ценой ошибки может стать чья-то жизнь, и тут уже не до игр.

Профессиональные симуляторы делятся на три категории:

  • процедурные

  • комплексные

  • тактические

Процедурные симуляторы

Название говорит само за себя: в рамках тренажера отрабатывается определенная процедура. В режиме обучения испытуемый знакомится с органами управления, их расположением и функционалом, осваивает последовательность действий, отрабатывает навыки. В режиме экзамена симулятор позволяет сэкономить средства на вывозе персонала на объект (например, нефтяную вышку), а также исключает повреждение оборудования и человеческие потери в случае ошибки. 

Процедурой может быть также взлет или посадка самолета. Отработка требуется в точках принятия решений: например, когда убирать закрылки или выпустить шасси.

Комплексные симуляторы

Комплексные симуляторы представляют собой симбиоз виртуального и физического миров: они полностью повторяют органы управления всей системы, имитируя кабину или рубку управления, обладают подвижностью и дают максимально допустимую перегрузку в 2-3g для полной достоверности происходящего. Обучающийся получает навыки не только управления, но и всех азов, начиная с захода в кабину.

Тактические симуляторы

Этот тип симуляторов направлен на координацию взаимодействия людей. Яркий пример - авиадиспетчерская, где диспетчеры привода, диспетчеры посадки, диспетчеры рулежных дорожек, диспетчеры наземной техники должны взаимодействовать друг с другом, слаженно работать, и не совершать ошибок при координации. 

Например, крупнейшая катастрофа в истории авиации произошла из-за несогласованности действий диспетчеров, что стало причиной гибели более чем 500 человек. Именно поэтому обучение персонала в контролируемых условиях так важно - на кону всегда стоят сотни жизней. 

По сути, тактические симуляторы очень похожи на мультиплеерные игры. Но это не просто клиент-серверное приложение, в связке могут находиться несколько серверов, отвечающих за разные сферы: на одном происходит только симуляция физики, на другом – погоды, на третьей – чего-то еще, и все они взаимодействуют между собой.

Как же устроены авиасимуляторы?

Архитектура симулятора

Стандартный симулятор представляет собой локальную сеть, состоящую из нескольких компьютеров, каждый из которых выполняет какую-то одну функцию: 

1. графический движок для имитации закабинной обстановки;

2. физический движок для моделирования движения и физических взаимодействий с окружающей средой;

3. интерфейс инструктора для управления и настройки симулятора;

5. модули для подключения внешних устройств: джойстиков, рулей управления, подвижных платформ и т.д;

6. модули для обработки и хранения данных о полетах и результатов обучения пилотов.

Как это выглядит в UNIGINE:

Компоненты симулятора обращаются к плагину IG, разработкой которого мы занимаемся в UNIGINE. IG – Image Generator – сервер, отвечающий за визуализацию закабинной обстановки. Простым языком, он “рисует” все то, что происходит в симуляторе, получая от других серверов команды и наборы сущностей, их состояний и позиций.

В ответ IG, как правило, сообщает серверам, как объект А видит объект Б, что находится позади объекта, и выполняет роль своего рода сенсорного сервера и отвечает на сенсорные запросы, поскольку другие серверы не обладают информацией об окружающей среде, поверхности, высоте в конкретной точке террейна над уровнем моря, коллизиях, температуре в этой точке, и т.д.

Пример типичной команды хостов: “Boeing-737 летит по полосе 32 с такими-то координатами, у него убраны шасси, закрылки выпущены на 15 градусов, возгорание второго двигателя.” Восприняв эту информацию, IG должен создать корректную визуализацию.

Если убраны шасси и высота над полосой состаляет 0 м, значит, самолет уже едет на брюхе и за ним тянется пыль. О наличии пыли хосты не предупреждают: предполагается, что Image Generator автоматически должен “понимать”, что нужно ее отрисовывать в заданных условиях.

Еще одной сложной системой в IG является генератор погодных условий. Он принимает сообщение от хоста в таком виде:

Возникает ряд вопросов: 

- как температура влияет на картинку?

- как влияет влажность?

- если температура отрицательная, должен ли идти снег?

На все эти вопросы отвечает IG. После рендера погоды по заданным условиям, IG должен вернуть ответ серверу с информацией с “датчиков”, например, продольный срез облаков и их плотность для вывода на приборную панель самолета. 

Эволюция графики авиасимуляторов

Симулятор самолета имеет очень долгую жизнь: Боинг-737 выпускается с 1967 года, и конструктивно с тех пор мало что поменялось. Соответственно, симуляторы Боинга существуют примерно с тех же самых пор, и органы управления, оригинальная процедура захода, математическая модель, может, и менялись со временем в зависимости от модификаций и улучшений, но базовая часть осталась прежней.

А вот графика закабинной обстановки меняется кардинально каждые 5-10 лет. 

В 1967 году графика выглядела примерно вот так:

В 1980-е:

В 1990-е:

В 2000-е:

В 2010-е:

Большинство симуляторов используют картинку качества 2010-х годов, как достаточную. Да, пару лет назад вышел Microsoft Flight Simulator 2020, но на него не стремятся переходить, поскольку это игра, ее SDK еще в разработке и недоступен для подключения к комплексному тренажеру.

Изображение из Microsoft Flight Simulator 2020
Изображение из Microsoft Flight Simulator 2020

Плагин IG в UNIGINE позволяет выдавать картинку ничуть не хуже. Полюбуемся скринами:

Изображение сгенерировано в UNIGINE
Изображение сгенерировано в UNIGINE
Изображение сгенерировано в UNIGINE
Изображение сгенерировано в UNIGINE
Изображение сгенерировано в UNIGINE
Изображение сгенерировано в UNIGINE
Изображение сгенерировано в UNIGINE
Изображение сгенерировано в UNIGINE
Изображение сгенерировано в UNIGINE
Изображение сгенерировано в UNIGINE

Для тактических и комплексных симуляторов очень важна хорошая графика – она позволяет глубже погрузиться в процесс обучения. Чем реалистичнее графика “за окном”, тем больше психологическое воздействие на человека, и обучающемуся легче представить, что он действительно сидит за штурвалом самолета и управляет огромной махиной, а за спиной у него 300 человек, жизнь которых зависит от принятых им решений. Этот эффект носит название “иммерсивность” – он позволяет по-настоящему ощутить себя в небе. Для достижения иммерсивности используют различные системы. Как правило, это проекторы, которые проецируют изображения на различные плоскости с целью задействовать периферийное зрение.

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

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

Движок это все умеет – выводить картинку, корректо ее искажать, правильно настраивать - чтобы это казалось продолжением реальности, не было видно швов и стыков, и было настроено на точку зрения пилота. 

У проекционных систем есть огромный недостаток – только одна точка зрителя, в которой перспективное искажение равно нулю. При смещении угла зрения картинка начинает искажаться и теряет свою достоверность. Поэтому в симуляторах обычно имеют две отдельные настройки на первого и второго пилотов, либо располагают точку зрителя где-то между ними. Такой подход используется в небольших симуляторах, однако для профессиональных симуляторов высокого класса это уже не работает: оба пилота учатся взаимодействовать друг с другом, и в этом случае даже небольшое перспективное искажение допускать нельзя. Для таких симуляторов используется экран обратной проекции: изображение проецируется на сферическое зеркало.

При использовании таких экранов достигается эффект параллакса, и объекты, расположенные вдали, таковыми и воспринимаются. Подобные системы стоят очень дорого и используются только в самых крутых симуляторах.

Естественно, от движка требуется, чтобы он мог осуществлять рендер изображения такого формата. Что касается железа, то один компьютер, конечно же, не справится с рендером всей сферы с разрешением в 16К: на сферу могут “светить” до 12 проекторов. В этом случае используется распределенный рендер: 12 проекторов подключаются к 12 машинам, и одновременно каждая осуществляет рендер сцены. Все они имеют копию сцены, но каждая из этих машин рендит только свой “кусочек”, и проецирует на сферу, как мозаику.

IG получает от хоста команды и распространяет их на “рабов”. В движке UNIGINE есть инструменты для конфигурации таких систем для настройки положения каждого из экранов/проекторов, в какую сторону необходимо направить ту или иную часть изображения.

Кроме того, когда проекторы светят на сферу, они это делают с перекрытием: есть участки, на которые светит 2-4 проектора. 

Также в движке есть инструменты для компенсации этого перекрытия – для однородности яркости всего полотна без засветов и избежания искажений. 

Вы можете сказать, что это слишком сложно - зачем городить громоздкие экраны и кабины в натуральную величину, ведь давно уже придумали VR, в котором нет перспективных искажений. 

Да, действительно, VR широко используется в симуляторах и тренажерах, но, как правило, только для первого этапа – отработки последовательности действий. Это обусловлено тем, что пилотам, например, важны еще и тактильные ощущения, которые пока невозможно реализовать в VR – ведь пилоту необходимо запомнить физическое расположение каждой кнопки или рычага. Индустрия пытается изобрести тактильную обратную связь, но пока все эти проекты находятся в стадии разработки.

Именно поэтому VR чаще всего используется для maintainance-симуляторов технического обслуживания различных систем: двигателей, машин, помещений, зданий, производственных комплексов.

Помимо обучения людей, IG также широко используется для обучения нейросетей для беспилотников, квадрокоптеров или беспилотных автомобилей.

Не только для людей: обучение нейросетей

Использование фотореалистичной графики для обучения нейросетей гораздо безопаснее, чем отправлять автомобили или летательные аппараты, управляемые компьютером, в мир. Достоинство такого способа еще и в том, что он позволяет моделировать любые ситуации и сценарии, включая критические, не дожидаясь подходящих условий в физическом мире. 

Конечно, существуют различия между графикой, предназначенной для человеческого глаза и той, что подается в датчики беспилотника. Изображения “для компьютера” выглядят иначе – видов “зрения” у беспилотников гораздо больше: LiDARы, радары, камеры с широким спектром (не HDR, а заходящие в ультрафиолетовые и инфракрасные диапазоны), поэтому рендер происходит не только в RGB, а в гораздо более широком спектре.

Для различных проходов рендера в движке настраиваются отдельные текстуры с цветами, освещением, и т.д.

На изображении: работа лидара, рендер буфера и передача его беспилотному автомобилю.
На изображении: работа лидара, рендер буфера и передача его беспилотному автомобилю.

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

Частные случаи

Создание и настройка визуальных эффектов для симуляторов – довольно интересная работа, в которой часто приходится примерять на себя разные роли: сегодня ты пилот вертолета, а завтра бороздишь моря и океаны, и приходится глубоко погружаться в предметную область, чтобы достичь достоверности и реалистичности. 

Самое ценное – полученный в процессе опыт. Рассмотрим часто встречающийся пример с отображением лопастей вертолета. Во всех игровых симуляторах неправильно рисуется винт вертолета, когда он крутится на максимальной скорости. Все пытаются нарисовать его в промежуточном состоянии, как это обычно выглядит в видео:

Это обусловлено тем, что камера снимает с определенной частотой, и при съемке она фиксирует лопасть в каждом кадре, в то время как человеческий глаз это не воспринимает – для него вращающиеся лопасти выглядят как равномерный прозрачный диск:

Симуляторы требуют достоверности, и вращение винта должно выглядеть в нем так, как это видит глаз. Помимо этого, винты вертолета еще и гнутся в разные стороны в разных плоскостях:

Еще один пример: пыль от винта, которая пилотами всегда ощущается меньше, чем есть на самом деле. Для того, чтобы вывести ее в поле зрения, иногда приходится “выдвигать” ее чуть вперед:

И вот здесь начинаются “фокусы” – ее не просто нужно отобразить, но еще и “пролезть” по производительности (60 fps никто не отменял), и при этом выдать максимально реалистичную картинку. 

Как уже говорилось ранее, нужно постоянно разбираться в предметной области. Еще один такой пример – аэродромные огни. Зачастую пилоты приходят в восторг, когда видят, что у нас есть симуляция огней PAPI. 

PAPI – это специальное оборудование для захода на посадку, для удерживания в глиссаде (правильный угол для захода на посадочную полосу).

Если пилот видит два белых и два красных огня, это значит, что он заходит на посадку правильно. Если в его поле зрения все 4 огня светятся белым – значит, он идет сильно выше полосы и пролетит мимо, если все 4 огня красные – он точно не долетит до полосы и разобьется, и нужно срочно забирать выше.

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

В рамках этой статьи и лекции ведущего программиста отдела высокоуровневой логики UNIGINE Александра Горбатова мы чуть приоткрыли завесу загадочного мира разработки визуальной части симуляторов. Надеемся, вам было интересно. 

Посмотреть другие лекции с Open Air 2022 вы можете на нашем канале, а за новым материалом приезжайте на UNIGINE Open Air 2023. Он состоится этим летом, следите за новостями!

Источник: https://habr.com/ru/companies/unigine/articles/730052/


Интересные статьи

Интересные статьи

Как вы относитесь к симуляторам электронных схем? Кто-то на них плюется, а мне нравится! Особенно нравится, когда организму лень отлипать от дивана, а мозг требует схемотехники. Arduino IDE + ISIS...
Привет! Меня зовут Татьяна Дерягина, я QA-инженер из команды мобильного тестирования в СберМаркете. Моя команда работает дистанционно, находясь в разных городах России. Хочу рассказать, как как мы ада...
В предыдущей статье мы познакомились с общей идеологией симуляции при согласовании импедансов на примере бесплатного ПО. Посмотрим теперь, каких результатов можно ожидать от пакетов, которые использу...
В этой статье рассмотрим особенности тестирования мобильных приложений с помощью эмуляторов/симуляторов и на реальных устройствах.Содержание:Что такое мобильные эмуляторы и симуляторы;Типы мобильных т...
У любителей электроники, разобравшихся в общих чертах в процессах отражения сигнала от концов линии передачи, неизбежно возникает ряд вопросов, связанных с выбором номиналов согласующих резисторов. Пр...