XRInterface
Наследует: RefCounted < Object
Наследуется от: MobileVRInterface, OpenXRInterface, WebXRInterface, XRInterfaceExtension
Базовый класс для реализации интерфейса XR.
Описание
Этот класс необходимо реализовать, чтобы сделать платформу AR или VR доступной для Godot, и они должны быть реализованы как модули C++ или модули GDExtension. Часть интерфейса открыта для GDScript, чтобы вы могли обнаружить, включить и настроить платформу AR или VR.
Интерфейсы должны быть написаны таким образом, чтобы простое включение давало нам рабочую настройку. Вы можете запросить доступные интерфейсы через XRServer.
Обучающие материалы
Свойства
|
||
|
||
|
||
|
Методы
get_capabilities() const |
|
get_name() const |
|
get_play_area() const |
|
get_projection_for_view(view: int, aspect: float, near: float, far: float) |
|
get_tracking_status() const |
|
get_transform_for_view(view: int, cam_transform: Transform3D) |
|
is_initialized() const |
|
set_play_area_mode(mode: PlayAreaMode) |
|
void |
|
void |
trigger_haptic_pulse(action_name: String, tracker_name: StringName, frequency: float, amplitude: float, duration_sec: float, delay_sec: float) |
void |
Сигналы
play_area_changed(mode: int) 🔗
Выдается при изменении игровой зоны. Это может быть результатом сброса игроком границы или входа в новую игровую зону, смены игроком режима игровой зоны, изменения масштаба мира или сброса игроком ориентации гарнитуры.
Перечисления
enum Capabilities: 🔗
Capabilities XR_NONE = 0
Отсутствуют возможности XR.
Capabilities XR_MONO = 1
Этот интерфейс может работать с обычным выводом рендеринга (дополненная реальность, не основанная на HMD).
Capabilities XR_STEREO = 2
Этот интерфейс поддерживает стереоскопическую визуализацию.
Capabilities XR_QUAD = 4
Этот интерфейс поддерживает квадро-рендеринг (пока не поддерживается Godot).
Capabilities XR_VR = 8
Этот интерфейс поддерживает VR.
Capabilities XR_AR = 16
Этот интерфейс поддерживает дополненную реальность (AR) (видеофон и отслеживание в реальном мире).
Capabilities XR_EXTERNAL = 32
Этот интерфейс выводит данные на внешнее устройство. Если используется основная область просмотра, вывод на экране представляет собой неизмененный буфер левого или правого глаза (растянутый, если размер области просмотра не изменен до того же соотношения сторон, что и get_render_target_size()). Использование отдельного узла области просмотра освобождает основную область просмотра для других целей.
enum TrackingStatus: 🔗
TrackingStatus XR_NORMAL_TRACKING = 0
Отслеживание работает так, как и ожидалось.
TrackingStatus XR_EXCESSIVE_MOTION = 1
Отслеживание затруднено из-за чрезмерного движения (игрок движется быстрее, чем отслеживание может за ним уследить).
TrackingStatus XR_INSUFFICIENT_FEATURES = 2
Отслеживание затруднено из-за недостатка функций, слишком темно (для отслеживания с помощью камеры), игрок заблокирован и т. д.
TrackingStatus XR_UNKNOWN_TRACKING = 3
Мы не знаем статус отслеживания, или этот интерфейс не обеспечивает обратную связь.
TrackingStatus XR_NOT_TRACKING = 4
Отслеживание не работает (камера не подключена или закрыта, маяки выключены, петушок улетел и т. д.).
enum PlayAreaMode: 🔗
PlayAreaMode XR_PLAY_AREA_UNKNOWN = 0
Режим игровой зоны не установлен или недоступен.
PlayAreaMode XR_PLAY_AREA_3DOF = 1
Игровая зона поддерживает только отслеживание ориентации, отслеживание положения не поддерживается, зона будет центрирована вокруг игрока.
PlayAreaMode XR_PLAY_AREA_SITTING = 2
Игрок находится в сидячем положении, отслеживание положения ограничено, вокруг игрока зафиксирован охранник.
PlayAreaMode XR_PLAY_AREA_ROOMSCALE = 3
Игрок может свободно перемещаться, полное отслеживание положения.
PlayAreaMode XR_PLAY_AREA_STAGE = 4
То же, что и XR_PLAY_AREA_ROOMSCALE, но исходная точка фиксируется в центре физического пространства. В этом режиме может быть отключена центрация на системном уровне, требующая использования XRServer.center_on_hmd().
PlayAreaMode XR_PLAY_AREA_CUSTOM = 2147483647
Пользовательская игровая зона, заданная с помощью GDExtension.
enum EnvironmentBlendMode: 🔗
EnvironmentBlendMode XR_ENV_BLEND_MODE_OPAQUE = 0
Режим наложения Opaque. Обычно используется для устройств виртуальной реальности.
EnvironmentBlendMode XR_ENV_BLEND_MODE_ADDITIVE = 1
Режим аддитивного смешивания. Обычно используется для устройств дополненной реальности или устройств виртуальной реальности с возможностью сквозного пропускания.
EnvironmentBlendMode XR_ENV_BLEND_MODE_ALPHA_BLEND = 2
Режим альфа-смешивания. Обычно используется для устройств дополненной или виртуальной реальности с возможностями сквозного пропускания. Альфа-канал управляет видимостью сквозного пропускания. Альфа 0,0 означает, что сквозное пропускание видимо, и этот пиксель работает в режиме АДДИТИВНОГО ПРОСТРАНСТВА. Альфа 1,0 означает, что сквозное пропускание невидимо, и этот пиксель работает в режиме НЕПРОЗРАЧНОГО ПРОСТРАНСТВА.
enum VRSTextureFormat: 🔗
VRSTextureFormat XR_VRS_TEXTURE_FORMAT_UNIFIED = 0
Формат текстуры такой же, как и возвращаемый XRVRS.make_vrs_texture().
VRSTextureFormat XR_VRS_TEXTURE_FORMAT_FRAGMENT_SHADING_RATE = 1
Формат текстуры такой же, как и ожидается от расширения Vulkan VK_KHR_fragment_shading_rate.
VRSTextureFormat XR_VRS_TEXTURE_FORMAT_FRAGMENT_DENSITY_MAP = 2
Формат текстуры такой же, как и ожидается от расширения Vulkan VK_EXT_fragment_density_map.
Описания свойств
bool ar_is_anchor_detection_enabled = false 🔗
В интерфейсе дополненной реальности, если true включено обнаружение привязки.
EnvironmentBlendMode environment_blend_mode = 0 🔗
bool set_environment_blend_mode(mode: EnvironmentBlendMode)
EnvironmentBlendMode get_environment_blend_mode()
Укажите, как XR должен вписываться в окружающую среду. Это относится к определенным устройствам дополненной реальности и сквозным устройствам, где изображения с камер вводятся компоновщиком XR.
bool interface_is_primary = false 🔗
true , если это основной интерфейс.
PlayAreaMode xr_play_area_mode = 0 🔗
bool set_play_area_mode(mode: PlayAreaMode)
PlayAreaMode get_play_area_mode()
Режим игровой зоны для этого интерфейса.
Описания метода
Если это интерфейс дополненной реальности, требующий отображения потока камеры в качестве фона, этот метод возвращает идентификатор потока в CameraServer для этого интерфейса.
int get_capabilities() const 🔗
Возвращает комбинацию флагов Capabilities, предоставляющих информацию о возможностях этого интерфейса.
StringName get_name() const 🔗
Возвращает имя этого интерфейса ("OpenXR", "OpenVR", "OpenHMD", "ARKit" и т. д.).
PackedVector3Array get_play_area() const 🔗
Возвращает массив векторов, представляющих физическую игровую зону, сопоставленную с виртуальным пространством вокруг точки XROrigin3D. Точки образуют выпуклый многоугольник, который можно использовать для реагирования на игровую зону или ее визуализации. Это возвращает пустой массив, если эта функция не поддерживается или если информация еще недоступна.
Projection get_projection_for_view(view: int, aspect: float, near: float, far: float) 🔗
Возвращает матрицу проекции для вида/глаза.
Vector2 get_render_target_size() 🔗
Возвращает разрешение, с которым следует визуализировать промежуточные результаты, прежде чем VR-платформа применит такие эффекты, как искажение объектива.
Array get_supported_environment_blend_modes() 🔗
Возвращает массив поддерживаемых режимов смешивания сред, см. EnvironmentBlendMode.
Dictionary get_system_info() 🔗
Возвращает Dictionary с дополнительной системной информацией. Интерфейсы должны возвращать XRRuntimeName и XRRuntimeVersion, предоставляя информацию об используемой среде выполнения XR. Дополнительные записи могут быть предоставлены для конкретного интерфейса.
Примечание:Эта информация может быть доступна только после успешного вызова initialize().
TrackingStatus get_tracking_status() const 🔗
Если поддерживается, возвращает статус нашего отслеживания. Это позволит вам предоставить пользователю обратную связь, если есть проблемы с позиционным отслеживанием.
Transform3D get_transform_for_view(view: int, cam_transform: Transform3D) 🔗
Возвращает преобразование для вида/глаза.
view — индекс вида/глаза.
cam_transform — преобразование, которое сопоставляет координаты устройства с координатами сцены, обычно Node3D.global_transform текущего XROrigin3D.
Возвращает количество видов, которые необходимо отобразить для этого устройства. 1 для Моноскопического, 2 для Стереоскопического.
Вызовите это, чтобы инициализировать этот интерфейс. Первый инициализированный интерфейс определяется как основной интерфейс, и он будет использоваться для рендеринга вывода.
После инициализации интерфейса, который вы хотите использовать, вам необходимо включить режим AR/VR вьюпорта, и рендеринг должен начаться.
Примечание: Вы должны включить режим XR на главном вьюпорте для любого устройства, которое использует основной вывод Godot, например, для мобильного VR.
Если вы сделаете это для платформы, которая обрабатывает свой собственный вывод (например, OpenVR), Godot покажет только один глаз без искажений на экране. В качестве альтернативы вы можете добавить отдельный узел вьюпорта в свою сцену и включить AR/VR на этом вьюпорте. Он будет использоваться для вывода на HMD, что позволит вам делать все, что угодно в главном окне, например, использовать отдельную камеру в качестве камеры зрителя или рендерить что-то совершенно другое.
Хотя в настоящее время это не используется, вы можете активировать дополнительные интерфейсы. Вы можете сделать это, если хотите отслеживать контроллеры с других платформ. Однако на данный момент только один интерфейс может осуществлять рендеринг на HMD.
Возвращает true, если этот интерфейс был инициализирован.
bool is_passthrough_enabled() 🔗
Устарело: Check if environment_blend_mode is XR_ENV_BLEND_MODE_ALPHA_BLEND, instead.
Возвращает true, если сквозная передача включена.
bool is_passthrough_supported() 🔗
Устарело: Check that XR_ENV_BLEND_MODE_ALPHA_BLEND is supported using get_supported_environment_blend_modes(), instead.
Возвращает true, если этот интерфейс поддерживает сквозную передачу.
bool set_environment_blend_mode(mode: EnvironmentBlendMode) 🔗
Устанавливает режим смешивания активной среды.
mode — это режим смешивания среды, начинающийся со следующего кадра.
Примечание: Не все среды выполнения поддерживают все режимы смешивания среды, поэтому важно проверить это при запуске. Например:
func _ready():
var xr_interface = XRServer.find_interface("OpenXR")
if xr_interface and xr_interface.is_initialized():
var vp = get_viewport()
vp.use_xr = true
var acceptable_modes = [XRInterface.XR_ENV_BLEND_MODE_OPAQUE, XRInterface.XR_ENV_BLEND_MODE_ADDITIVE]
var modes = xr_interface.get_supported_environment_blend_modes()
for mode in acceptable_modes:
if mode in modes:
xr_interface.set_environment_blend_mode(mode)
break
bool set_play_area_mode(mode: PlayAreaMode) 🔗
Устанавливает режим активной игровой зоны, вернет false, если режим не может быть использован с этим интерфейсом.
Примечание: Изменение этого после того, как интерфейс уже инициализирован, может быть неприятным для игрока, поэтому рекомендуется выполнить центрирование на HMD с помощью XRServer.center_on_hmd() (при переключении на XR_PLAY_AREA_STAGE) или выполнить переключение во время смены сцены.
Устарело: Set the environment_blend_mode to XR_ENV_BLEND_MODE_ALPHA_BLEND, instead.
Запускает сквозной просмотр, вернет false, если сквозной просмотр не может быть запущен.
Примечание: Область просмотра, используемая для XR, должна иметь прозрачный фон, в противном случае сквозной просмотр может отображаться неправильно.
void stop_passthrough() 🔗
Устарело: Set the environment_blend_mode to XR_ENV_BLEND_MODE_OPAQUE, instead.
Остановить прохождение.
bool supports_play_area_mode(mode: PlayAreaMode) 🔗
Вызовите этот метод, чтобы узнать, поддерживается ли данный режим игровой зоны данным интерфейсом.
void trigger_haptic_pulse(action_name: String, tracker_name: StringName, frequency: float, amplitude: float, duration_sec: float, delay_sec: float) 🔗
Запускает тактильный импульс на устройстве, связанном с этим интерфейсом.
action_name — имя действия для этого импульса.
tracker_name необязателен и может использоваться для направления импульса на определенное устройство при условии, что устройство привязано к этому тактильному сигналу.
frequency — частота импульса, установлена на 0.0, чтобы система использовала частоту по умолчанию.
Amplitude — амплитуда импульса между 0.0 и 1.0.
duration_sec — длительность импульса в секундах.
delay_sec — задержка в секундах перед подачей импульса.
void uninitialize() 🔗
Отключает интерфейс.