Nell'SDK Jetpack XR, gli ambienti spaziali sono ambienti immersivi che puoi aggiungere alla tua app per personalizzare lo sfondo della scena virtuale. Gli ambienti spaziali sono visibili solo quando un'app è in modalità Spazio completo.
Panoramica degli ambienti spaziali
Un SpatialEnvironment
viene utilizzato per gestire le preferenze dell'ambiente spaziale di un'app. È una composizione di un'immagine skybox autonoma e di una geometria specificata in glTF. È possibile impostare una sola immagine skybox e un solo file di geometria glTF alla volta.
Una skybox rappresenta l'immagine che un utente vede intorno a sé nella scena virtuale, creando l'illusione di un ambiente di sfondo distante, come un cielo, montagne o un paesaggio urbano. L'utente non può interagire con la skybox né avvicinarsi. L'SDK Jetpack XR supporta le skybox sferiche nello standard OpenEXR. Oltre a fornire uno sfondo immersivo per la tua app, una skybox EXR fornisce anche l'illuminazione basata su immagini (IBL) ai modelli 3D caricati dalla tua app. Per ulteriori informazioni, consulta la guida per lavorare con i modelli 3D.
Gli ambienti spaziali possono includere anche contenuti di geometria 3D nello standard glTF. La geometria dell'ambiente caricata in questo modo verrà allineata automaticamente al pavimento del mondo reale. La geometria dell'ambiente è un ottimo modo per aggiungere realismo al tuo ambiente tramite elementi in primo piano e a metà piano che si fondono con la skybox con l'effetto parallasse.
Nella guida alla progettazione per gli ambienti spaziali, puoi scoprire i diversi tipi di asset che puoi utilizzare per creare ambienti spaziali e come creare ambienti spaziali sicuri e piacevoli.
Puoi impostare l'ambiente spaziale della tua app su una di queste tre configurazioni:
- Una combinazione di un'immagine skybox e una geometria glTF.
- Una superficie passthrough, in cui l'ambiente visualizzato è un feed in diretta delle videocamere rivolte verso l'esterno del dispositivo. A opacità completa, questa superficie passthrough occlude completamente la skybox e la geometria.
- Una configurazione mista, in cui la superficie passthrough non è completamente opaca né completamente trasparente. In questo caso, la superficie passthrough diventa semitrasparente e si fonde con la skybox e la geometria dietro di essa.
Funzionalità spaziali per ambienti spaziali
SpatialCapabilities
: rappresenta le funzionalità spaziali della sessione corrente. Alcune funzionalità spaziali sono pertinenti per gli ambienti spaziali.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
: indica se l'attività può attivare o disattivare il passthrough al momento.SPATIAL_CAPABILITY_APP_ENVIRONMENT
: indica se l'attività può impostare il proprio ambiente spaziale al momento.
Importare e caricare le risorse dell'ambiente spaziale
Le risorse glTF ed EXR per gli ambienti spaziali vengono caricate in modo asincrono utilizzando la classe Session
.
Crea una risorsa glTF
Una risorsa glTF può essere creata come GltfModel
, dove glTF viene caricato
da un file locale. Un GltfModel
può essere utilizzato come parte di un ambiente di app spaziali.
val environmentGeometry = GltfModel.create(session, Paths.get("DayGeometry.glb"))
Crea una risorsa immagine EXR
Una risorsa immagine EXR può essere creata come ExrImage
, dove l'EXR viene
caricato da un file locale. Un ExrImage
può essere utilizzato con cmgen
per creare un file ZIP
dell'IBL per le tue skybox. Per ulteriori dettagli, consulta la nostra guida all'ottimizzazione degli asset
dell'ambiente.
val lightingForSkybox = ExrImage.createFromZip(session, Paths.get("BlueSkyboxLighting.zip"))
Imposta il SpatialEnvironmentPreference
per la tua app
La proprietà preferredSpatialEnvironment
controlla l'ambiente
spaziale preferito per un'app. Quando questa proprietà viene utilizzata per impostare una preferenza, non
causa una modifica immediata a meno che isPreferredSpatialEnvironmentActive
non sia già true
. Una volta che il dispositivo entra in uno stato in cui lo sfondo XR può essere
modificato e la funzionalità SpatialCapabilities.SPATIAL_CAPABILITY_APP_ENVIRONMENT
è disponibile, l'ambiente spaziale preferito per l'applicazione
viene visualizzato automaticamente.
Se imposti la preferenza su null
, l'ambiente spaziale preferito
per l'app verrà disattivato e verrà visualizzato l'ambiente di sistema predefinito.
Se il valore SpatialEnvironmentPreference
specificato non è null, ma tutte le sue proprietà sono null, l'ambiente spaziale sarà costituito da una skybox nera e nessuna geometria.
Per ricevere una notifica delle modifiche allo stato di SpatialEnvironment
, utilizza
addOnSpatialEnvironmentChangedListener
.
Utilizzo di base
Questo snippet di codice crea le risorse di geometria dell'ambiente e skybox e poi imposta la preferenza per l'ambiente spaziale. Questa preferenza verrà memorizzata e verrà applicata quando l'app avrà la possibilità di impostare il proprio ambiente.
val spatialEnvironmentPreference = SpatialEnvironment.SpatialEnvironmentPreference(lightingForSkybox, environmentGeometry) session.scene.spatialEnvironment.preferredSpatialEnvironment = spatialEnvironmentPreference if (session.scene.spatialEnvironment.isPreferredSpatialEnvironmentActive) { // The environment was successfully updated and is now visible, and any listeners // specified using addOnSpatialEnvironmentChangedListener will be notified. } else { // The passthrough opacity preference was successfully set, but not // immediately visible. The passthrough opacity change will be applied // when the activity has the SPATIAL_CAPABILITY_APP_ENVIRONMENT capability. // Then, any listeners specified using addOnSpatialEnvironmentChangedListener // will be notified. }
Utilizzo avanzato
Per casi d'uso più avanzati in cui è necessario un controllo più preciso sull'ambiente,
puoi incorporare controlli SpatialCapabilities
e implementare un
addOnSpatialEnvironmentChangedListener
per determinare quando impostare
la preferenza per l'ambiente spaziale.
Imposta PassthroughOpacityPreference per l'ambiente spaziale della tua app
Uno dei componenti dello sfondo virtuale immersivo di un'app è una superficie passthrough. In questo caso, lo sfondo visualizzato è un feed in diretta delle videocamere esterne del dispositivo.
setPassthroughOpacityPreference
viene utilizzato per impostare l'opacità passthrough preferita per un'app. Questo metodo imposta solo una preferenza e non causa una modifica immediata, a meno che non sia disponibile la funzionalità SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
. Una volta che il dispositivo entra in uno stato in cui l'opacità passthrough può essere
modificata e la funzionalità SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
è disponibile, l'opacità passthrough preferita per l'applicazione
verrà applicata automaticamente.
I valori per la preferenza di opacità passthrough vanno da 0.0f
(opacità zero,
dove la superficie passthrough non è visibile) a 1.0f
(opacità completa, dove la
superficie passthrough nasconde l'ambiente spaziale). Il
parametro setPassthroughOpacityPreference
è un float che ammette valori nulli. Se imposti il valore su null, l'app non ha preferenze di opacità passthrough e
restituisce il controllo passthrough al sistema.
Utilizzo di base
Questo snippet di codice imposta la preferenza di opacità passthrough. Questa preferenza verrà memorizzata e applicata quando l'app avrà la possibilità di impostare l'opacità passthrough.
session.scene.spatialEnvironment.preferredPassthroughOpacity = 1.0f if (session.scene.spatialEnvironment.currentPassthroughOpacity == 1.0f) { // The passthrough opacity request succeeded and should be visible now, and any listeners // specified using addOnPassthroughOpacityChangedListener will be notified. } else { // The passthrough opacity preference was successfully set, but not // immediately visible. The passthrough opacity change will be applied // when the activity has the // SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL capability. // Then, any listeners specified using addOnPassthroughOpacityChangedListener // will be notified. }
Utilizzo avanzato
Per casi d'uso più avanzati in cui è necessario un controllo più preciso dell'opacità
del passthrough, puoi incorporare i controlli SpatialCapabilities
e aggiungere un listener
utilizzando addOnPassthroughOpacityChangedListener
per determinare quando impostare
la preferenza di opacità del passthrough.
Ottimizzazione degli asset
Quando crei asset per impostare il SpatialEnvironment
dei tuoi utenti, assicurati che
gli asset raggiungano una risoluzione di alta qualità mantenendo una dimensione
ragionevole del file. Per saperne di più, consulta le nostre indicazioni sull'ottimizzazione degli asset dell'ambiente.
Determinare l'opacità passthrough attuale
val currentPassthroughOpacity = session.scene.spatialEnvironment.currentPassthroughOpacity