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.

XRInterface

Eredita: RefCounted < Object

Ereditato da: MobileVRInterface, OpenXRInterface, WebXRInterface, XRInterfaceExtension

Classe di base per un'implementazione dell'interfaccia XR.

Descrizione

Questa classe deve essere implementata per rendere disponibile una piattaforma AR o VR a Godot e queste dovrebbero essere implementate come moduli in C++ o in GDExtension. Parte dell'interfaccia è esposta a GDScript in modo da poter rilevare, abilitare e configurare una piattaforma AR o VR.

Le interfacce dovrebbero essere scritte in modo tale che semplicemente abilitandole ci darà una configurazione funzionante. Puoi interrogare le interfacce disponibili attraverso il XRServer.

Tutorial

Proprietà

bool

ar_is_anchor_detection_enabled

false

EnvironmentBlendMode

environment_blend_mode

0

bool

interface_is_primary

false

PlayAreaMode

xr_play_area_mode

0

Metodi

int

get_camera_feed_id()

int

get_capabilities() const

StringName

get_name() const

PackedVector3Array

get_play_area() const

Projection

get_projection_for_view(view: int, aspect: float, near: float, far: float)

Vector2

get_render_target_size()

Array

get_supported_environment_blend_modes()

Dictionary

get_system_info()

TrackingStatus

get_tracking_status() const

Transform3D

get_transform_for_view(view: int, cam_transform: Transform3D)

int

get_view_count()

bool

initialize()

bool

is_initialized() const

bool

is_passthrough_enabled()

bool

is_passthrough_supported()

bool

set_environment_blend_mode(mode: EnvironmentBlendMode)

bool

set_play_area_mode(mode: PlayAreaMode)

bool

start_passthrough()

void

stop_passthrough()

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)

void

uninitialize()


Segnali

play_area_changed(mode: int) 🔗

Emesso quando l'area di gioco viene modificata. Ciò può essere il risultato del fatto che il giocatore reimposta il confine o entra in una nuova area di gioco, che cambia la modalità dell'area di gioco, che cambia la scala del mondo o che il giocatore reimposta l'orientamento delle cuffie.


Enumerazioni

enum Capabilities: 🔗

Capabilities XR_NONE = 0

Nessuna funzionalità XR.

Capabilities XR_MONO = 1

Questa interfaccia può funzionare con output di rendering normale (AR non basata su HMD).

Capabilities XR_STEREO = 2

Questa interfaccia supporta il rendering stereoscopico.

Capabilities XR_QUAD = 4

Questa interfaccia supporta il rendering di quad (non ancora supportato da Godot).

Capabilities XR_VR = 8

Questa interfaccia supporta VR.

Capabilities XR_AR = 16

Questa interfaccia supporta AR (sfondo video e tracciamento del mondo reale).

Capabilities XR_EXTERNAL = 32

Questa interfaccia invia l'output a un dispositivo esterno. Se viene utilizzata la viewport principale, l'output sullo schermo è un buffer non modificato dell'occhio sinistro o destro (allungato se la dimensione della viewport non è modificata alle stesse proporzioni di get_render_target_size()). Utilizzando un nodo viewport separato si libera la viewport principale per altri scopi.


enum TrackingStatus: 🔗

TrackingStatus XR_NORMAL_TRACKING = 0

Il tracciamento si sta comportando come previsto.

TrackingStatus XR_EXCESSIVE_MOTION = 1

Il tracciamento è ostacolato da un movimento eccessivo (il giocatore si muove più velocemente di quanto il tracciamento riesca a tenere il passo).

TrackingStatus XR_INSUFFICIENT_FEATURES = 2

Il tracciamento è ostacolato da funzionalità insufficienti, è troppo buio (per il tracciamento basato sulla telecamera), il giocatore è bloccato, ecc.

TrackingStatus XR_UNKNOWN_TRACKING = 3

Non conosciamo lo stato del tracciamento, o questa interfaccia non fornisce alcuna indicazione.

TrackingStatus XR_NOT_TRACKING = 4

Il tracciamento non funziona (la telecamera non è collegata o è oscurata, i fari sono spenti, ecc.).


enum PlayAreaMode: 🔗

PlayAreaMode XR_PLAY_AREA_UNKNOWN = 0

Modalità area di gioco non impostata o non disponibile.

PlayAreaMode XR_PLAY_AREA_3DOF = 1

L'area di gioco supporta solo il tracciamento dell'orientamento, nessun tracciamento posizionale, l'area si centrerà intorno al giocatore.

PlayAreaMode XR_PLAY_AREA_SITTING = 2

Il giocatore è seduto, il tracciamento posizionale è limitato, guardia fissa intorno al giocatore.

PlayAreaMode XR_PLAY_AREA_ROOMSCALE = 3

Il giocatore è libero di muoversi, tracciamento posizionale completo.

PlayAreaMode XR_PLAY_AREA_STAGE = 4

Uguale a XR_PLAY_AREA_ROOMSCALE ma il punto di origine è fissato al centro dello spazio fisico. In questa modalità, il ricentramento a livello di sistema potrebbe essere disabilitato, richiedendo l'uso di XRServer.center_on_hmd().

PlayAreaMode XR_PLAY_AREA_CUSTOM = 2147483647

Area di gioco personalizzata impostata da una GDExtension.


enum EnvironmentBlendMode: 🔗

EnvironmentBlendMode XR_ENV_BLEND_MODE_OPAQUE = 0

Modalità di fusione opaca. Questa è solitamente usata per i dispositivi VR.

EnvironmentBlendMode XR_ENV_BLEND_MODE_ADDITIVE = 1

Modalità di fusione additiva. Questa è solitamente usata per dispositivi AR o dispositivi VR con passthrough.

EnvironmentBlendMode XR_ENV_BLEND_MODE_ALPHA_BLEND = 2

Modalità di fusione alfa. Questa è solitamente usata per dispositivi AR o VR con capacità passthrough. Il canale alfa controlla quanta parte del passthrough è visibile. Un alfa di 0,0 significa che il passthrough è visibile e questo pixel funziona in modalità ADDITIVE. Un alfa di 1,0 significa che il passthrough non è visibile e questo pixel funziona in modalità OPAQUE.


enum VRSTextureFormat: 🔗

VRSTextureFormat XR_VRS_TEXTURE_FORMAT_UNIFIED = 0

Il formato di texture è lo stesso restituito da XRVRS.make_vrs_texture().

VRSTextureFormat XR_VRS_TEXTURE_FORMAT_FRAGMENT_SHADING_RATE = 1

Il formato di texture è lo stesso previsto dall'estensione Vulkan VK_KHR_fragment_shading_rate.

VRSTextureFormat XR_VRS_TEXTURE_FORMAT_FRAGMENT_DENSITY_MAP = 2

Il formato di texture è lo stesso previsto dall'estensione Vulkan VK_EXT_fragment_density_map.


Descrizioni delle proprietà

bool ar_is_anchor_detection_enabled = false 🔗

  • void set_anchor_detection_is_enabled(value: bool)

  • bool get_anchor_detection_is_enabled()

Su un'interfaccia AR, true se il rilevamento dell'ancoraggio è abilitato.


EnvironmentBlendMode environment_blend_mode = 0 🔗

Specifica come il XR dovrebbe fondersi nell'ambiente. Questo è specifico per alcuni dispositivi AR e passthrough in cui le immagini della telecamera sono fuse dal compositore XR.


bool interface_is_primary = false 🔗

  • void set_primary(value: bool)

  • bool is_primary()

true se questa è l'interfaccia primaria.


PlayAreaMode xr_play_area_mode = 0 🔗

La modalità dell'area di gioco per questa interfaccia.


Descrizioni dei metodi

int get_camera_feed_id() 🔗

Se questa è un'interfaccia AR che richiede la visualizzazione di un feed della telecamera come sfondo, questo metodo restituisce l'ID del feed nel CameraServer per questa interfaccia.


int get_capabilities() const 🔗

Restituisce una combinazione di flag Capabilities che forniscono informazioni sulle capacità di questa interfaccia.


StringName get_name() const 🔗

Restituisce il nome di questa interfaccia ("OpenXR", "OpenVR", "OpenHMD", "ARKit", ecc.).


PackedVector3Array get_play_area() const 🔗

Restituisce un array di vettori che rappresentano l'area di gioco fisica mappata sullo spazio virtuale attorno al punto XROrigin3D. I punti formano un poligono convesso che può essere usato per reagire o visualizzare l'area di gioco. Restituisce un array vuoto se questa funzionalità non è supportata o se le informazioni non sono ancora disponibili.


Projection get_projection_for_view(view: int, aspect: float, near: float, far: float) 🔗

Restituisce la matrice di proiezione per una vista/occhio.


Vector2 get_render_target_size() 🔗

Restituisce la risoluzione alla quale dovremmo renderizzare i nostri risultati intermedi prima che cose come la distorsione dell'obiettivo siano applicate dalla piattaforma VR.


Array get_supported_environment_blend_modes() 🔗

Restituisce un array di modalità di fusione dell'ambiente supportate, vedi EnvironmentBlendMode.


Dictionary get_system_info() 🔗

Restituisce un Dictionary con ulteriori informazioni di sistema. Le interfacce devono restituire XRRuntimeName e XRRuntimeVersion che forniscono informazioni sul runtime XR utilizzato. Possono essere fornite voci aggiuntive specifiche per un'interfaccia.

Nota: Queste informazioni potrebbero essere disponibili solo dopo che initialize() è stato chiamato con successo.


TrackingStatus get_tracking_status() const 🔗

Se supportato, restituisce lo stato del nostro tracciamento. Ciò ti consentirà di fornire feedback all'utente in caso di problemi con il tracciamento posizionale.


Transform3D get_transform_for_view(view: int, cam_transform: Transform3D) 🔗

Restituisce la trasformazione per una vista/occhio.

view è l'indice della vista/occhio.

cam_transform è la trasformazione che mappa le coordinate del dispositivo alle coordinate della scena, in genere la Node3D.global_transform dell'XROrigin3D attuale.


int get_view_count() 🔗

Restituisce il numero di viste che devono essere renderizzate per questo dispositivo. 1 per Monoscopico, 2 per Stereoscopico.


bool initialize() 🔗

Chiama questo metodo per inizializzare questa interfaccia. La prima interfaccia che viene inizializzata è identificata come interfaccia primaria e sarà utilizzata per renderizzare l'output.

Dopo aver inizializzato l'interfaccia che vuoi usare, devi abilitare la modalità AR/VR di una viewport e il rendering dovrebbe cominciare.

Nota: Devi abilitare la modalità XR sulla viewport principale per qualsiasi dispositivo che utilizzi l'output principale di Godot, come per la VR mobile.

Se lo fai per una piattaforma che gestisce il proprio output (come OpenVR), Godot mostrerà solo un occhio senza distorsioni sullo schermo. In alternativa, puoi aggiungere un nodo viewport separato alla tua scena e abilitare AR/VR su quella viewport. Sarà usato per l'output sull'HMD, lasciandoti libero di fare qualsiasi cosa tu voglia nella finestra principale, come utilizzare una telecamera separata come telecamera di spettatore o renderizzare qualcosa di completamente diverso.

Sebbene al momento non sia utilizzato, puoi attivare interfacce aggiuntive. Potresti volerlo fare se vuoi tracciare i controller da altre piattaforme. Tuttavia, al momento solo un'interfaccia può essere renderizzata su un HMD.


bool is_initialized() const 🔗

Restituisce true se questa interfaccia è stata inizializzata.


bool is_passthrough_enabled() 🔗

Deprecato: Check if environment_blend_mode is XR_ENV_BLEND_MODE_ALPHA_BLEND, instead.

Restituisce true se il passthrough è abilitato.


bool is_passthrough_supported() 🔗

Deprecato: Check that XR_ENV_BLEND_MODE_ALPHA_BLEND is supported using get_supported_environment_blend_modes(), instead.

Restituisce true se questa interfaccia supporta il passthrough.


bool set_environment_blend_mode(mode: EnvironmentBlendMode) 🔗

Imposta la modalità attiva di fusione dell'ambiente.

mode è la modalità di fusione dell'ambiente a partire dal fotogramma successivo.

Nota: Non tutti i runtime supportano tutte le modalità di fusione dell'ambiente, quindi è importante verificarlo all'avvio. Ad esempio:

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

Imposta la modalità dell'area di gioco attiva, restituirà false se la modalità non può essere utilizzata con questa interfaccia.

Nota: Modificare questa impostazione dopo che l'interfaccia è già stata inizializzata può essere fastidioso per il giocatore, quindi si consiglia di ricentrare l'HMD con XRServer.center_on_hmd() (se si passa a XR_PLAY_AREA_STAGE) o di effettuare il passaggio durante un cambio di scena.


bool start_passthrough() 🔗

Deprecato: Set the environment_blend_mode to XR_ENV_BLEND_MODE_ALPHA_BLEND, instead.

Avvia il passthrough, restituirà false se il passthrough non può essere avviato.

Nota: La viewport utilizzata per il XR deve avere uno sfondo trasparente, altrimenti il passthrough potrebbe non essere renderizzato correttamente.


void stop_passthrough() 🔗

Deprecato: Set the environment_blend_mode to XR_ENV_BLEND_MODE_OPAQUE, instead.

Arresta il passthrough.


bool supports_play_area_mode(mode: PlayAreaMode) 🔗

Chiama questo metodo per scoprire se una determinata modalità dell'area di gioco fornita è supportata da questa interfaccia.


void trigger_haptic_pulse(action_name: String, tracker_name: StringName, frequency: float, amplitude: float, duration_sec: float, delay_sec: float) 🔗

Attiva un impulso tattile su un dispositivo associato a questa interfaccia.

action_name è il nome dell'azione per questo impulso.

tracker_name è facoltativo e può essere usato per indirizzare l'impulso a un dispositivo specifico, a condizione che tale dispositivo sia associato a questo tattile.

frequency è la frequenza dell'impulso, impostata su 0.0 per far sì che il sistema utilizzi una frequenza predefinita.

amplitude è l'ampiezza dell'impulso tra 0.0 e 1.0.

duration_sec è la durata dell'impulso in secondi.

delay_sec è un ritardo in secondi prima che sia fornito l'impulso.


void uninitialize() 🔗

Disattiva l'interfaccia.