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 性能等级已在指定子域中发生改变。


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

告知设备 GPU 性能等级已在指定子域中发生改变。


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

应用已将其帧循环与运行时同步,且正在向用户渲染输出并接收用户输入。进入该状态时会发出 session_focussed

注意:这是用户能够与游戏完整交互时 OpenXR 所处的状态。

SessionState SESSION_STATE_STOPPING = 6

会话已停止。进入该状态时会发出 session_stopping

SessionState SESSION_STATE_LOSS_PENDING = 7

会话即将丢失。进入该状态时会发出 session_loss_pending

SessionState SESSION_STATE_EXITING = 8

The OpenXR instance is about to be destroyed and we're exiting. instance_exiting is emitted when we change to this state.


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

应用程序进入了非 XR 段落(锁定头部或静态屏幕),在此期间节能优先。

PerfSettingsLevel PERF_SETTINGS_LEVEL_SUSTAINED_LOW = 1

应用程序进入了稳定且低复杂度的段落,在此期间降低能耗比偶尔推迟渲染帧更重要。

PerfSettingsLevel PERF_SETTINGS_LEVEL_SUSTAINED_HIGH = 2

应用程序进入了动态且高复杂度的段落,在此期间 XR 运行时会努力在热量可持续范围内实现一致的 XR 合成和帧渲染。

PerfSettingsLevel PERF_SETTINGS_LEVEL_BOOST = 3

应用程序进入了极高复杂度的段落,在此期间 XR 运行时允许越过热量可持续范围。


enum PerfSettingsSubDomain: 🔗

PerfSettingsSubDomain PERF_SETTINGS_SUB_DOMAIN_COMPOSITING = 0

运行时的合成性能达到了新的等级。

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

子域已达到危急水平,应用程序应该开始采取严厉的缓解措施。


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()

If true, enables dynamic foveation adjustment. The interface must be initialized before this is accessible. If enabled, foveation will automatically be adjusted between low and foveation_level.

Note: Only works on the Compatibility renderer.


int foveation_level = 0 🔗

  • void set_foveation_level(value: int)

  • int get_foveation_level()

The foveation level, from 0 (off) to 3 (high). The interface must be initialized before this is accessible.

Note: Only works on the Compatibility renderer.


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 🔗

Returns a list of display refresh rates supported by the current HMD. Only returned if this feature is supported by the OpenXR runtime and after the interface has been initialized.


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

已弃用: Use XRHandTracker.get_hand_joint_angular_velocity() obtained from XRServer.get_tracker() instead.

如果启用了手部跟踪,则返回 OpenXR 提供的手(hand)的关节(joint)的角速度。这是相对于 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.

如果启用了手部跟踪,则返回 OpenXR 提供的手(hand)的关节(joint)的线速度。这是相对于没有应用世界尺度的 XROrigin3D 而言的!


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

已弃用: Use XRHandTracker.get_hand_joint_transform() obtained from XRServer.get_tracker() instead.

如果启用了手部跟踪,则返回 OpenXR 提供的手(hand)的关节(joint)的位置。这是相对于没有应用世界尺度的 XROrigin3D 而言的!


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

已弃用: Use XRHandTracker.get_hand_joint_radius() obtained from XRServer.get_tracker() instead.

如果启用了手部跟踪,则返回 OpenXR 提供的手(hand)的关节(joint)的半径。这是没有应用世界尺度的情况!


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

已弃用: Use XRHandTracker.get_hand_joint_transform() obtained from XRServer.get_tracker() instead.

如果启用了手部跟踪,则返回 OpenXR 提供的手(hand)的关节(joint)的旋转。


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 🔗

Returns true if OpenXR's foveation extension is supported. The interface must be initialized before this returns a valid value.

Note: When using the Vulkan rendering driver, Viewport.vrs_mode must be set to Viewport.VRS_XR to support foveation.


bool is_hand_interaction_supported() const 🔗

如果支持并启用了 OpenXR 的手部交互配置文件,则返回 true

注意:仅在初始化 OpenXR 后才返回有效值。


bool is_hand_tracking_supported() 🔗

如果支持且已启用 OpenXR 的手部跟踪,则返回 true

注意:这仅在 OpenXR 已被初始化后返回一个有效值。


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

将给定的动作集设置为活动或非活动。


void set_cpu_level(level: PerfSettingsLevel) 🔗

设置 OpenXR 设备的 CPU 性能等级。


void set_gpu_level(level: PerfSettingsLevel) 🔗

设置 OpenXR 设备的 GPU 性能等级。


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

如果启用了手部跟踪并且支持运动范围,请将 hand 当前配置的运动范围设置为 motion_range