Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
OpenXRInterface
继承: XRInterface < RefCounted < Object
OpenXR 接口。
描述
OpenXR 接口允许 Godot 与 OpenXR 运行时进行交互,并使创建 XR 体验和游戏成为可能。
由于 OpenXR 的需要,该接口的工作方式与其他基于插件的 XR 接口略有不同。它需要在 Godot 启动时被初始化。若需要启用 OpenXR,相关设置可以在游戏项目设置中的 XR 标题下找到。你确实需要标记一个视口以与 XR 一起使用,以便 Godot 知道应该将哪个渲染结果输出到头戴式设备。
教程
属性
|
||
|
||
|
||
|
||
|
||
|
||
|
方法
get_action_sets() const |
|
get_hand_joint_angular_velocity(hand: Hand, joint: HandJoints) const |
|
BitField[HandJointFlags] |
get_hand_joint_flags(hand: Hand, joint: HandJoints) const |
get_hand_joint_linear_velocity(hand: Hand, joint: HandJoints) const |
|
get_hand_joint_position(hand: Hand, joint: HandJoints) const |
|
get_hand_joint_radius(hand: Hand, joint: HandJoints) const |
|
get_hand_joint_rotation(hand: Hand, joint: HandJoints) const |
|
get_hand_tracking_source(hand: Hand) const |
|
get_motion_range(hand: Hand) const |
|
is_action_set_active(name: String) const |
|
is_foveation_supported() const |
|
is_hand_interaction_supported() const |
|
is_user_presence_supported() const |
|
is_user_present() const |
|
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 输入。
user_presence_changed(is_user_present: bool) 🔗
当用户在场状态值发生改变时发出信号。
注意: 在应用程序启动和关闭期间不会发出此信号。开发者应假设用户在启动时获得在场状态,在关闭时失去在场状态。
枚举
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
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
应用程序进入了非 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 🔗
当前 HMD 的显示刷新率。仅当 OpenXR 运行时支持该功能并且接口已被初始化后才会有效。
bool foveation_dynamic = false 🔗
如果为 true,则启用动态注视点调整。该接口必须在访问该功能之前初始化。如果启用,注视点将在“低”和foveation_level之间自动调整。
注视点级别,从 0(关闭)到 3(高)。该接口必须在访问该功能之前初始化。
bool foveation_with_subsampled_images = false 🔗
如果设置为 true,将启用带注视点渲染(foveation)的子采样图像,这可以在 Vulkan 图形接口上带来性能提升。
float render_target_size_multiplier = 1.0 🔗
当前 HMD 的渲染大小乘数。必须在接触初始化之前设置。
如果 VRS 用作屏幕大小的百分比,则焦点周围可保证完全质量的最小半径。
注意:仅限 Mobile 和 Forward+ 渲染器。需要将 Viewport.vrs_mode 设置为 Viewport.VRS_XR。
用于计算 VRS 密度图的强度。该值越大,VRS 越明显。这会以牺牲质量为代价来提高性能。
注意:仅限 Mobile 和 Forward+ 渲染器。需要将 Viewport.vrs_mode 设置为 Viewport.VRS_XR。
方法说明
Array get_action_sets() const 🔗
返回向 Godot 注册的动作集的列表(在运行时从动作映射加载)。
Array get_available_display_refresh_rates() const 🔗
返回当前头戴式显示器支持的显示刷新率列表。仅当 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.
如果启用了手部跟踪,则返回 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 🔗
如果支持 OpenXR 的注视点扩展,则返回 true。该接口必须在该方法返回有效值之前初始化。
注意:使用 Vulkan 渲染驱动程序时,必须将 Viewport.vrs_mode 设置为 Viewport.VRS_XR 才能支持注视点。
bool is_hand_interaction_supported() const 🔗
如果支持并启用了 OpenXR 的手部交互配置文件,则返回 true。
注意:仅在初始化 OpenXR 后才返回有效值。
bool is_hand_tracking_supported() 🔗
如果支持且已启用 OpenXR 的手部跟踪,则返回 true。
注意:这仅在 OpenXR 已被初始化后返回一个有效值。
bool is_user_presence_supported() const 🔗
如果 OpenXR 的用户存在(user presence)扩展受支持且已启用,则返回 true。
注意: 此方法只有在 OpenXR 初始化完成之后,才会返回有效的值。
bool is_user_present() const 🔗
如果系统检测到用户在 XR(扩展现实)体验中处于“在场”状态,则返回 true。
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。