OpenXRInterface

Наследует: XRInterface < RefCounted < Object

Интерфейс OpenXR.

Описание

Интерфейс OpenXR позволяет Godot взаимодействовать со средами выполнения OpenXR и создавать игры и приложения XR.

Из-за потребностей OpenXR этот интерфейс работает немного иначе, чем другие XR-интерфейсы на основе плагинов. Его необходимо инициализировать при запуске Godot. Вам необходимо включить OpenXR, настройки для этого можно найти в настройках вашего игрового проекта под заголовком XR. Вам необходимо отметить область просмотра для использования с XR, чтобы Godot знал, какой результат рендеринга следует выводить на гарнитуру.

Обучающие материалы

Свойства

float

display_refresh_rate

0.0

bool

foveation_dynamic

false

int

foveation_level

0

float

render_target_size_multiplier

1.0

float

vrs_min_radius

20.0

float

vrs_strength

1.0

Методы

Array

get_action_sets() const

Array

get_available_display_refresh_rates() const

Vector3

get_hand_joint_angular_velocity(hand: Hand, joint: HandJoints) const

BitField[HandJointFlags]

get_hand_joint_flags(hand: Hand, joint: HandJoints) const

Vector3

get_hand_joint_linear_velocity(hand: Hand, joint: HandJoints) const

Vector3

get_hand_joint_position(hand: Hand, joint: HandJoints) const

float

get_hand_joint_radius(hand: Hand, joint: HandJoints) const

Quaternion

get_hand_joint_rotation(hand: Hand, joint: HandJoints) const

HandTrackedSource

get_hand_tracking_source(hand: Hand) const

HandMotionRange

get_motion_range(hand: Hand) const

SessionState

get_session_state()

bool

is_action_set_active(name: String) const

bool

is_eye_gaze_interaction_supported()

bool

is_foveation_supported() const

bool

is_hand_interaction_supported() const

bool

is_hand_tracking_supported()

void

set_action_set_active(name: String, active: bool)

void

set_cpu_level(level: PerfSettingsLevel)

void

set_gpu_level(level: PerfSettingsLevel)

void

set_motion_range(hand: Hand, motion_range: HandMotionRange)


Сигналы

cpu_level_changed(sub_domain: int, from_level: int, to_level: int) 🔗

Информирует об изменении уровня производительности CPU устройства в указанном поддомене (subdomain).


gpu_level_changed(sub_domain: int, from_level: int, to_level: int) 🔗

Информирует об изменении уровня производительности графического процессора устройства в указанном поддомене (subdomain).


instance_exiting() 🔗

Сообщает, что наш экземпляр OpenXR завершает работу.


pose_recentered() 🔗

Информирует пользователя, находящегося в очереди, о положении игрока.


refresh_rate_changed(refresh_rate: float) 🔗

Сообщает пользователю об изменении частоты обновления HMD.

Примечание: Выдается только в том случае, если среда выполнения XR поддерживает расширение частоты обновления.


session_begun() 🔗

Сообщает о начале сеанса OpenXR.


session_focussed() 🔗

Информирует, что сеанс OpenXR теперь имеет фокус, например, выходные данные отправляются на HMD, и мы получаем входные данные XR.


session_loss_pending() 🔗

Сообщает, что наш сеанс OpenXR находится в процессе потери.


session_stopping() 🔗

Сообщает, что наш сеанс OpenXR останавливается.


session_synchronized() 🔗

Сообщает, что наш сеанс OpenXR синхронизирован.


session_visible() 🔗

Сообщает, что наш сеанс OpenXR теперь виден, например, выходные данные отправляются на HMD, но мы не получаем входные данные XR.


Перечисления

enum SessionState: 🔗

SessionState SESSION_STATE_UNKNOWN = 0

Состояние сеанса неизвестно, мы еще не пробовали настраивать OpenXR.

SessionState SESSION_STATE_IDLE = 1

Начальное состояние после создания сеанса OpenXR или после его уничтожения.

SessionState SESSION_STATE_READY = 2

OpenXR готов начать наш сеанс. Сигнал session_begun испускается, когда мы переходим в это состояние.

SessionState SESSION_STATE_SYNCHRONIZED = 3

Приложение синхронизировало свой цикл кадров со средой выполнения, но мы ничего не отображаем. session_synchronized испускается, когда мы переходим в это состояние.

SessionState SESSION_STATE_VISIBLE = 4

Приложение синхронизировало свой цикл кадров со временем выполнения, и мы рендерируем вывод пользователю, однако мы не получаем пользовательского ввода. session_visible испускается при переходе на это состояние.

** Примечание: ** Это текущее состояние непосредственно перед тем, как мы получим сфокусированное состояние, всякий раз, когда пользователь открывает меню системы, переключается на другое приложение или снимает их гарнитуру.

SessionState SESSION_STATE_FOCUSED = 5

Приложение синхронизировало свой цикл кадров со временем выполнения, мы рендерируем вывод пользователю и получаем вход XR. session_focussed испускается при переходе на это состояние.

** Примечание: ** Это состояние OpenXR, когда пользователь может полностью взаимодействовать с вашей игрой.

SessionState SESSION_STATE_STOPPING = 6

Наш сеанс останавливается. session_stopping испускается, когда мы переходим в это состояние.

SessionState SESSION_STATE_LOSS_PENDING = 7

Сеанс скоро будет потерян. session_loss_pending испускается, когда мы переходим в это состояние.

SessionState SESSION_STATE_EXITING = 8

Экземпляр OpenXR вот-вот будет уничтожен, и мы завершаем работу. При переходе в это состояние генерируется сигнал instance_exiting.


enum Hand: 🔗

Hand HAND_LEFT = 0

Левая рука.

Hand HAND_RIGHT = 1

Правая рука.

Hand HAND_MAX = 2

Максимальное значение для перечисления рук.


enum HandMotionRange: 🔗

HandMotionRange HAND_MOTION_RANGE_UNOBSTRUCTED = 0

Полный диапазон рук, если пользователь сжимает руки в кулак, мы делаем полный кулак.

HandMotionRange HAND_MOTION_RANGE_CONFORM_TO_CONTROLLER = 1

Соответствует форме контроллера: если пользователь закрывает руки, отслеживаемые данные соответствуют форме контроллера.

HandMotionRange HAND_MOTION_RANGE_MAX = 2

Максимальное значение для перечисления диапазона движения.


enum HandTrackedSource: 🔗

HandTrackedSource HAND_TRACKED_SOURCE_UNKNOWN = 0

Источник данных отслеживания рук неизвестен (расширение, вероятно, не поддерживается).

HandTrackedSource HAND_TRACKED_SOURCE_UNOBSTRUCTED = 1

Источник отслеживания рук не имеет препятствий, это означает, что используется точный метод отслеживания рук, например, оптическое отслеживание рук, перчатки с данными и т. д.

HandTrackedSource HAND_TRACKED_SOURCE_CONTROLLER = 2

Источником отслеживания руки является контроллер, положения костей определяются на основе входных данных контроллера.

HandTrackedSource HAND_TRACKED_SOURCE_MAX = 3

Представляет размер перечисления HandTrackedSource.


enum HandJoints: 🔗

HandJoints HAND_JOINT_PALM = 0

Ладонный сустав.

HandJoints HAND_JOINT_WRIST = 1

Лучезапястный сустав.

HandJoints HAND_JOINT_THUMB_METACARPAL = 2

Пястно-запястный сустав большого пальца.

HandJoints HAND_JOINT_THUMB_PROXIMAL = 3

Проксимальный сустав большого пальца.

HandJoints HAND_JOINT_THUMB_DISTAL = 4

Дистальный сустав большого пальца.

HandJoints HAND_JOINT_THUMB_TIP = 5

Сустав кончика большого пальца.

HandJoints HAND_JOINT_INDEX_METACARPAL = 6

Пястно-запястный сустав указательного пальца.

HandJoints HAND_JOINT_INDEX_PROXIMAL = 7

Проксимальный сустав фаланги указательного пальца.

HandJoints HAND_JOINT_INDEX_INTERMEDIATE = 8

Промежуточный сустав фаланги указательного пальца.

HandJoints HAND_JOINT_INDEX_DISTAL = 9

Дистальный сустав фаланги указательного пальца.

HandJoints HAND_JOINT_INDEX_TIP = 10

Кончик указательного пальца.

HandJoints HAND_JOINT_MIDDLE_METACARPAL = 11

Пястно-запястный сустав среднего пальца.

HandJoints HAND_JOINT_MIDDLE_PROXIMAL = 12

Проксимальный сустав фаланги среднего пальца.

HandJoints HAND_JOINT_MIDDLE_INTERMEDIATE = 13

Промежуточный сустав фаланги среднего пальца.

HandJoints HAND_JOINT_MIDDLE_DISTAL = 14

Дистальный сустав фаланги среднего пальца.

HandJoints HAND_JOINT_MIDDLE_TIP = 15

Кончик среднего пальца.

HandJoints HAND_JOINT_RING_METACARPAL = 16

Пястно-запястный сустав безымянного пальца.

HandJoints HAND_JOINT_RING_PROXIMAL = 17

Проксимальный сустав фаланги безымянного пальца.

HandJoints HAND_JOINT_RING_INTERMEDIATE = 18

Промежуточный сустав фаланги безымянного пальца.

HandJoints HAND_JOINT_RING_DISTAL = 19

Дистальный сустав фаланги безымянного пальца.

HandJoints HAND_JOINT_RING_TIP = 20

Сустав кончика безымянного пальца.

HandJoints HAND_JOINT_LITTLE_METACARPAL = 21

Пястно-запястный сустав мизинца.

HandJoints HAND_JOINT_LITTLE_PROXIMAL = 22

Проксимальный сустав фаланги мизинца.

HandJoints HAND_JOINT_LITTLE_INTERMEDIATE = 23

Промежуточный сустав фаланги мизинца.

HandJoints HAND_JOINT_LITTLE_DISTAL = 24

Дистальный сустав фаланги мизинца.

HandJoints HAND_JOINT_LITTLE_TIP = 25

Сустав кончика мизинца.

HandJoints HAND_JOINT_MAX = 26

Представляет размер перечисления HandJoints.


enum PerfSettingsLevel: 🔗

PerfSettingsLevel PERF_SETTINGS_LEVEL_POWER_SAVINGS = 0

Приложение вошло в раздел non-XR (head-locked / static screen), в течение которого приоритет отдается энергосбережению.

PerfSettingsLevel PERF_SETTINGS_LEVEL_SUSTAINED_LOW = 1

Приложение вошло в стадию низкой и стабильной сложности, в течение которой снижение мощности важнее, чем случайные задержки рендеринга кадров.

PerfSettingsLevel PERF_SETTINGS_LEVEL_SUSTAINED_HIGH = 2

Приложение вошло в раздел высокой или динамической сложности, в ходе которого XR Runtime стремится к последовательному XR-композитингу и рендерингу кадров в термически устойчивом диапазоне.

PerfSettingsLevel PERF_SETTINGS_LEVEL_BOOST = 3

Приложение вошло в раздел с очень высокой сложностью, в ходе которого XR Runtime может выйти за пределы термически устойчивого диапазона.


enum PerfSettingsSubDomain: 🔗

PerfSettingsSubDomain PERF_SETTINGS_SUB_DOMAIN_COMPOSITING = 0

Производительность compositing в среде выполнения достигла нового уровня.

PerfSettingsSubDomain PERF_SETTINGS_SUB_DOMAIN_RENDERING = 1

Производительность рендеринга приложений вышла на новый уровень.

PerfSettingsSubDomain PERF_SETTINGS_SUB_DOMAIN_THERMAL = 2

Температура устройства достигла нового уровня.


enum PerfSettingsNotificationLevel: 🔗

PerfSettingsNotificationLevel PERF_SETTINGS_NOTIF_LEVEL_NORMAL = 0

Поддомен достиг уровня, на котором не требуется никаких дополнительных действий, кроме применяемых в настоящее время.

PerfSettingsNotificationLevel PERF_SETTINGS_NOTIF_LEVEL_WARNING = 1

Поддомен достиг уровня раннего предупреждения, на котором приложение должно начать упреждающие действия по смягчению последствий.

PerfSettingsNotificationLevel PERF_SETTINGS_NOTIF_LEVEL_IMPAIRED = 2

Sub-domain достиг критического уровня, при котором приложение должно начать радикальные действия по смягчению последствий.


flags HandJointFlags: 🔗

HandJointFlags HAND_JOINT_NONE = 0

Флаги не установлены.

HandJointFlags HAND_JOINT_ORIENTATION_VALID = 1

Если установлено, данные об ориентации действительны, в противном случае данные об ориентации ненадежны и не должны использоваться.

HandJointFlags HAND_JOINT_ORIENTATION_TRACKED = 2

Если установлено, данные об ориентации берутся из данных отслеживания, в противном случае данные об ориентации содержат прогнозируемые данные.

HandJointFlags HAND_JOINT_POSITION_VALID = 4

Если установлено, позиционные данные действительны, в противном случае позиционные данные ненадежны и не должны использоваться.

HandJointFlags HAND_JOINT_POSITION_TRACKED = 8

Если установлено, позиционные данные берутся из данных отслеживания, в противном случае позиционные данные содержат прогнозируемые данные.

HandJointFlags HAND_JOINT_LINEAR_VELOCITY_VALID = 16

Если установлено, наши данные о линейной скорости действительны, в противном случае данные о линейной скорости ненадежны и не должны использоваться.

HandJointFlags HAND_JOINT_ANGULAR_VELOCITY_VALID = 32

Если установлено, наши данные об угловой скорости действительны, в противном случае данные об угловой скорости ненадежны и не должны использоваться.


Описания свойств

float display_refresh_rate = 0.0 🔗

  • void set_display_refresh_rate(value: float)

  • float get_display_refresh_rate()

Частота обновления дисплея для текущего HMD. Работает только в том случае, если эта функция поддерживается средой выполнения OpenXR и после инициализации интерфейса.


bool foveation_dynamic = false 🔗

  • void set_foveation_dynamic(value: bool)

  • bool get_foveation_dynamic()

Если true, включается динамическая регулировка фокусировки. Интерфейс должен быть инициализирован, прежде чем эта функция станет доступна. Если включена, фокусировка будет автоматически регулироваться в диапазоне от low до foveation_level.

Примечание: Работает только с рендерером совместимости.


int foveation_level = 0 🔗

  • void set_foveation_level(value: int)

  • int get_foveation_level()

Уровень фокусировки, от 0 (выкл.) до 3 (высокий). Интерфейс должен быть инициализирован, прежде чем эта функция станет доступна.

Примечание: Работает только с рендерером совместимости.


float render_target_size_multiplier = 1.0 🔗

  • void set_render_target_size_multiplier(value: float)

  • float get_render_target_size_multiplier()

Множитель размера рендера для текущего HMD. Должен быть установлен до инициализации интерфейса.


float vrs_min_radius = 20.0 🔗

  • void set_vrs_min_radius(value: float)

  • float get_vrs_min_radius()

Минимальный радиус вокруг точки фокусировки, где гарантируется полное качество, если VRS используется как процент от размера экрана.

Примечание: Только для Mobile и Forward+ рендереров. Требуется, чтобы Viewport.vrs_mode был установлен на Viewport.VRS_XR.


float vrs_strength = 1.0 🔗

  • void set_vrs_strength(value: float)

  • float get_vrs_strength()

Сила, используемая для расчета карты плотности VRS. Чем больше это значение, тем заметнее VRS. Это повышает производительность за счет качества.

Примечание: Только для Mobile и Forward+ рендереров. Требуется, чтобы Viewport.vrs_mode был установлен на Viewport.VRS_XR.


Описания метода

Array get_action_sets() const 🔗

Возвращает список наборов действий, зарегистрированных в Godot (загружаемых из карты действий во время выполнения).


Array get_available_display_refresh_rates() const 🔗

Возвращает список частот обновления дисплея, поддерживаемых текущим HMD. Возвращается только в том случае, если эта функция поддерживается средой выполнения OpenXR и после инициализации интерфейса.


Vector3 get_hand_joint_angular_velocity(hand: Hand, joint: HandJoints) const 🔗

Устарело: Use XRHandTracker.get_hand_joint_angular_velocity() obtained from XRServer.get_tracker() instead.

Если включено отслеживание рук, возвращает угловую скорость сустава (joint) руки (hand), как предоставлено OpenXR. Это относительно XROrigin3D!


BitField[HandJointFlags] get_hand_joint_flags(hand: Hand, joint: HandJoints) const 🔗

Устарело: Use XRHandTracker.get_hand_joint_flags() obtained from XRServer.get_tracker() instead.

Если ручное отслеживание включено, возвращает флаги, информирующие нас о достоверности данных отслеживания.


Vector3 get_hand_joint_linear_velocity(hand: Hand, joint: HandJoints) const 🔗

Устарело: Use XRHandTracker.get_hand_joint_linear_velocity() obtained from XRServer.get_tracker() instead.

Если включено отслеживание рук, возвращает линейную скорость сустава (joint) руки (hand), как предоставлено OpenXR. Это относительно XROrigin3D без применения мирового масштаба!


Vector3 get_hand_joint_position(hand: Hand, joint: HandJoints) const 🔗

Устарело: Use XRHandTracker.get_hand_joint_transform() obtained from XRServer.get_tracker() instead.

Если включено отслеживание рук, возвращает положение сустава (joint) руки (hand), как указано в OpenXR. Это относительно XROrigin3D без применения мирового масштаба!


float get_hand_joint_radius(hand: Hand, joint: HandJoints) const 🔗

Устарело: Use XRHandTracker.get_hand_joint_radius() obtained from XRServer.get_tracker() instead.

Если включено отслеживание рук, возвращает радиус сочленения (joint) руки (hand), как предоставлено OpenXR. Это без применения мирового масштаба!


Quaternion get_hand_joint_rotation(hand: Hand, joint: HandJoints) const 🔗

Устарело: Use XRHandTracker.get_hand_joint_transform() obtained from XRServer.get_tracker() instead.

Если отслеживание рук включено, возвращает вращение сустава (joint) руки (hand), как предусмотрено OpenXR.


HandTrackedSource get_hand_tracking_source(hand: Hand) const 🔗

Устарело: Use XRHandTracker.hand_tracking_source obtained from XRServer.get_tracker() instead.

Если отслеживание рук включено и поддерживается источник отслеживания рук, получает источник данных отслеживания рук для hand.


HandMotionRange get_motion_range(hand: Hand) const 🔗

Если отслеживание рук включено и поддерживается диапазон движения, получает текущий настроенный диапазон движения для hand.


SessionState get_session_state() 🔗

Возвращает текущее состояние нашего сеанса OpenXR.


bool is_action_set_active(name: String) const 🔗

Возвращает true, если указанный набор действий активен.


bool is_eye_gaze_interaction_supported() 🔗

Возвращает возможности расширения взаимодействия взгляда.

Примечание: Это возвращает допустимое значение только после инициализации OpenXR.


bool is_foveation_supported() const 🔗

Возвращает true, если поддерживается расширение фовеации OpenXR. Интерфейс должен быть инициализирован, прежде чем функция вернет допустимое значение.

Примечание: При использовании драйвера рендеринга Vulkan для поддержки фовеации необходимо установить Viewport.vrs_mode в значение Viewport.VRS_XR.


bool is_hand_interaction_supported() const 🔗

Возвращает true, если профиль взаимодействия рук OpenXR поддерживается и включен.

Примечание: Это возвращает допустимое значение только после инициализации OpenXR.


bool is_hand_tracking_supported() 🔗

Возвращает true, если отслеживание рук OpenXR поддерживается и включено.

Примечание: Это возвращает допустимое значение только после инициализации OpenXR.


void set_action_set_active(name: String, active: bool) 🔗

Устанавливает заданный набор действий как активный или неактивный.


void set_cpu_level(level: PerfSettingsLevel) 🔗

Устанавливает уровень производительности ЦП устройства OpenXR.


void set_gpu_level(level: PerfSettingsLevel) 🔗

Устанавливает уровень производительности графического процессора (GPU) устройства OpenXR.


void set_motion_range(hand: Hand, motion_range: HandMotionRange) 🔗

Если отслеживание рук включено и поддерживается диапазон движения, устанавливает текущий настроенный диапазон движения для hand на motion_range.