Дневник разработчиков
Выпуск 81
Приветствуем, товарищи!

Мы продолжаем делиться информацией о процессе разработки и рассказывать о моментах, связанных с определёнными улучшениями, доработками, а также в целом о том, на что мы обращаем внимание. И одна из важных тем — то, как проект работает в VR.

Мы видим много положительных отзывов касательно того, насколько хорошо игра выглядит в VR и как плавно работает. Но также мы видим и тех, у кого возникли проблемы и эти проблемы мы не оставляем без внимания. Поэтому, помимо поиска решений существующих недочётов, а также постоянной работы по улучшению производительности и исправлению багов, мы решили ещё и поговорить о технологиях в сегодняшнем дневнике: рассказать о нюансах и поделиться своим опытом по настройке проекта для работы в этом режиме.
Темой виртуальной реальности наша команда занялась сразу же, как эта новая технология начала активно развиваться и распространяться — в 2016 году. Тогда первыми двумя устройствами, поддержку которых мы добавили через протокол Open VR, были HTC Vive и Oculus Rift CV1. Сам принцип работы виртуального шлема не так уж и сложен: трёхмерный мир игры визуализируется («рендерится») дважды — с двух перспектив, соответствующих положению двух глаз игрока. Таким образом, зрительная подсистема человека начинает воспринимать картинку как объёмный мир, а не как изображение на плоскости монитора. Главным же трюком здесь является оптимизация. Ведь дважды «рендерить» мир игры — это тратить двойной набор вычислительных ресурсов и значительно увеличивать потребление видеопамяти. Тут существует «лайфхак»: глаза человека пусть и разнесены по расстоянию, но всё же весьма незначительно. Кроме того, глаза человека в норме смотрят всегда в одном направлении. От того, как каждый конкретный разработчик использует эти два физиологических факта для оптимального использования ресурсов и отказа от двойного просчёта изображения там, где это возможно, во многом и зависит финальная производительность игры в режиме VR. В 2018 году «Ил‑2: Великие сражения» многие издания называли одной из игр, предоставляющих самый лучший VR‑опыт.
С тех пор мы, конечно, не останавливались. Начиная с 2016 года любое изменение в игре, которое мы делаем, теперь рассматривается ещё и с точки зрения того, «а как это повлияет на VR‑опыт». Конечно, в рамках старого движка со временем мы упёрлись в некоторые технологические ограничения. И вот в 2022 году мы начали разрабатывать «Корею» — и именно в ней мы смогли избавиться от рамок старых технологий и подходов и дать новый импульс развития VR‑направлению нашего движка и игры. Главное — к этому времени появился новый протокол (API) Open XR, который, работая совместно с современными шлемами VR, позволял достигнуть заметно большей производительности. Его мы подключили и адаптировали в первую очередь, и результаты получились очень хорошими.
Вторая технология, которую мы в «Корее» продвигали для получения дополнительного прироста производительности VR, — это «апскейл», или DLSS и FSR. Саму технологию DLSS мы подключили без особых проблем, но вот её совмещение с VR в рамках всё ещё «нового» для жанра авиасимуляторов API DirectX 12 было задачей крайне сложной. В связи с двойным рендером «вылезло» огромное количество особенностей реализации, которые было необходимо учесть. Кое‑какие из них потребовали до полугода плотного взаимодействия с разработчиками NVIDIA для достижения результата. Тем не менее этот путь был пройден, и сейчас DLSS и FSR вполне совместимы с VR‑режимом.
В «Корее» был создан специальный пресет графики, который позволяет оптимизировать тонкие настройки графической подсистемы специально под VR‑режим. Отдельно мы создали ещё дополнительную опцию понижения разрешения в VR‑режиме ниже устанавливаемого шлемом. Это оказалось необходимым для случая, когда используется 8K‑устройство. Всё‑таки уровень производительности даже топовых видеокарт «не вывозит» такое разрешение: потребление видеопамяти и нагрузка на систему шейдеров слишком высоки. Мы провели анализ ближайших конкурентов по жанру, и там даже на видеокартах 5090 в сложной сцене на малой высоте над крупным городом частота кадров понижалась до 40–45 кадров даже при настройках, выставленных в режим, оптимальный для VR. При «топовых» настройках производительность в этом случае у них снижалась иногда даже до 25 кадров в секунду.

Отдельной «историей» тут является то, что широко рекламируемый режим Foveated и Quadview оказался малоэффективным для приложения, создаваемого под современный пайплайн DirectX 12. В таких приложениях пиксельные шейдеры, которые и оптимизируются этими режимами, и без того максимально разгружены. Мы даже создали прототип поддержки этого режима, пройдя почти полный цикл разработки, — эффект составлял не более 5 % прироста производительности. У конкурентов же при их пайплайне эффект был, но в случае DirectX 12‑ориентированного движка прирост от Quadview наблюдался такой же, как и от применения DLSS, а совместное применение DLSS и Quadview заметного дополнительного прироста не давало.

Ещё мы провели анализ влияния поколения видеокарт на производительность у нас и у ближайших конкурентов по жанру. В целом вырисовывается такая картина: видеокарта 5090 даёт прирост относительно 4090 до 10–15 % в высоконагруженных сценах и до 20 % в малонагруженных сценах. В случае «Кореи» отличие состоит в том, что в малонагруженной сцене прирост FPS может составлять до 50%.

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

Таким образом, следует признать, что в рамках жанра авиасимуляторов с его особенностями трёхмерного мира современная ситуация такова: развитие VR‑устройств значительно опережает возможности современного состояния видеокарт. Все разработчики в жанре вынуждены искать пути достижения хотя бы минимально достаточной производительности для шлемов с разрешением 8K даже на топовых видеокартах. Этот процесс идёт постоянно, и мы планируем внимательно следить за обстановкой на этом «фронте» и при любой возможности будем добавлять изменения, направленные на повышение производительности графики в режиме VR. И все мы, конечно, с замиранием сердца ждём анонса следующего поколения видеокарт, которое, как можно надеяться, закроет существующий разрыв между запросами по производительности 8K VR‑устройств и предложением по производительности у текущего поколения видеокарт. А пока этого не случилось, лучше просто аккуратнее подходить к настройкам, которые используются в режиме виртуальной реальности, ведь зачастую влияние некоторых параметров незаметно в этом режиме, а ресурсов потребляется при этом огромное количество. Напомним, что плавной работы игры в VR можно добиться на не самых топовых системных требованиях, с которыми можно ознакомиться на следующем изображении, которое мы публиковали ранее.
Также хотелось бы дать некоторые рекомендации по настройкам графики игры под VR‑режим.

В первую очередь проверьте параметры приложений и драйверов, через которые осуществляется запуск вашего VR‑устройства. Например, Steam VR очень любит выставлять по умолчанию значение рендеринга приложений в большем разрешении, чем это необходимо. В менее загруженных проектах это может быть некритично и даже незаметно, а где‑то могут вообще автоматически выставляться корректные значения, но в требовательных сценах, если разрешение устанавливается больше, чем нужно, это зачастую становится критичным моментом. Эти параметры рендеринга могут перекрывать любые параметры, задаваемые непосредственно в приложении, и меняться при запуске этого приложения. Поэтому важно вначале обязательно убедиться, что устройство рендерит изображение в нужном разрешении.
Во‑вторых, рекомендуется использовать специальный VR‑пресет графики. Если у вас современный VR‑шлем, то используйте режим Open XR. Кроме того, если у вас достаточно видеопамяти, то рекомендуется применять DLSS или FSR‑апскейлинг со значениями выше среднего. Для снижения нагрузки на видеопамять (а она очень высока в 8K‑устройствах, особенно при применении DLSS) рекомендуется устанавливать детализацию ландшафта вдали в значение «х2», детализацию теней — в «средняя», детализацию травы — в «нормально». Непрямое освещение, как одну из самых требовательных к производительности фич графики, лучше выключить. Оптимизацию городов нужно устанавливать в зависимости от вашей ситуации с видеопамятью: если её достаточно, то лучше выставить значение опции в «Больше FPS». Для улучшения FPS в какой‑то мере может помочь установка опций детальности отражений и зеркал в значения ниже максимального. Для 8K VR‑устройств крайне рекомендуем устанавливать опцию «Разрешение VR» в значение 50% для получения приемлемого уровня FPS в самых нагруженных вариантах сцены (над городом, например).
При оценке производительности VR‑системы необходимо помнить, что VR‑шлемы работают с дискретными значениями FPS. Чаще всего это либо 35/70/140 кадров в секунду, либо 25/45/90/180 кадров в секунду. И если игра может выдавать FPS ниже одного из указанных уровней, но выше другого, FPS ограничится по нижнему из них. При подборе настроек это иногда может создать ложное ощущение, что изменение какой‑то опции не приводит к изменению производительности. На самом деле нет: просто производительность всё ещё не перешагнула за следующий порог в том варианте трёхмерной сцены, где вы проверяете эффект. Зато, даже если в этой сцене итоговый FPS не изменился, всё равно вырастает количество вариантов сцены (ситуаций), когда FPS будет равен большему пороговому значению. И в любом случае подбор оптимальных значений опций увеличивает стабильность FPS в различных ситуациях.

Дополнительно рекомендуем использовать параллельную визуализацию на мониторе в моно‑режиме — это уже специфическая опция, которая управляется в конфигурационном файле data\startup.cfg, параметр or_render_eye=1. Одновременно там же можно настроить разрешение этой параллельной визуализации с помощью параметров or_width и or_height. Важно также помнить, что ощущение масштаба трёхмерного мира зависит от соответствия межзрачкового расстояния (IPD) в виртуальной реальности таковому в вашей реальной физиологии. Его можно подрегулировать непосредственно в игре с помощью клавиш RShift+NumpadPlus / RShift+NumpadMinus. Данная регулировка осуществляется таким образом, чтобы ваше ощущение габаритов наблюдаемых вами элементов кабины самолёта становилось максимально правдоподобным.
Завершая рассказ о теме VR в «Корее», следует подчеркнуть, что всё то время, которое существует VR‑технология, мы занимаемся темой её поддержки, сами постоянно летаем в виртуальной реальности и будем продолжать поддерживать наши технологии максимально возможно совместимыми и оптимизированными с VR. Мы вкладываем много времени и сил в эту поддержку и оптимизацию, находимся в постоянном контакте как с производителями VR‑устройств, так и с производителями видеокарт. В сумме все эти усилия дают очень хороший VR‑опыт, один из лучших в жанре на данный момент. Чтобы не пропустить дополнительные детали о ходе разработки различных технологий «Кореи», подписывайтесь на наши каналы и социальные медиа: ВК, Телеграм и Телеграм чат, следите за новостями.

До встречи в небе и удачной охоты, пилоты!