XRInterface
Hereda: RefCounted < Object
Heredado por: MobileVRInterface, OpenXRInterface, WebXRInterface, XRInterfaceExtension
Clase base para la implementación de una interfaz XR.
Descripción
Esta clase debe implementarse para que una plataforma de RA o RV esté disponible para Godot. Estos módulos deben implementarse como módulos de C++ o GDExtension. Parte de la interfaz está expuesta a GDScript para que pueda detectar, habilitar y configurar una plataforma de RA o RV.
Las interfaces deben escribirse de forma que, con solo habilitarlas, obtengamos una configuración funcional. Puedes consultar las interfaces disponibles a través de XRServer.
Tutoriales
Propiedades
|
||
|
||
|
||
|
Métodos
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 |
Señales
play_area_changed(mode: int) 🔗
Emitida cuando el área de juego cambia. Esto puede ser el resultado de que el Player restablezca el límite o entre en una nueva área de juego, que el Player cambie el modo del área de juego, que cambie la escala del mundo o que el Player restablezca la orientación de su casco.
Enumeraciones
enum Capabilities: 🔗
Capabilities XR_NONE = 0
No hay capacidades XR.
Capabilities XR_MONO = 1
Esta interfaz puede funcionar con una salida de renderizado normal (AR no basada en HMD).
Capabilities XR_STEREO = 2
Esta interfaz soporta el renderizado estereoscópica.
Capabilities XR_QUAD = 4
Esta interfaz soporta el renderizado cuádruple (aún no soportado por Godot).
Capabilities XR_VR = 8
Esta interfaz soporta VR.
Capabilities XR_AR = 16
Esta interfaz soporta AR (video de fondo y seguimiento en el mundo real).
Capabilities XR_EXTERNAL = 32
Esta interfaz genera la salida a un dispositivo externo. Si se utiliza el viewport principal, la salida en pantalla es un búfer sin modificar del ojo izquierdo o derecho (estirado si el tamaño del viewport no se ajusta a la misma relación de aspecto de get_render_target_size()). El uso de un nodo de viewport independiente libera el viewportprincipal para otros fines.
enum TrackingStatus: 🔗
TrackingStatus XR_NORMAL_TRACKING = 0
El rastreo se está comportando como se esperaba.
TrackingStatus XR_EXCESSIVE_MOTION = 1
El rastreo se ve obstaculizado por un movimiento excesivo (el jugador se mueve más rápido de lo que el rastreo puede mantener).
TrackingStatus XR_INSUFFICIENT_FEATURES = 2
El rastreo se ve obstaculizado por características insuficientes, está demasiado oscuro (para el rastreo basado en la cámara), el reproductor está bloqueado, etc.
TrackingStatus XR_UNKNOWN_TRACKING = 3
No conocemos el estado del rastreo o esta interfaz no proporciona información.
TrackingStatus XR_NOT_TRACKING = 4
El rastreo no funciona (cámara no enchufada u oscurecida, faros apagados, etc.).
enum PlayAreaMode: 🔗
PlayAreaMode XR_PLAY_AREA_UNKNOWN = 0
El modo de área de juego no está configurado o no está disponible.
PlayAreaMode XR_PLAY_AREA_3DOF = 1
El área de juego solo admite el seguimiento de la orientación, no el seguimiento posicional, el área se centrará alrededor del Player.
PlayAreaMode XR_PLAY_AREA_SITTING = 2
El Player está en posición sentada, seguimiento posicional limitado, guardián fijo alrededor del Player.
PlayAreaMode XR_PLAY_AREA_ROOMSCALE = 3
El Player es libre de moverse, seguimiento posicional completo.
PlayAreaMode XR_PLAY_AREA_STAGE = 4
Igual que XR_PLAY_AREA_ROOMSCALE pero el punto de origen está fijado al centro del espacio físico. En este modo, el recentrado a nivel de sistema puede estar deshabilitado, requiriendo el uso de XRServer.center_on_hmd().
PlayAreaMode XR_PLAY_AREA_CUSTOM = 2147483647
Área de juego personalizada establecida por una GDExtension.
enum EnvironmentBlendMode: 🔗
EnvironmentBlendMode XR_ENV_BLEND_MODE_OPAQUE = 0
Modo de mezcla opaco. Se utiliza normalmente para dispositivos de RV.
EnvironmentBlendMode XR_ENV_BLEND_MODE_ADDITIVE = 1
Modo de mezcla aditivo. Se utiliza normalmente para dispositivos de RA o dispositivos de RV con passthrough.
EnvironmentBlendMode XR_ENV_BLEND_MODE_ALPHA_BLEND = 2
Modo de mezcla alfa. Se suele utilizar para dispositivos de RA o RV con capacidades de passthrough. El canal alfa controla la cantidad de passthrough que es visible. Un alfa de 0.0 significa que el passthrough es visible y este píxel funciona en modo ADITIVO. Un alfa de 1.0 significa que el passthrough no es visible y este píxel funciona en modo OPACO.
enum VRSTextureFormat: 🔗
VRSTextureFormat XR_VRS_TEXTURE_FORMAT_UNIFIED = 0
El formato de la textura es el mismo que el devuelto por XRVRS.make_vrs_texture().
VRSTextureFormat XR_VRS_TEXTURE_FORMAT_FRAGMENT_SHADING_RATE = 1
El formato de textura es el mismo que espera la extensión de Vulkan VK_KHR_fragment_shading_rate.
VRSTextureFormat XR_VRS_TEXTURE_FORMAT_FRAGMENT_DENSITY_MAP = 2
El formato de textura es el mismo que espera la extensión de Vulkan VK_EXT_fragment_density_map.
Descripciones de Propiedades
bool ar_is_anchor_detection_enabled = false 🔗
En una interfaz AR, true si la detección de anclas está activada.
EnvironmentBlendMode environment_blend_mode = 0 🔗
bool set_environment_blend_mode(mode: EnvironmentBlendMode)
EnvironmentBlendMode get_environment_blend_mode()
Especifica cómo XR debe mezclar el entorno. Esto es específico para ciertos dispositivos de RA y passthrough donde las imágenes de la cámara son mezcladas por el compositor de XR.
bool interface_is_primary = false 🔗
true si esta es la interfaz primaria.
PlayAreaMode xr_play_area_mode = 0 🔗
bool set_play_area_mode(mode: PlayAreaMode)
PlayAreaMode get_play_area_mode()
El modo de área de juego para esta interfaz.
Descripciones de Métodos
Si se trata de una interfaz AR que requiere mostrar una alimentación de la cámara como fondo, este método devuelve el ID de la alimentación en el CameraServer para esta interfaz.
int get_capabilities() const 🔗
Devuelve una combinación de flags Capabilities que proporcionan información sobre las capacidades de esta interfaz.
StringName get_name() const 🔗
Devuelve el nombre de esta interfaz ("OpenXR", "OpenVR", "OpenHMD", "ARKit", etc.).
PackedVector3Array get_play_area() const 🔗
Devuelve un array de vectores que representan el área de juego física mapeada al espacio virtual alrededor del punto XROrigin3D. Los puntos forman un polígono convexo que puede ser utilizado para reaccionar o visualizar el área de juego. Devuelve un array vacío si esta característica no es soportada o si la información no está todavía disponible.
Projection get_projection_for_view(view: int, aspect: float, near: float, far: float) 🔗
Devuelve la matriz de proyección para una vista/ojo.
Vector2 get_render_target_size() 🔗
Devuelve la resolución a la que deberíamos renderizar nuestros resultados intermedios antes de que cosas como la distorsión de la lente sean aplicadas por la plataforma VR.
Array get_supported_environment_blend_modes() 🔗
Devuelve un array de los modos de mezcla de entorno soportado. Véase EnvironmentBlendMode.
Dictionary get_system_info() 🔗
Devuelve un Dictionary con información extra del sistema. Se espera que las interfaces devuelvan XRRuntimeName y XRRuntimeVersion proporcionando información sobre el tiempo de ejecución XR utilizado. Se pueden proporcionar entradas adicionales específicas para una interfaz.
Nota: Esta información puede estar disponible solo después de que initialize() haya sido llamado con éxito.
TrackingStatus get_tracking_status() const 🔗
Si se apoya, devuelve el estado de nuestro rastreo. Esto le permitirá proporcionar información al usuario sobre si hay problemas con el rastreo posicional.
Transform3D get_transform_for_view(view: int, cam_transform: Transform3D) 🔗
Devuelve la transformación para una vista/ojo.
view es el índice de la vista/ojo.
cam_transform es la transformación que mapea las coordenadas del dispositivo a las coordenadas de la escena, típicamente el Node3D.global_transform del XROrigin3D actual.
Devuelve la cantidad de vistas que deben representarse para este dispositivo. 1 para monoscópico, 2 para estereoscópico.
Llama a esto para inicializar esta interfaz. La primera interfaz que se inicializa se identifica como la interfaz principal y se utilizará para la salida de renderizado.
Después de inicializar la interfaz que quieras usar, necesitas habilitar el modo AR/VR de un viweport y el renderizado debería comenzar.
Nota: Debes habilitar el modo XR en el viewportprincipal para cualquier dispositivo que utilice la salida principal de Godot, como por ejemplo para la RV móvil.
Si haces esto para una plataforma que gestiona su propia salida (como OpenVR), Godot mostrará un solo ojo sin distorsión en la pantalla. Alternativamente, puedes añadir un nodo de viewport independiente a tu escena y habilitar AR/VR en esa ventana gráfica. Se utilizará para la salida al HMD, dejándote libertad para hacer lo que quieras en la ventana principal, como usar una cámara separada como cámara de espectador o renderizar algo completamente diferente.
Si bien actualmente no se utiliza, puedes activar interfaces adicionales. Es posible que desees hacer esto si quieres rastrear mandos de otras plataformas. Sin embargo, en este momento solo una interfaz puede renderizar en un HMD.
Devuelve true si esta interfaz ha sido inicializada.
bool is_passthrough_enabled() 🔗
Obsoleto: Check if environment_blend_mode is XR_ENV_BLEND_MODE_ALPHA_BLEND, instead.
Devuelve true si el passthrough está activado.
bool is_passthrough_supported() 🔗
Obsoleto: Check that XR_ENV_BLEND_MODE_ALPHA_BLEND is supported using get_supported_environment_blend_modes(), instead.
Devuelve true si esta interfaz admite el passthrough.
bool set_environment_blend_mode(mode: EnvironmentBlendMode) 🔗
Establece el modo de mezcla de entorno activo.
mode es el modo de mezcla de entorno a partir del siguiente fotograma.
Nota: No todos los tiempos de ejecución admiten todos los modos de mezcla de entorno, por lo que es importante comprobar esto al inicio. Por ejemplo:
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) 🔗
Establece el modo de área de juego activo, devolverá false si el modo no se puede utilizar con esta interfaz.
Nota: Cambiar esto después de que la interfaz ya se haya inicializado puede ser chocante para el jugador, por lo que se recomienda recentrar en el HMD con XRServer.center_on_hmd() (si se cambia a XR_PLAY_AREA_STAGE) o hacer el cambio durante un cambio de escena.
Obsoleto: Set the environment_blend_mode to XR_ENV_BLEND_MODE_ALPHA_BLEND, instead.
Inicia el passthrough, devolverá false si el passthrough no pudo iniciarse.
Nota: El viewport usado para XR debe tener un fondo transparente, de lo contrario, el passthrough podría no renderizarse correctamente.
void stop_passthrough() 🔗
Obsoleto: Set the environment_blend_mode to XR_ENV_BLEND_MODE_OPAQUE, instead.
Detiene el passthrough.
bool supports_play_area_mode(mode: PlayAreaMode) 🔗
Llama a esto para averiguar si un modo de área de juego dado es soportado por esta interfaz.
void trigger_haptic_pulse(action_name: String, tracker_name: StringName, frequency: float, amplitude: float, duration_sec: float, delay_sec: float) 🔗
Dispara un pulso háptico en un dispositivo asociado con esta interfaz.
action_name es el nombre de la acción para este pulso.
tracker_name es opcional y se puede utilizar para dirigir el pulso a un dispositivo específico siempre que el dispositivo esté vinculado a este háptico.
frequency es la frecuencia del pulso, establecida en 0.0 para que el sistema utilice una frecuencia predeterminada.
amplitude es la amplitud del pulso entre 0.0 y 1.0.
duration_sec es la duración del pulso en segundos.
delay_sec es un retraso en segundos antes de que se dé el pulso.
void uninitialize() 🔗
Apaga la interfaz.