A partire dalla release alpha04 delle librerie Jetpack XR, sono stati apportati aggiornamenti importanti al modo in cui devi fornire gli asset dell'ambiente spaziale per prestazioni e qualità visiva ottimali. Queste modifiche hanno un impatto sulla compatibilità e richiedono l'aggiornamento delle app esistenti che impostano ambienti spaziali.
Per fornire ambienti spaziali, sono necessari due componenti principali:
- Un file .glb o .gltf per la geometria dell'ambiente (ad esempio, il piano di terra, gli oggetti vicini) e la texture della skybox visiva principale che gli utenti vedono.
- Un file ZIP separato contenente le informazioni di Image Based Lighting (IBL) generate da un'immagine EXR ad alta gamma dinamica utilizzando lo strumento cmgen. Il file ZIP viene utilizzato per i calcoli di illuminazione, ad esempio i riflessi sugli oggetti, e non per la texture della skybox visiva stessa.
Perché questo approccio?
Questa struttura degli asset aggiornata offre i seguenti vantaggi:
- Dimensioni dei file più piccole: rispetto ai metodi precedenti, ad esempio l'utilizzo di un singolo file skybox HDR ad alta risoluzione sia per la visualizzazione visiva sia per le informazioni sull'illuminazione, questo approccio riduce le dimensioni dei file.
- Prestazioni migliorate: la separazione della texture della skybox visiva (integrata nel file glb) dai dati IBL (nel file ZIP) consente di ottimizzare ogni componente in modo indipendente. Ciò comporta una larghezza di banda di lettura della memoria delle texture inferiore e un consumo energetico inferiore.
- Illuminazione ottimizzata: l'utilizzo di una risorsa skybox a risoluzione inferiore specificamente per la mappa di illuminazione è vantaggioso per le prestazioni senza influire in modo significativo sui risultati visivi dell'illuminazione sugli oggetti.
Per saperne di più sull'aggiunta di un ambiente spaziale nella tua app, consulta la nostra guida sull' aggiunta di ambienti all'app.
Ottimizzare il file glb

Il file glb rappresenta la geometria intorno all'utente e include la texture visiva della skybox. Per la geometria, devi provare a mantenere le dimensioni dei file pari o inferiori a 80 MB.
Per farlo, hai a disposizione diverse opportunità per rendere il tuo ambiente più efficiente mantenendo una qualità elevata. Ad esempio, la densità della mesh deve essere la più densa vicino all'utente e puoi diminuirla per le mesh più lontane dall'utente.
- Distanza di visualizzazione: la distanza di visualizzazione per gli ambienti in Android XR è di 200 m dal punto dell'utente e la texture della skybox deve rispettare questo vincolo. In questo modo si ottiene un'esperienza ottimale perché la parallasse diventa indiscernibile a quella distanza.
Altezza dell'utente: la geografia può variare, ma posiziona l'utente su un tumulo a circa 1,5 metri di altezza per evitare il clipping con gli elementi dell'interfaccia utente più grandi nelle app.
Conteggio dei poligoni: fai attenzione al conteggio dei poligoni nei file glb, in quanto un conteggio elevato può comportare un consumo energetico non necessario. Ogni patch di geometria non deve superare i 10.000 vertici.
Compressione KTX: ottimizza il rendimento della GPU del file glb assicurandoti che utilizzi mipmap e texture ktx2.
Cosa ti serve per ottimizzare l'IBL
Scarica l'utilità della riga di comando cmgen:
- Puoi trovare l'ultima release nel repository di Filament.
- Trova il file .tgz contenente la versione precompilata di cmgen per la tua piattaforma ed estrailo.
- Lo strumento precompilato si trova nella directory /bin del file .tgz estratto.
Asset da preparare per generare il file ZIP per IBL:
- Un file EXR a bassa risoluzione che corrisponda alla texture della skybox
- L'input della texture della skybox deve essere un file EXR. Sebbene cmgen supporti altri formati, i file EXR sono consigliati perché forniscono le informazioni ad alta gamma dinamica fondamentali per fornire IBL di alta qualità. L'utilizzo di altri formati come PNG comporta un'illuminazione meno precisa.
- L'immagine di origine (EXR) deve avere proporzioni 2:1 e dimensioni che siano una potenza di 2. Utilizza un file EXR di 1024 x 512 pixel. Nota: potrebbe sembrare che 1024 x 512 sia una risoluzione troppo bassa, ma è vantaggiosa per il rendimento. Per IBL, i risultati visivi per l'utente sono molto simili agli asset IBL con risoluzione molto più elevata.
- Un file PNG nero pieno
- Anche questo asset deve avere proporzioni 2:1. Utilizza una dimensione di 100 x 50 pixel.
- Questo funge da texture ottimizzata per accompagnare l'IBL. Gli utenti non lo guarderanno, quindi ci concentriamo sull'ottimizzazione dell'asset per il rendimento.

Di seguito è riportato un esempio di utilizzo di cmgen per creare il file ZIP per IBL.
L'esempio utilizza i file di input denominati my_360_skybox_1024_x_512.exr e black_skybox.png per creare un file ZIP denominato my_ibl.zip.
# Produce black cubemaps for the texture of the IBL asset.
./cmgen --format=rgb32f --size=128 --extract=./skybox_ibl ./black_skybox.png
# Produce lighting cubemaps and a Spherical Harmonics from EXR
./cmgen --format=rgb32f --size=128 --deploy=./skybox_ibl --ibl-ld=. --ibl-samples=1024 --extract-blur=0.0 --sh-irradiance --sh-shader --sh-output=./skybox_ibl/sh.txt ./my_360_skybox_1024_x_512.exr
# Copy all of the black cubemaps into the other folder.
cp -rf ./skybox_ibl/black_skybox/* ./skybox_ibl/my_360_skybox_1024_x_512
# Rename the directory to reflect that these are old assets.
mv ./skybox_ibl/black_skybox ./skybox_ibl/black_skybox_old
# Rename the directory to reflect that these are your cubemap assets.
mv ./skybox_ibl/my_360_skybox_1024_x_512 ./skybox_ibl/black_skybox
# Change into the child directory.
cd ./skybox_ibl
# Zip all of the cubemap and the Spherical Harmonics assets together.
zip -q my_ibl.zip black_skybox/*
# Return to the directory you started in.
cd ..