Настройки OpenXR
Точные ключи и значения, запуск, reference space, ввод, расширения и диагностика.
Настройки OpenXR
Настройки проекта задают запрос движка к OpenXR. Они не устанавливают XR runtime, не подключают гарнитуру и не подтверждают поддержку расширения. Ниже приведены ключи и значения по умолчанию текущего Reckfell 1.0.0; включайте только нужные функции.
Минимальный запуск
- В Project Settings найдите
xr/openxr/enabledи включите его. Для первого запуска оставьте Head Mounted, Stereo, Stage и Opaque. - Подготовьте action map по пути
xr/openxr/default_action_map. В текущем проекте это по умолчаниюasset://openxr_action_map.rdata; используйте руководство по action map. - Настройте XR-риг и обработку запуска: наличие XRCamera3D само по себе не включает вывод XR. Проверяйте результат инициализации и отдельно разрешайте XR у нужного Viewport.
- Перезапустите приложение после смены стартовых настроек. Проверяйте лог, активный XR runtime и фактические возможности интерфейса; не определяйте успех по сохранённой галочке.
--xr-mode on принудительно запрашивает XR при старте, --xr-mode off отключает его для диагностического запуска. В обычном режиме редактор не начинает OpenXR-сессию только из-за enabled=true. Запуск игры и запуск самого редактора — разные процессы и этапы.
Для Vulkan запрашивайте OpenXR при старте: расширения графической интеграции нужны до подготовки устройства. Не рассчитывайте, что поздний вызов Initialize исправит пропущенную стартовую конфигурацию. Изменение ProjectSettings во время игры также не пересоздаёт существующие instance, session и swapchain автоматически.
Основные параметры
| Ключ | По умолчанию | Назначение |
|---|---|---|
xr/openxr/enabled | false | Запрос запуска OpenXR. Требует перезапуска. |
xr/openxr/default_action_map | asset://openxr_action_map.rdata | Ресурс действий и bindings, загружаемый интерфейсом. |
xr/openxr/form_factor | 0: Head Mounted | 1 — Handheld. Это требуемый класс устройства, не переключатель режима камеры. |
xr/openxr/view_configuration | 1: Stereo | 0 — Mono; 2 — Stereo with Foveated Inset. Нужна поддержка выбранного вида runtime. |
xr/openxr/reference_space | 1: Stage | 0 — Local; 2 — Local Floor. Определяет запрошенное пространство tracking. |
xr/openxr/environment_blend_mode | 0: Opaque | 1 — Additive; 2 — Alpha. Способ композиции с окружением. |
xr/openxr/target_api_version | пустая строка | Обычно оставьте пустым. Код сначала запрашивает OpenXR 1.1, при API_VERSION_UNSUPPORTED пробует 1.0. Явное значение имеет форму major.minor.patch. Это версия OpenXR API, а не версия Reckfell. |
xr/openxr/startup_alert | true | Показывать системное сообщение при неудачном стартовом запуске. false скрывает окно, но не исправляет причину. |
xr/openxr/submit_depth_buffer | false | Запрашивать отправку depth вместе с цветом при поддержке depth-layer extension и подходящего формата. Не гарантирует улучшение reprojection. |
Не оставляйте action map случайному fallback. Если ресурс не загрузился, интерфейс создаёт стандартные действия; в сборке с инструментами он также пытается сохранить ресурс. Это не подтверждает наличие ваших пользовательских действий и bindings. Сохраните и проверьте собственный .rdata до экспорта.
Stereo with Foveated Inset уже имеет реализацию в текущем исходнике. Это отдельная конфигурация видов с дополнительным inset, а не обещание работы на любой гарнитуре. Для обычного проекта начинайте со Stereo; не путайте inset с настройкой плотности shading.
Выбрать пространство tracking
| Режим | Когда рассматривать | Что учитывать |
|---|---|---|
| Local | Сидячий опыт или привязка интерфейса к локальному origin | Начало задаёт runtime. Оно не является физической стеной и не удерживает голову на месте. |
| Stage | Room-scale и виртуальное перемещение | Привязан к игровому пространству runtime; полезен для сохранения общей системы координат мира. |
| Local Floor | Локальный origin с уровнем пола | Нужна поддержка или доступный fallback; не добавляйте высоту головы второй раз. |
Это запрошенный режим, а не безусловное обещание. Текущий код при отсутствии Local Floor может эмулировать его через Local и Stage; при других неподдерживаемых запросах выбирает Local. Смотрите лог и фактический режим, прежде чем строить логику пола и recenter.
OpenXRInterface.PoseRecentered сообщает об обновлении reference space после обновления tracking. Обработчик из гайда запуска только передаёт событие; не вызывает CenterOnHmd за вас. Политику сброса выбирайте вместе с room-scale и locomotion. Дополнительный безусловный CenterOnHmd может повторно сместить уже скорректированную камеру. Граница Stage не заменяет коллизии и не останавливает физическое движение человека.
Смешивание с окружением
Opaque полностью выводит виртуальную картинку. Additive складывает свет виртуального изображения с окружением; чёрный здесь не обязан закрывать реальный мир. Alpha использует прозрачность вывода, поэтому проверьте TransparentBg нужного Viewport и материал/фон сцены.
Если выбранный blend mode недоступен, код может перейти к первому поддерживаемому. Alpha также может обслуживаться специальной реализацией passthrough. Не считайте чёрное окно доказательством сломанного материала: сначала проверьте фактический blend mode, доступность passthrough, разрешения и интеграцию целевого устройства. Галочка Alpha сама не устанавливает vendor plugin.
Foveation и качество
| Ключ | По умолчанию | Назначение |
|---|---|---|
xr/openxr/foveation_level | 0: Off | 1 — Low, 2 — Medium, 3 — High. Запрос уровня, а не гарантированный прирост FPS. |
xr/openxr/foveation_dynamic | false | Разрешает runtime динамический режим при наличии расширения. |
xr/openxr/foveation_eye_tracked | true | Запрашивает соответствующее eye-tracked foveation extension при подходящем backend; не включает доступ к gaze pose автоматически. |
xr/openxr/foveation_with_subsampled_images | true | Разрешает специальный путь изображений при поддержке. Несовместимые rendering features могут его отключить. |
xr/openxr/create_default_foveated_inset_viewport | true | Автоматический inset viewport для соответствующей view configuration, а не для обычного Stereo. |
Eye-tracked foveation и eye-gaze interaction — разные функции. Значение true не подтверждает ни датчик, ни разрешение, ни активное расширение. Для RD проверьте VRS у Viewport; наличие карты VRS также не является замером фактической экономии.
Если лог сообщает, что subsampled images отключены несовместимыми rendering features, это относится к этому пути изображений. Не переносите вывод автоматически на все варианты foveation. Сравнивайте один и тот же кадр и время GPU на целевом устройстве; не меняйте одновременно разрешение, MSAA, эффекты и уровень foveation.
Расширения и ввод
Все перечисленные переключатели ниже по умолчанию false, кроме явно указанных числовых значений.
| Ключ | Что запрашивает |
|---|---|
xr/openxr/extensions/hand_tracking | Данные суставов рук. В текущей версии выключено по умолчанию. См. чтение суставов. |
xr/openxr/extensions/hand_tracking_unobstructed_data_source | Источник unobstructed hand data, если доступен. |
xr/openxr/extensions/hand_tracking_controller_data_source | Источник hand data, основанный на контроллере, если доступен. |
xr/openxr/extensions/hand_interaction_profile | Профиль взаимодействия рукой; не создаёт нужные actions в вашей карте. Требует перезапуска. |
xr/openxr/extensions/eye_gaze_interaction | Gaze interaction extension. Требует перезапуска; на мобильной платформе дополнительно учитываются platform feature/permission. |
xr/openxr/extensions/render_model | Модели оборудования от runtime при поддержке расширения и сборки. |
xr/openxr/extensions/user_presence | Сведения о присутствии пользователя, если доступны. Не заменяют session focus. |
xr/openxr/binding_modifiers/analog_threshold | Пороговые модификаторы bindings. Настройте и сами bindings. |
xr/openxr/binding_modifiers/dpad_binding | D-pad binding extension; требует перезапуска. |
Для gaze pose нужен action типа Pose в карте: профиль /interaction_profiles/ext/eye_gaze_interaction, input path /user/eyes_ext/input/gaze_ext/pose. У XRController3D задайте Tracker=/user/eyes_ext, а Pose — имя вашего action. Одного включения расширения недостаточно. Это именование и маршрут по исходнику, не проверка точности взгляда или разрешений устройства.
| Ключ | По умолчанию | Что учитывать |
|---|---|---|
xr/openxr/extensions/frame_synthesis | false | Запрос XR_EXT_frame_synthesis. Текущий путь требует двух видов; Vulkan — Mobile. Forward+ не поддержан этим путём, OpenGL обрабатывается отдельно. Не обещает стабильный FPS и не исправляет неправильные motion vectors. |
xr/openxr/extensions/frame_synthesis/flip_y | false | Коррекция ориентации данных для этого пути, не общий переворот камеры. |
xr/openxr/extensions/debug_utils | 0: Disabled | 1 Error, 2 Warning, 3 Info, 4 Verbose. Сообщения OpenXR, не Vulkan validation layers. |
xr/openxr/extensions/debug_message_types | 15 | Маска General/Validation/Performance/Conformance. Фильтр сообщений при включённом debug_utils. |
Пространственное окружение
Следующие ключи нужны для возможностей реального окружения, а не для обычных Entity игрового мира. Включение не создаёт обнаруженные поверхности или сохранённые anchors автоматически. Проверяйте поддержку, согласие пользователя и жизненный цикл данных на устройстве.
| Ключ | По умолчанию |
|---|---|
xr/openxr/extensions/spatial_container/enabled | false |
xr/openxr/extensions/spatial_container/bounds_mode | 0: Bounded; 1 — Immersive |
xr/openxr/extensions/spatial_container/bounds | Vector3(0.5, 0.5, 0.5) |
xr/openxr/extensions/spatial_entity/enabled | false |
xr/openxr/extensions/spatial_entity/enable_spatial_anchors | false |
xr/openxr/extensions/spatial_entity/enable_persistent_anchors | false |
xr/openxr/extensions/spatial_entity/enable_builtin_anchor_detection | false |
xr/openxr/extensions/spatial_entity/enable_plane_tracking | false |
xr/openxr/extensions/spatial_entity/enable_builtin_plane_detection | false |
xr/openxr/extensions/spatial_entity/marker_tracking/enable | false |
xr/openxr/extensions/spatial_entity/marker_tracking/enable_builtin_for_types | 0: ни одного типа; маска QR/Micro QR/ArUco/April tags |
xr/openxr/extensions/spatial_entity/marker_tracking/aruco_dict | 15: 7x7 1000 IDs |
xr/openxr/extensions/spatial_entity/marker_tracking/april_tag_dict | 3: 6x6H11 |
Это справочник стартовых запросов, а не инструкция к готовой системе пространственного распознавания. Не используйте наличие этих ключей как проверку доступности anchors, plane tracking или marker detection.
Диагностика запуска
| Симптом | Проверить сначала |
|---|---|
| Не найден OpenXRInterface | Состав используемой сборки, модуль OpenXR и журнал запуска. |
| Интерфейс есть, но IsInitialized=false | Стартовый запрос XR, активный runtime, устройство и сообщения инициализации. Наличие интерфейса не равно сессии. |
| Игра осталась обычным окном | Успех запуска интерфейса, UseXR нужного Viewport и fallback вашего приложения. |
| Контроллер есть, нужного действия нет | Файл action map, тип action, interaction profile и точный input path. |
| Нет данных рук | hand_tracking, возможности runtime, разрешения и валидность конкретных суставов. |
| Неверная высота/сброс позиции | Фактический reference space, fallback и отсутствие второго смещения origin. |
| Включённая функция не работает | Поддержку и активность конкретного extension, а не только значение ProjectSettings. |
Что проверено
В отдельном проекте установленного Reckfell 1.0.0 с --headless --xr-mode off проверены регистрация и значения 39 скалярных настроек, вектор bounds и наличие неинициализированного заимствованного интерфейса. Получено 81 успешное наблюдение; настройки проекта не записывались, Initialize не вызывался.
Порядок запуска, enum mapping, fallback пространств и blend mode, gating расширений и перечисленные ограничения сверены с текущим исходником. Это не проверка реальной гарнитуры, loader/runtime, permissions, recenter, passthrough, foveation, frame synthesis, tracking, экспорта или UI редактора. Сборка движка и SDK не изменялись.