Ottimizza gli asset dell'ambiente

A partire dalla release alpha04 delle librerie Jetpack XR, sono disponibili aggiornamenti importanti su come fornire asset dell'ambiente spaziale per un rendimento e una 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 del suolo, gli oggetti nelle vicinanze) e la texture visiva principale della skybox che vedono gli utenti.
  • Un file ZIP separato contenente informazioni sull'illuminazione basata sulle immagini (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 visuale dello skybox stessa.

Perché questo approccio?

Questa struttura degli asset aggiornata offre i seguenti vantaggi:

  • Dimensioni dei file più piccole: rispetto ai metodi precedenti, come l'utilizzo di un singolo file HDR skybox ad alta risoluzione sia per la visualizzazione che per le informazioni sull'illuminazione, questo approccio riduce le dimensioni dei file.
  • Miglioramento delle prestazioni:la separazione della texture skybox visiva (incorporata nel file glb) dai dati IBL (nel file ZIP) consente di ottimizzare ciascun componente in modo indipendente. Ciò si traduce in una larghezza di banda di lettura della memoria delle texture inferiore e in un minore consumo energetico.
  • Illuminazione ottimizzata:l'utilizzo di una risorsa skybox di 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 scoprire di più su come aggiungere un ambiente spaziale alla 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 includi la texture visiva della tua skybox. Per la geometria, dovresti provare a mantenere le dimensioni dei file pari o inferiori a 80 MB.

Per farlo, esistono diverse opportunità per rendere il tuo ambiente più efficiente mantenendo un'alta qualità. Ad esempio, la densità della mesh deve essere maggiore vicino all'utente e puoi diminuirla per le mesh più lontane.

  • Distanza di visualizzazione:la distanza di visualizzazione per gli ambienti in Android XR è di 200 m dal punto di vista dell'utente e la texture della scatola del cielo deve rispettare questo vincolo. Questo offre un'esperienza ottimale perché la parallasse diventa distinta a quella distanza.
  • Altezza utente: la geografia può variare, ma posiziona l'utente su un pendio di circa 1,5 metri di altezza per evitare il ritaglio con elementi dell'interfaccia utente più grandi nelle app.

  • Numero di poligoni:presta attenzione al numero di poligoni nei file glb, poiché un numero elevato può comportare un consumo di energia non necessario. Ogni patch di geometria non deve superare i 10.000 vertici.

  • Compressione KTX: ottimizza le prestazioni della GPU del file glb assicurandoti che utilizzi mipmap e texture KTX2.

Che cosa ti serve per ottimizzare l'IBL

Scarica l'utilità a riga di comando cmgen:

  • Puoi trovare la release più recente nel repository di Filament.
  • Individua il file .tgz contenente la versione predefinita 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 l'IBL:

  • Un file EXR a bassa risoluzione che corrisponda alla texture della skybox
    • L'input della texture skybox deve essere un file EXR. Sebbene cmgen supporti altri formati, si consigliano i file EXR perché forniscono le informazioni HDR (High Dynamic Range) fondamentali per fornire un'illuminazione indiretta di alta qualità. L'utilizzo di altri formati come PNG comporta un'illuminazione meno precisa.
    • L'immagine di origine (EXR) deve avere proporzioni di 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 è utile per il rendimento. Per le immagini in sfondo, i risultati visivi per l'utente sono molto simili agli asset con risoluzione molto più elevata.
  • Un'immagine png nera uniforme
    • Questo asset deve avere anche proporzioni 2:1. Utilizza una dimensione di 100 x 50 pixel.
    • Questa serve da texture ottimizzata per accompagnare l'illuminazione globale. Gli utenti non la vedranno, quindi ci concentriamo sull'ottimizzazione dell'asset in base al rendimento.

Di seguito è riportato un esempio di utilizzo di cmgen per creare il file ZIP per IBL. In questo esempio utilizziamo i file di input denominati my_360_skybox_1024_x_512.exr e black_skybox.png e creiamo 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 ..