Разница между 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 для игр.
– Обрабатывает композицию (сборку итогового изображения для каждого глаза) и отправку его на шлем.
Теперь разберем ключевых игроков:
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 API) не запустится вообще. Как вариант вы можете просто перед запуском такой игры вручную запускать 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 (либо перед запуском игры вручную запускайте 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.