Что такое XR в разработке игр: разница между AR, VR и MR и как работает стек OpenXR

На чтение
9 мин
Дата обновления
05.11.2026

XR в разработке игр — это общее название для immersive-форматов: AR, VR и MR. Полезно думать о них не как о трёх модных ярлыках, а как о трёх разных способах переживания игры игроком. Тогда и роль OpenXR становится понятнее: он не «делает магическую совместимость», а даёт общий программный слой, через который игра или движок разговаривает с XR-средой выполнения.

Если коротко: XR описывает тип опыта, а OpenXR — один из ключевых стандартов доступа к этому опыту на уровне приложения и устройства.

AR, VR и MR: что именно меняется в опыте игрока

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

AR — это наложение цифровых объектов на физический мир. Игрок по-прежнему видит окружение, а игра добавляет поверх него подсказки, персонажей, эффекты или интерфейс. Такой опыт может быть совсем простым — например, объект просто «приклеен» к изображению камеры, — а может учитывать положение пользователя и геометрию пространства.

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

Здесь есть важная тонкость: термин MR в индустрии употребляют по-разному. Иногда им называют весь спектр смешанных опытов, включая AR и VR, а иногда — более узкий класс пространственно осведомлённых сценариев. Поэтому в требованиях к игре лучше писать не только ярлык, но и конкретные возможности.

Тип опытаЧто видит игрокЧто обычно важно разработчику
VRПреимущественно виртуальный мир6DoF-трекинг, комфорт, рендер двух глаз, контроллеры, границы безопасной зоны
ARРеальный мир с цифровыми наложениямиКамера или прозрачный дисплей, привязка контента к миру, читаемый UI
MRРеальный и цифровой мир как единая сценаПонимание пространства, якоря, окклюзия, руки, взгляд, устойчивое размещение объектов

Для игровой команды это означает простое правило: сначала описывайте опыт игрока, а уже потом выбирайте термин. Если у вас пазл, где предметы должны стоять на реальном столе и реагировать на ладони, это не просто «XR-игра», а опыт с пространственным пониманием сцены. Если же вы делаете чисто виртуальный хоррор в шлеме, это VR, даже если внутри проекта используются общие XR-инструменты.

Какую задачу решает OpenXR — и чего он не обещает

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

OpenXR решает именно эту проблему фрагментации: задаёт общий API для типовых XR-задач — создания XR-сеанса, получения состояния устройств ввода, трекинга позиций и ориентаций, подготовки и отправки кадров на устройство. Идея в том, чтобы игра или движок использовали единый набор вызовов, а различия между конкретными устройствами и платформами скрывались в среде выполнения.

Но OpenXR не обещает следующее:

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

Иначе говоря, OpenXR повышает переносимость кода, но не отменяет различий в железе, эргономике и возможностях runtime-сред.

Ещё одна типичная путаница: OpenXR — не WebXR. OpenXR — это стандарт нативного доступа к XR-возможностям на уровне приложения и runtime. WebXR — браузерный API. Браузер может использовать OpenXR как внутренний backend, но для разработчика это разные слои и разные точки интеграции.

Карта стека: приложение, движок, loader, API layers и runtime

В обычном игровом проекте OpenXR находится не «вместо движка», а ниже него.

СлойРоль
Приложение / играЛогика, сцены, UI, правила, взаимодействия, выбор того, как игра реагирует на XR-ввод
Игровой движок или XR-плагинИнтегрирует OpenXR в рендер, ввод, камеры, action-систему, жизненный цикл XR-сеанса
OpenXR loaderПромежуточный модуль, который находит активный runtime и соединяет приложение с ним
API layersНеобязательные прослойки для валидации, трассировки, отладки и перехвата вызовов
RuntimeРеальная среда выполнения конкретной XR-платформы, которая управляет устройством, трекингом и выдачей кадров

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

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

Runtime — это уже не абстракция, а конкретная реализация XR-системы. Именно runtime знает, как получить трекинг головы и рук, как синхронизировать кадры с дисплеем устройства, как композить изображение и как использовать особенности конкретной платформы.

Важно и то, чего в этом списке нет: OpenXR не заменяет графический API. Игра всё равно рендерит через Direct3D, Vulkan, OpenGL или другой поддерживаемый графический стек, а OpenXR организует XR-часть жизненного цикла и обмен с runtime.

Что происходит между командой приложения и XR-устройством

Упрощённо рабочий цикл выглядит так:

  1. Игра или движок создаёт XrInstance и тем самым устанавливает связь с loader и активным runtime.
  2. Затем выбирается XR-система: дисплей, набор устройств ввода и отслеживания, с которыми будет работать приложение.
  3. Создаётся XR-сеанс и буферы/представления для рендера одного или нескольких видов.
  4. В каждом кадре приложение запрашивает у runtime актуальные или предсказанные позы головы, рук, контроллеров и других трекеров.
  5. Игра рендерит изображение для нужных видов.
  6. Кадры передаются runtime, а тот уже выводит их на устройство и синхронизирует с его режимом работы.

Если включены API layers, вызов может пройти через несколько промежуточных модулей: приложение вызывает функцию, loader направляет её дальше, слой валидации что-то проверяет, слой трассировки логирует, и только потом команда попадает в runtime. Поэтому OpenXR — это не одна библиотека «для шлема», а цепочка обязанностей.

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

Учебный пример: перенос одной игровой сцены на разные XR-среды

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

Что здесь можно перенести сравнительно хорошо при использовании OpenXR:

  • базовую игровую логику сцены;
  • структуру объектов, анимации, физику и события;
  • общую XR-петлю рендера и получение поз головы;
  • абстрактные действия вроде взять, выбрать, подтвердить, если они не жёстко пришиты к одной модели контроллера.

А вот что часто требует адаптации:

  • Модель ввода. На одном устройстве игрок работает контроллерами, на другом — руками, на третьем — взглядом и жестом подтверждения.
  • Привязка к пространству. В VR комната может быть полностью виртуальной. В MR-сценарии ту же механику нужно ставить на реальные поверхности, а значит потребуется понимание пространства и устойчивое размещение объектов.
  • Интерфейс. Панель подсказок, удобная в VR на фиксированной дистанции, может оказаться слишком мелкой или навязчивой в see-through-устройстве.
  • Окклюзия и окружение. Если игра рассчитывает, что цифровой объект будет «за стеной», это зависит от возможностей конкретной платформы и доступности пространственных данных.
  • Производительность. Одна и та же сцена может поместиться в бюджет одного устройства и потребовать серьёзной оптимизации на другом.

То есть переносимость у OpenXR реальная, но не безусловная. Чем ближе ваш проект к базовым функциям — поза головы, стандартный ввод, обычный stereo-rendering, — тем проще перенос. Чем сильнее игра опирается на пространственное понимание мира, passthrough, руки, глаза, особые конфигурации видов или вендорские расширения, тем больше будет платформенной адаптации.

Как разбирать требования XR-проекта без путаницы в терминах

Полезно начинать не с вопроса «это AR, VR или MR?», а с набора практических требований:

  • Игрок должен видеть реальный мир или быть полностью погружён в виртуальный?
  • Нужно ли понимание поверхностей, стен, мебели, глубины сцены?
  • Какие способы ввода обязательны: контроллеры, руки, взгляд, голос?
  • Какие функции являются базовыми, а какие можно считать необязательными улучшениями?
  • Должна ли игра работать только на одном целевом runtime или на нескольких?
  • Есть ли зависимость от расширений OpenXR или от специфики отдельной платформы?

Хорошая формулировка требований звучит так: «Нужен 6DoF-шлем, два источника ввода, поддержка room-scale, опционально hand tracking и размещение объектов на реальных поверхностях». Плохая — «нужна поддержка MR», потому что такая фраза слишком расплывчата.

Если в проекте используется движок, отдельно проверьте, какой именно OpenXR-плагин или интеграция отвечает за runtime, ввод, extensions и отладку. На уровне маркетинга два устройства могут выглядеть как «XR-совместимые», а на уровне продакшена отличаться по важным для игры деталям.

В программе курса «Введение в игровую индустрию» от skillbox.ru есть небольшой обзорный фрагмент про XR: «Поймёте, как используют новейшие технологии XR в разработке игр». Это полезно как введение в тему, но по одному этому описанию нельзя делать вывод о подробном разборе OpenXR на инженерном уровне.

Итог: AR, VR и MR описывают разные типы пользовательского опыта, а OpenXR помогает уменьшить техническую фрагментацию между устройствами. Он стоит в стеке между игрой и конкретным runtime через loader и, при необходимости, API layers. Это делает перенос игры реальнее, но не отменяет различий в вводе, пространственных возможностях и производительности. Поэтому лучший способ планировать XR-проект — формулировать требования в терминах конкретных возможностей, а не общих ярлыков.