Разница между VR API (OpenXR, SteamVR, Oculus)
ᅠ ᅠ
Непонятна разница между различными видами API для VR-игр?
ᅠ ᅠ
Путают множество похожих терминов, например, OpenXR, SteamVR, VDXR (Virtual Desktop XR), и непонятно какой выбрать для игр?
ᅠПредисловие
Я пользуюсь гарнитурой виртуальной реальности с конца 2024 года, и играл через Quest 3 уже немало игр. И в целом есть некоторое понимание, что к чему. Но в голове всё ещё иногда возникали примерно такие вопросы:
Если зайти в настройки Virtual Desktop Streamer, приложения на ПК, там можно выбрать варианты для OpenXR Runtime. И там можно выбрать Авто, SteamVR, или VDXR – какой и когда выбрать, и почему именно такой?
Есть еще какой-то Runtime, который используется для эксклюзивов Oculus. Например, в игре Stormland, или в Lone Echo.
В них, например, работает через Oculus. И чтобы нормально играть такие игры через Virtual Desktop (со всеми удобствами, и качеством AV1 кодека), требуется Revive загружать и использовать – почему так?
Это все путает. Можно ли это понять?
Задав эти вопросы DeepSeek, получился неплохой набор упорядоченной инфы, которую я решил оформить статьёй, к которой можно было бы в случае чего возвращаться.
Давайте разберем всё по порядку:
Основные понятия:
- VR API (Application Programming Interface): Это язык, на котором игра (приложение) общается с VR-системой (шлемом, контроллерами, системой трекинга). Примеры: OpenVR (SteamVR), Oculus PC SDK (LibOVR), OpenXR.
- VR Runtime: Это программное обеспечение, работающее в фоновом режиме на вашем ПК. Оно:
– Управляет подключенными VR-устройствами (шлем, базовые станции, контроллеры).
– Обеспечивает работу "SteamVR Home" или "Oculus Dash" (те окружения, которые вы видите при включении).
– Предоставляет реализацию одного или нескольких VR API для игр.
– Обрабатывает композицию (сборку итогового изображения для каждого глаза) и отправку его на шлем. - Привязка (Binding): Как игра подключается к конкретному Runtime. Обычно это DLL-библиотеки.
Теперь разберем ключевых игроков:
OpenXR (API и Стандарт):
– Что это: Открытый, кроссплатформенный стандарт VR/AR, разрабатываемый Khronos Group (те же, кто за OpenGL/Vulkan). Его цель — устранить фрагментацию. Игра, написанная под OpenXR, в теории должна работать с любым шлемом и Runtime, поддерживающим стандарт.
– Как работает: Игра вызывает функции OpenXR API. Runtime (например, SteamVR, Oculus Runtime, VDXR) предоставляет реализацию этого API для конкретного оборудования.
– Аналогия: OpenXR — это как стандарт USB. Устройство (игра) знает, как общаться по USB. Хост (Runtime) знает, как принимать USB-сигналы и управлять подключенными USB-устройствами (шлемом).
SteamVR (Runtime + API OpenVR):
– Что это: Проприетарный Runtime и API (OpenVR) от Valve. Исторически доминирующее решение для ПК-VR, особенно для шлемов HTC Vive, Valve Index, и многих других через драйверы.
– API: Основной API — OpenVR. Хотя SteamVR Runtime также предоставляет реализацию OpenXR API.
С 2020-го Valve рекомендует разработчикам использовать OpenXR вместо OpenVR API для SteamVR.
– Роль: Управляет шлемами/контроллерами (часто через свои драйверы "SteamVR Tracking"), предоставляет среду SteamVR Home, композицию. Является мостом для многих игр и шлемов.
Oculus PC Runtime (Runtime + API Oculus SDK/LibOVR):
– Что это: Проприетарный Runtime и API (Oculus SDK, часто называемый LibOVR) от Meta (ранее Oculus) для ПК. Используется только для шлемов Oculus Rift (Rift, Rift S) и в режиме Oculus Link/Air Link с Quest.
– API: Основной API — Oculus SDK (LibOVR). Современные версии Runtime также предоставляют реализацию OpenXR API.
– Эксклюзивы: Игры, разработанные специфически под Oculus SDK (LibOVR) и часто финансируемые Oculus/Meta (как Stormland, Lone Echo, Asgard's Wrath), требуют этот Runtime для работы на ПК. Они напрямую вызывают функции LibOVR.
VDXR (Virtual Desktop XR Runtime):
– Что это: Проприетарная реализация OpenXR API, созданная разработчиками Matthieu Bucchianeri, Mathias Peter Nordskog, и Guy Godin (автором VD) для Virtual Desktop.
– Цель: Оптимизировать работу игр и приложений через стриминг Virtual Desktop на гарнитуры Quest (и другие standalone). Это не полноценный Runtime в том смысле, что он не управляет физическими устройствами напрямую (это делает драйвер шлема или другой Runtime). Это специализированная реализация OpenXR.
– Как работает: Когда игра использует OpenXR API, VDXR "перехватывает" эти вызовы и оптимизирует их для стриминга через Virtual Desktop. Он обходит необходимость прохождения через SteamVR или Oculus Runtime, что потенциально снижает задержку и нагрузку на CPU.
Разработчик Virtual Desktop (Guy Godin) заявляет что VDXR даёт примерно 10% лучшую производительно по сравнению со SteamVR.
– Аналогия: VDXR — это как специализированный драйвер USB-устройства (игры под OpenXR), оптимизированный для работы по Wi-Fi (стриминг Virtual Desktop).
Теперь про путаницу в настройках Virtual Desktop Streamer:
"OpenXR Runtime": Эта настройка указывает Virtual Desktop, какую реализацию OpenXR API использовать для игр, запускаемых через VD и использующих OpenXR.
Опции:
- Automatic: Virtual Desktop попытается выбрать лучший вариант сам (часто SteamVR, если он установлен).
- SteamVR: Будет использована реализация OpenXR API, предоставляемая SteamVR Runtime. Игра (OpenXR) -> SteamVR OpenXR -> SteamVR Runtime -> Virtual Desktop -> Шлем.
- VDXR: Будет использована собственная оптимизированная реализация OpenXR от Virtual Desktop. Игра (OpenXR) -> VDXR -> Virtual Desktop -> Шлем. Этот путь часто предпочтителен для OpenXR игр при использовании VD, так как он короче и оптимизирован.
Почему эксклюзивы Oculus (Stormland, Lone Echo) не работают напрямую через Virtual Desktop без Revive?
- Нативный API: Эти игры написаны специфически под проприетарный API Oculus SDK (LibOVR). Они вообще не знают, что такое OpenXR или OpenVR (SteamVR).
- Требуют Oculus Runtime: Для работы им обязательно нужен Oculus PC Runtime, установленный на ПК, и они вызывают его функции напрямую.
- Virtual Desktop и Oculus Runtime: По умолчанию Virtual Desktop не эмулирует Oculus Runtime и не перехватывает вызовы LibOVR. Он фокусируется на SteamVR и OpenXR.
- Роль Revive: Это гениальный неофициальный проект. Он действует как переводчик или прокси:
– Устанавливает свои DLL-библиотеки, которые притворяются Oculus Runtime (LibOVR) для игры.
– Перехватывает вызовы LibOVR от игры.
– Переводит (re-implements) эти вызовы в вызовы API, понятные SteamVR Runtime (OpenVR).
– SteamVR Runtime, в свою очередь, работает с Virtual Desktop для стриминга на Quest.
– Цепочка: Игра (Oculus SDK/LibOVR) -> Revive (эмуляция Oculus Runtime + перевод на OpenVR) -> SteamVR Runtime -> Virtual Desktop -> Шлем.
Итоговая схема выбора:
- Игра использует OpenXR (открытый стандарт)?
– Если ДА: В настройках VD Streamer выбирайте VDXR (для лучшей оптимизации стриминга) или SteamVR/Oculus OpenXR, если по каким-то причинам VDXR не работает идеально.
– Если НЕТ: Переходим к пункту 2. - Игра использует SteamVR (OpenVR от Valve)?
– Если ДА: Запускайте через SteamVR. В VD обычно выбирается автоматически. Runtime будет SteamVR.
– В случае если вы уже подключены к пк по VD, и у вас уже принудительно выбран VDXR в настройках (не Авто), то скорее всего, игра со SteamVR (OpenVR) либо не запустится вообще, либо запустится через SteamVR Runtime, игнорируя настройку VDXR.
VDXR сам по себе не может обработать вызовы OpenVR API (от Valve). Потому что OpenVR (API) ≠ OpenXR (API) для оптимизации которого был сделан VDXR. - Игра использует Oculus SDK (LibOVR) (эксклюзив)?
– Если ДА: У вас два основных пути:
→ 1) Простой: Oculus Link/Air Link: Требует установки Oculus PC App и Runtime. Запускается напрямую через Oculus Dash. Самый нативный и часто самый стабильный путь для эксклюзивов Oculus.
→ 2) Продвинутый: Virtual Desktop + Revive: Требует установки Revive. Запускайте игру через библиотеку Revive (в SteamVR или через ярлык Revive).
В VD специальный стример OpenXR Runtime (VDXR) не влияет в плане оптимизации цепочки на эти игры, так как они используют SteamVR Runtime через Revive.
Но Плюс продвинутой связки в использовании всех удобств VD, и возможности без проблем использовать встроенные в VD современные кодеки AV1 10-bit и HEVC 10-bit дающие по воздуху отличное качество на битрейте 200мбит/с.
(к слову, кодек AV1 предпочтительнее в большинстве ситуаций, но в некоторых играх, типа Far Cry 4 с VR модом от Luke Ross, кодек HEVC 10-bit может выдать больше мелких деталей на дальних пейзажах и в местах с обилием растительности, без смазывания / "стабилизации" которая характерна для AV1).
– Virtual Desktop БЕЗ Revive: Не будет работать для нативных эксклюзивов Oculus (LibOVR).
Почему все это важно?
Производительность: Разные пути (VDXR, SteamVR OpenVR и OpenXR, Oculus с LivOVR и OpenXR, Revive+SteamVR) имеют разную нагрузку на CPU/GPU и задержку. VDXR оптимизирован для стриминга VD.
Совместимость: Не все игры поддерживают все API/Runtime. Эксклюзивы Oculus требуют либо Oculus Runtime (Link), либо эмуляцию через Revive.
- Будущее: OpenXR — это стандарт, к которому движется индустрия. Разработчикам выгоднее писать под один OpenXR, чем под несколько проприетарных API. Со временем необходимость в Revive и путаница с Runtime должны уменьшиться. Однако, наследие (старые эксклюзивы Oculus LibOVR, игры на OpenVR) будет с нами еще долго.
Краткие рекомендации для Virtual Desktop:
- Для большинства современных игр (особенно не эксклюзивов): Пробуйте использовать VDXR в настройках OpenXR Runtime. Это часто дает лучшую производительность.
- Если VDXR не работает или игра старая: Используйте Авто или SteamVR.
- Для эксклюзивов Oculus (Stormland, Lone Echo и т.д.):
– Лучшая совместимость: Используйте Oculus Link/Air Link (требует Oculus PC App).
– Лучшее качество и удобства через Virtual Desktop: Обязательно установите Revive и запускайте игру через его интерфейс. Выбор OpenXR Runtime (VDXR) в VD не влияет на эти игры.
Надеюсь, это разъяснило слои взаимодействия между API, Runtime и такими инструментами, как Virtual Desktop и Revive! Путаница понятна, это действительно сложный ландшафт, но он постепенно упрощается с распространением OpenXR.