Come ottimizzare gli asset per la realtà virtuale: l'esempio di Stardust

Come ottimizzare gli asset per la realtà virtuale: l'esempio di Stardust

Dagli hero assets al background, ottimizzare i modelli è una prassi nello sviluppo di qualsiasi esperienza di realtà virtuale. La necessità è ancora più evidente quando il dispositivo di output è un visore stand alone come per esempio Oculus Quest 2.
Qual è quindi il metodo migliore per gestire modelli di grandi dimensioni mantenendo elevate prestazioni in VR? Ne parliamo in questo articolo riportando come esempio una sfida che ci ha visti coinvolti recentemente: la realizzazione di una futuristica stazione spaziale per il mondo del fashion.

 

1. Suddividere l’esperienza in scene.

Il peso poligonale degli assets 3D incide notevolmente sulle prestazioni del visore VR, è essenziale quindi evitare di superare un certo limite di poligoni nella stessa scena per mantenere alta la fluidità e il comfort dell’utente.
All’interno di un’esperienza VR spostandoci con la testa inquadriamo diverse sezioni di assets; anche gli oggetti nascosti dietro ad altri contribuiscono alla somma totale dei poligoni, definire le scene dell’esperienza ci permetterà quindi di spartire il peso poligonale.

Come identificare una scena e la sua transizione. 

Una modifica radicale dell’ambiente circostante spesso ci suggerisce un cambio di scena, al contrario se l’utente vedrà spegnersi lo scenario e al ritorno si troverà nella situazione precedente la transizione verrà facilmente percepita come fastidiosa e ingiustificata.
È quindi importante inserire questo passaggio quando vi è una traversata percepita come una porta o un portale, oppure quando viene completata una sfida o termina la narrazione della scena.

 

 

Nel nostro caso l’esperienza Stardust prevedeva un percorso di esplorazione multisensoriale: l’utente percorre i diversi ambienti stimolato da sensazioni e atmosfere ispirate al catalogo Starlight 2021. Il tragitto lineare ci ha permesso di “accendere” solo la stanza in cui l’utente navigava, nascondendo al contempo le altre e di conseguenza tutto il loro peso poligonale.

 

2. Progettare la modellazione definendo la gerarchia degli asset.

Dopo aver definito le scene non resta che passare alla progettazione dei modelli. Un’esperienza in VR è un vero e proprio mondo popolato da diversi asset 3D, pensare di poter mantenere la stessa qualità poligonale per ognuno di essi risulterebbe irrealistico dato che ridurrebbe le prestazioni dell’esperienza fruita da visore.
Prima di iniziare ad approcciarsi alla creazione degli assets è quindi fondamentale definire una gerarchia; per stilare la lista sarà necessario avere ben chiaro il design dell’esperienza VR, ovvero gli elementi che la compongono e come si sviluppa.
Per esempio in uno shooter game avere un bersaglio high-poly, in alta qualità, è totalmente inutile se si troverà lontano dal player, che sarà invece legittimato a svalutare il gioco se il revolver che utilizza, posto costantemente di fronte alla sua visuale, ha una qualità pessima. Questo esempio è utile per capire che è la qualità percepita dal player quello che veramente ci interessa. Ma quindi, come classifichiamo l’importanza degli assets presenti in una scena? Secondo due passaggi: la loro posizione nell’ambiente e la relazione che hanno con il player.

 

Step 1: Classificare gli assets in base alla posizione nell’ambiente.

In corrispondenza alla complessità dell’esperienza potrebbe essere utile avere più suddivisioni ma, in generale, possiamo definire quattro macro categorie di riferimento:

  1. Background assets: oggetti lontani come montagne o lo skyline di una città. Questi elementi non necessitano più di qualche triangolo e possono essere posizionati direttamente su un quad come png con canale alpha, a volte è possibile anche inserirli nello skybox della scena. 
  2. Distant assets: strutture più vicine ma che rimangono comunque non esplorabili dal giocatore. Questi elementi possono mantenere una geometria semplice, sarà la texture a simulare il dettaglio necessario. 
  3. Close assets: tutto ciò che entra a contatto con il player, che è facilmente accessibile. Questi assets richiedono un’attenzione particolare ed una qualità migliore rispetto alle categorie precedenti.
  4. Hero assets: elementi focus dell’esperienza, molto spesso si tratta di personaggi che si interfacciano e/o interagiscono direttamente con l’utente, ma anche oggetti guida, pezzi da incastrare o bersagli da colpire. Tutti questi assets devono essere ben definiti nel design dell’esperienza e non devono trapelare carenze estetiche. 

A questo punto avremmo la nostra gerarchia che ci consentirà di avere una visione chiara dell’importanza di ogni asset del progetto. Da questa prima classificazione potremmo renderci conto di avere troppi assets primari, molto spesso accade quando il player ha una mobilità elevata nella scena, e questo ci richiede di elaborare soluzioni creative. Un esempio è l’utilizzo di LOD, “Level Of Detail”, questo metodo richiede di realizzare copie con diverso dettaglio poligonale per lo stesso asset, meriterebbe un approfondimento ma come nel caso della stazione spaziale si può evitare utilizzando altri escamotage. 

 

Pro Tip: assets non modellati da zero come ad esempio scansioni 3D presentano spesso un numero di poligoni eccessivo rispetto alle prestazioni hardware a disposizione. Software come Istant Meshes o l’opzione “Merge by distance” di Blender permettono di ridurre velocemente il peso poligonale totale oppure specifiche aree, senza dover ricorrere ad una retopology. 

 

Step 2: Valutare la relazione degli asset con il giocatore.

Il player, in particolar modo nel mondo del gaming, non si limiterà sempre ad esplorare gli ambienti rimanendo a livello del suolo ma la navigazione può avvenire anche in altri modi.
Nello stilare la gerarchia è fondamentale comprendere la relazione che hanno gli assets con il giocatore. Se lo scenario è una città e il movimento è limitato al salto non dovremo preoccuparci di dare troppo dettaglio ai piani più alti delle architetture. Il discorso però decade se il giocatore avrà a disposizione, anche in un secondo momento, di un jetpack o qualsiasi strumento che gli permetta di spostarsi sull’asse verticale.
Allo stesso tempo su un ottovolante oggetti vicini ma che scorrono velocemente non necessitano di alta qualità poichè l’utente non potrà fermarsi ad ammirarli.


L’esperienza Stardust è un percorso di esplorazione multisensoriale, l’utente percorre i diversi ambienti stimolato da sensazioni e atmosfere ispirate al catalogo Starlight 2021.
In assenza di gravità la navigazione avviene su tutti gli assi, le pareti delle stanze definiscono il limite di movimento.
Prendiamo come esempio quest’esperienza per definire la gerarchia dello scenario, possiamo identificare l’universo e la Terra come assets di background, inseriti di fatto nello skybox. Pannelli solari e parte dell’astronave esterna sono collocabili come distant assets, mentre tutte le stanze interne sono accessibili in qualsiasi punto e rappresentano dei close assets. Nell’esperienza l’utente viene guidato da una voce esterna e non sono presenti particolari oggetti da afferrare, quindi il focus durante la navigazione si concentra spesso sui controllers oppure sugli airlock, dispositivi che permettono il passaggio tra due ambienti a diversa pressione, infatti dopo aver esplorato la stanza l’occhio sarà alla ricerca di questo asset.

 

Background assets

StardustGallery_v01

 

Distant assets

StardustGallery_v02

 

Close assets

StardustGallery_v03

 

Hero assets

StardustGallery_v04

 

Ottimizzare le geometrie dei modelli con le texture.

Un altro elemento da considerare nell’ottimizzazione di un asset 3D sono le texture.
Le texture sono estremamente utili nel processo di ottimizzazione delle geometrie, possono infatti essere utilizzate per simulare elevate qualità estetiche partendo da geometrie semplici. Come? Attraverso l’utilizzo della normal map.

 

La normal map: simulazione delle superfici. 

La normal map simula la complessità del rilievo di superfici senza doverle modellare.
Hero assets come gli arilock all’interno della nostra esperienza Stardust presentavano dettagli come scanalature, cavatià, prese d’aria e superfici tassellate.
Non era quindi necessario enfatizzare lo spessore e modellare i minimi dettagli, la geometria dell’airlock è rimasta piuttosto semplice ed è bastato applicare una mappa normale per simulare il dettaglio di rilievo.

 



La qualità nelle geometrie semplici: il baking da High a Low Poly.

Il bake di un modello high-poly sul corrispettivo più leggero (low-poly) permette di ottenere una normal map estremamente utile per simulare la qualità della geometria.
La normal map infatti non inserisce solo dettagli di spessore come visto in precedenza ma permette una proiezione di un modello ad alta qualità su quello ottimizzato che verrà utilizzato in scena. Purtroppo non si tratta sempre di una scienza esatta, e lungi da me volermi addentrare nelle problematiche di smussamento delle facce, ma sicuramente il risultato ottenuto applicando la normal map con baking sarà notevole e affascinante.

 

In fase di progettazione è quindi buona pratica definire dove cadranno i dettagli di un asset e valutare se modellarli oppure sfruttare le texture. Inoltre cambiare le geometrie può rivelarsi spesso un passaggio rischioso, mentre le mappe si prestano facilmente alla sostituzione. 

 

Pro Tip: La visualizzazione di una griglia di tasselli sugli assets è un ottimo modo per visualizzare la distribuzione della qualità dell’uv.  Nello stesso assets capita spesso che alcune zone necessitino di una maggiore densità di pixel, in Blender è possibile visualizzare e gestire la distribuzione dei pixel creando una nuova immagine e selezionando UV Grid.

 

Seguendo questi passaggi è possibile fronteggiare ingegnosamente  i limiti del dispositivo e godere al massimo di un’esperienza VR  ad alta qualità. 

Buona ottimizzazione e a  presto!

 

Filippo Menolli - 3D Artist @Digital Mosaik




Pubblicato il 4 maggio 2022