Режимы: immersive-vr, immersive-ar, inline

Babylon.js предоставляет мощный инструмент для работы с WebXR, позволяя создавать приложения виртуальной и дополненной реальности прямо в браузере. Ключевым элементом является объект WebXRExperienceHelper и соответствующие режимы сессий: immersive-vr, immersive-ar и inline. Каждый режим имеет свои особенности и применяется в зависимости от целей проекта.


Immersive-VR

Режим immersive-vr предназначен для полноценного погружения в виртуальную реальность с использованием VR-устройств, таких как Oculus Quest, HTC Vive или другие шлемы с поддержкой WebXR.

Особенности режима:

  • Полное 6DoF (шесть степеней свободы): пользователь может перемещаться и вращаться в пространстве.
  • Возможность отслеживания движения контроллеров для интерактивного взаимодействия.
  • Рендеринг сцены с двух камер, имитирующих стереоскопический эффект.
  • Поддержка масштабирования и перемещения сцены относительно пользователя.

Пример создания immersive-vr сессии:

const xrHelper = await scene.createDefaultXRExperienceAsync({
    uiOptions: { sessionMode: 'immersive-vr' },
    optionalFeatures: true
});

xrHelper.input.onControllerAddedObservable.add((controller) => {
    console.log("VR-контроллер подключен:", controller.uniqueId);
});

Особенности интеграции:

  • При активации VR-сессии рендеринг сцены полностью переключается на WebXR.
  • Управление камерой осуществляется автоматически, но возможно подключение пользовательских обработчиков движения.
  • Важно учитывать производительность: VR требует высокой частоты кадров (обычно 90 FPS).

Immersive-AR

Режим immersive-ar используется для дополненной реальности, когда цифровые объекты накладываются на реальный мир с помощью камеры устройства.

Особенности режима:

  • 6DoF или 3DoF отслеживание в зависимости от устройства.
  • Отображение реального мира через камеру и поверх него — 3D объекты.
  • Возможность использования плоскостей (plane detection) для размещения объектов на поверхностях.
  • Поддержка анкерных объектов, которые сохраняют положение в пространстве.

Пример инициализации immersive-ar:

const xrHelper = await scene.createDefaultXRExperienceAsync({
    uiOptions: { sessionMode: 'immersive-ar' },
    optionalFeatures: ["hit-test", "anchors", "light-estimation"]
});

xrHelper.baseExperience.onStateChangedObservable.add((state) => {
    if (state === BABYLON.WebXRState.IN_XR) {
        console.log("AR-сессия активна");
    }
});

Особенности интеграции:

  • AR требует доступ к камере и сенсорам устройства.
  • Hit-test позволяет располагать объекты на реальных поверхностях.
  • Light estimation помогает корректно освещать виртуальные объекты с учётом реального освещения.

Inline

Режим inline — это базовый режим WebXR, который работает без использования шлемов и камер дополненной реальности. Он служит для тестирования и предварительного просмотра контента.

Особенности режима:

  • Используется стандартная камера сцены Babylon.js.
  • Нет стереоскопического рендеринга и полного погружения.
  • Позволяет имитировать поведение XR-устройств с помощью мыши и клавиатуры.

Пример использования inline:

const xrHelper = await scene.createDefaultXRExperienceAsync({
    uiOptions: { sessionMode: 'inline' }
});

xrHelper.input.onControllerAddedObservable.add((controller) => {
    console.log("Контроллер подключен в inline режиме:", controller.uniqueId);
});

Применение:

  • Удобно для разработки и отладки XR-сцен на обычных мониторах.
  • Поддержка тех же событий, что и в immersive режимах (например, отслеживание контроллеров).
  • Можно создавать прототипы AR/VR-приложений без необходимости наличия устройства.

Сравнение режимов

Режим Устройство Степени свободы Стерео Реальный мир Особенности
immersive-vr VR-шлем 6DoF Да Нет Полное погружение, контроллеры
immersive-ar Мобильное устройство 6DoF / 3DoF Да/Нет Да AR-анкеринг, hit-test, освещение
inline Любое Ограничено Нет Нет Тестирование, разработка

Настройки и расширенные возможности

  • optionalFeatures — список дополнительных функций WebXR, например "hit-test", "anchors", "light-estimation".
  • uiOptions — позволяет управлять элементами интерфейса XR, включая кнопку входа в сессию.
  • input — доступ к контроллерам, жестам и взаимодействию пользователя.
  • baseExperience — общий объект для управления состоянием XR-сессии, включением/выключением режима и обработкой событий.

Использование правильного режима позволяет оптимизировать производительность, корректно организовать взаимодействие с пользователем и обеспечить реалистичное восприятие сцены. В Babylon.js выбор режима определяется параметром sessionMode, а расширенные функции — через optionalFeatures и объекты управления XR.