Когда речь заходит о симуляторах, любой человек в первую очередь думает об играх в этом жанре. Они делятся на аркадные: NFS, War Thunder, Snowrunner, где игроку просто весело, и хардкорные, которые стремятся воспроизвести механику управления для полного погружения.
Но главное отличие игр от профессиональных симуляторов заключается в том, что игры созданы для удовольствия и приятного времяпровождения, а профессиональные симуляторы созданы, чтобы причинять боль. Обучение - тяжелый процесс оттачивания навыков, где ценой ошибки может стать чья-то жизнь, и тут уже не до игр.
Профессиональные симуляторы делятся на три категории:
процедурные;
комплексные;
тактические.
Процедурные симуляторы
Название говорит само за себя: в рамках тренажера отрабатывается определенная процедура. В режиме обучения испытуемый знакомится с органами управления, их расположением и функционалом, осваивает последовательность действий, отрабатывает навыки. В режиме экзамена симулятор позволяет сэкономить средства на вывозе персонала на объект (например, нефтяную вышку), а также исключает повреждение оборудования и человеческие потери в случае ошибки.
Процедурой может быть также взлет или посадка самолета. Отработка требуется в точках принятия решений: например, когда убирать закрылки или выпустить шасси.
Комплексные симуляторы
Комплексные симуляторы представляют собой симбиоз виртуального и физического миров: они полностью повторяют органы управления всей системы, имитируя кабину или рубку управления, обладают подвижностью и дают максимально допустимую перегрузку в 2–3g для полной достоверности происходящего. Обучающийся получает навыки не только управления, но и всех азов, начиная с захода в кабину.
Тактические симуляторы
Этот тип симуляторов направлен на координацию взаимодействия людей. Яркий пример — авиадиспетчерская, где диспетчеры привода, диспетчеры посадки, диспетчеры рулежных дорожек, диспетчеры наземной техники должны взаимодействовать друг с другом, слаженно работать, и не совершать ошибок при координации.
Например, крупнейшая катастрофа в истории авиации произошла из‑за несогласованности действий диспетчеров, что стало причиной гибели более чем 500 человек. Именно поэтому обучение персонала в контролируемых условиях так важно — на кону всегда стоят сотни жизней.
По сути, тактические симуляторы очень похожи на мультиплеерные игры. Но это не просто клиент‑серверное приложение, в связке могут находиться несколько серверов, отвечающих за разные сферы: на одном происходит только симуляция физики, на другом — погоды, на третьей — чего‑то еще, и все они взаимодействуют между собой.
Как же устроены авиасимуляторы?
Архитектура симулятора
Стандартный симулятор представляет собой локальную сеть, состоящую из нескольких компьютеров, каждый из которых выполняет какую‑то одну функцию:
графический движок для имитации закабинной обстановки;
физический движок для моделирования движения и физических взаимодействий с окружающей средой;
интерфейс инструктора для управления и настройки симулятора;
модули для подключения внешних устройств: джойстиков, рулей управления, подвижных платформ и т.д;
модули для обработки и хранения данных о полетах и результатов обучения пилотов.
Как это выглядит в 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 еще в разработке и недоступен для подключения к комплексному тренажеру.
Плагин IG в 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. Он состоится этим летом, следите за новостями!