beavers.it
Cos'è
Beavers?
Se non sapete perchè siete qui questo è il posto giusto dove iniziare.
χ
Archivio BlogarchivioComics
Environment in VR (un caso studio)

Environment in VR (un caso studio)

Vi presento la trascrizione del mio Talk tenuto al Campus Party IT2.
Alla progettazione grafica di queste soluzioni che andremo a vedere hanno partecipato Riccardo Morgia e Valentino Bononi durante il mio periodo lavorativo in Uqido.

Di cosa si parla oggi:

  • Un caso di studio a cui ho partecipato attivamente
  • Preproduzione di un ambiente
  • Preparazione della mappa
  • Plugins di Unity
  • Extra

Dirò spesso la parola Erba
Potrebbe capitare nelle prossime righe di leggere robe tipo “l’erba che abbiamo usato è la migliore”, facciamo i maturi eh

Disclaimer: mi riferisco ai prati.

Cosa sono gli Environment

E Prima di tutto come si pronuncia?

Environment?
Envairoment?
Enviropment?

Insomma sono gli ambienti.

null

Il problema generico

Sviluppare ambienti aperti, naturalistici e realistici in realtà virtuale è complicato: se in un videogame qualsiasi puoi fregare l’occhio del giocatore in tanti modi diversi, in VR sei costretto a trovare soluzioni più consistenti. Bisogna mantenere le performance costanti (stai pur sempre renderizzando un ambiente a più di 90fps, 2 volte, anche 3) e capire che in VR non è così facile fregare l’occhio umano.

null

Il problema da risolvere

Mi era già capitato di fare ambientazioni dallo spazio molto aperto in VR; in quel caso avevo dalla mia due fattori: ● Era tutto stilizzato ● Non aveva elementi organici (erba, acqua, alberi) Quando mi è stato chiesto di creare una “semplice piana, col prato e gli alberi” devo ammettere che mi sono detto: “vabbè che ci vuole”.

null

Il contesto

La ricreazione del Bostel di Rotzo, un sito archeologico situato su un altopiano. C’è poco o niente che possa occludere l’enorme quantitativo di erba che c’è attorno al giocatore, il chè è molto preoccupante, tra poco capirete il perchè.

null

La preproduzione

Per quanto apparentemente semplice, creare questa ambientazione necessita di soluzioni immediate alle seguenti domande ● Il giocatore è libero di muoversi? ● il contesto? E la domanda che mi interessa di più: ● cosa vede il giocatore dal suo punto di vista?

Cosa vede il giocatore?

  • Quali sono gli elementi che il giocatore vede ed a quale distanza?
  • Che visore verrà utilizzato? (Microsoft MR)

In base a questo tracceremo il limite delle LOD (level of detail) degli elementi, divisi per qualità delle mesh e delle texture.

null

La mappa

Foto  (le famose “Reference” perchè chiamarli “spunti” fa troppo Loser) ed un Plastico ci hanno aiutato nella costruzione della scena di base. La mappa a grandezza naturale (grazie google maps) ci ha permesso di scegliere un punto e testare lo sguardo del player.

null

Il giocatore non si muove (fortunatamente)

La differenza tra creare una mappa “esplorabile” ed una mappa che deve fare solo scena è che puoi prenderti la libertà di fare dei trucchi sporchissimi sapendo che il giocatore può muoversi solo entro la room scale designata (più o meno 4 metri). Oltre i 10/20 metri puoi davvero fare delle cose immorali graficamente, purché rimangano nascoste all’occhio del giocatore stesso: in VR, in una situazione di realismo, ci vuole un attimo per perdere la sospensione di incredulità.

Ricapitolando Il giocatore vedrà:

  • Un altopiano con parti scoscese ai lati
  • Tanta Erba
  • Terriccio sotto ai piedi
  • Vegetazione
  • Piccoli terrapieni
  • Staccionate
  • Cielo

null
null

L’erba

ricordate il disclaimer :V

Erba Classica

Ci sono diverse tipologie di erba. I piani, cioè delle immagini spalmate su piani più o meno piegati su se stessi con qualche edge loop. Le billboard, ovvero come gli sprite del vecchio Doom, delle immagini che possono essere bloccate in una delle assi verticali oppure orizzontali. Esempio: se un piano/billboard lo guardate da sopra, non avendo profondità perderà ogni senso.

null

Erba VR

L’unico modo è farla in 3D, ma quanto può pesare (e quanto tempo ci vuole?) per creare una cosa del genere? Sarà poi interattiva? Fortunatamente Stix Games ha creato DirectX 11 Grass Shader la migliore erba che abbiamo provato.

null

DirectX 11 Grass Shader

https://assetstore.unity.com/packages/vfx/shaders/directx-11/directx-11-grass-shader-36335

E’ un tipo di Erba Volumetrica che si aggancia alla tessellazione della mesh su cui inserite il materiale: più è densa la mesh, più densa sarà l’erba. Le opzioni di Falloff, di Lod, softness e di customizzazione dell’aspetto, mista alla possibilità di “dipingere” l’erba sulla texture RGBA permette una capacità di ottimizzazione notevole. Insomma è un ottima erba ma non bisogna abusarne…essendo GPU oriented. Verrà piazzata con un piano suddiviso, dipingendo le parti dove è necessaria.

null

Poligoni nudi VS Poligoni e Texture

Le modalità di DX11GS sono due, una che permette l’utilizzo di Texture/Texture Atlas,
l’altra con dei poligoni nudi. La prima è più realistica ma è anche l’erba più pesante, ogni singola texture è trasformata automaticamente in una mesh. I poligoni nudi invece sono più leggeri e sono più gestibili.

null

Falloff, Lod e Density

Si gioca tutto su questi valori. Bisogna stare particolarmente attenti nel cancellare COMPLETAMENTE le zone di erba dipinte per sbaglio o che non vengono utilizzate. Il metodo migliore è aumentare il falloff al minimo e la density al massimo (così vedete tutta l’erba del mondo) e cancellare. Così non rischiate calcoli inutili.
#truestory

null

Il terreno

A pochi centimetri dal naso ci sono le texture a terra
Provate a guardare ai vostri piedi: notate quanti dettagli i vostri occhi riescono a scorgere. Immaginate una scena naturalistica; c’è da considerare la presenza di terriccio, erba, fanghiglia, pietre, foglie… insomma come quando si va a pasquetta da qualche parte, solo in VR. Non potendo usare mesh da 8k, e nemmeno texture tile con la detail dobbiamo trovare una soluzione diversa.

Il maledetto Terrain di Unity (scusate eh)

Terrain è il sistema di creazione di Unity del
terreno, ed ha i seguenti problemi

  • Una pessima gestione dello sculpting (via mouse e IPD)
  • Se sbagli a dipingere le texture devi ricominciare completamente da zero
  • Se sbagli le proporzioni e vuoi cambiarle devi ricominciare da zero uguale
  • Ha solo la gestione dell’albedo e delle normal (quindi niente occlusion o metallic).
  • Non è assolutamente compatibile con il sistema di erba che vogliamo usare.

null

CTS

https://assetstore.unity.com/packages/tools/terrain/ctscomplete-terrain-shader-91938


CTS Ha tutti i problemi di Terrain MA

  • permette di utilizzare delle texture PBR
  • più profili di configurazione (insomma si può salvare)

Una volta decisa la posizione del giocatore abbiamo creato un piccolo piano di terrain + cts ed abbiamo cominciato a dipingere il pavimento.
Il resto dello stage è una enorme texture in tile su una mesh (che non si vede essendo scosceso)
Ricordatevi di impostare CTS su “lite” che è la configurazione ottimale per la Realtà Virtuale.
#iknowthefeeling

null

Altre soluzioni

Ci sarebbe la Tesselazione o la divisione del terreno in più moduli.
Ma non è il caso di dirlo a pochi giorni dalla consegna :V

null

https://assetstore.unity.com/packages/vfx/shaders/directx-11/dx11-tessellation-displacement-37322

Vegetazione

Da non confondersi con la GokuAzione :V
(scusatemi tanto)

Alberi

Se andate sull’asset store potete trovare tutti gli alberi che volete, sopratutto quelli di speed-tree. C’è solo un piccolo problema: avrete un quantitativo di Drawcall che non vi servono assolutamente.
In questo caso abbiamo deciso di creare 3 tipologie di alberi diversi,restando sotto i 3000 poligoni, alcuni di questi hanno solo solo il lato che il giocatore può vedere.
null

Cespugli

Stessa cosa, in questo caso ancora più becera: piani piegati da alcune edge loop. Li abbiamo messi nella parte esterna della mappa (dove sono naturalmente presenti, essendo parti non lavorate/calpestate) dove ci sono alberi lowpoly, in modo da nascondere le radici, solo abbozzate.

null

Terrapieni

sono le sezioni su cui vengono poi posizionate le capanne degli abitanti del villaggio.
Una volta impostato il punto di vista del giocatore ci siamo resi conto che la parte superiore non veniva mai visualizzata. Ci siamo occupati solo dei lati, di una piccola parte scoscesa ed abbiamo dipinto a mano su Substance Painter utilizzando delle texture custom miste a quelle del terreno, per creare continuità con la mappa.

null

Capanne e Staccionate

Il falegname virtuale. Fare un sacco di legna senza impazzire Fortuna vuole che tutto ciò che è da costruire deve essere fatto con dei tronchi.
il tronco d’albero del 1300 di sicuro non usciva dalla fabbrica dritto e preciso quindi bisogna dargli del movimento: Usando dei cilindri li abbiamo dotati di alcune edge loop (in base alla larghezza) ed abbiamo  messo un displacement cloud in world space: in due secondi avevamo tutti i tronchi che volevamo, usando dei semplici array.

null

Le staccionate

è l’unico elemento della scena che utilizzi le Lod di Unity: essendo presenti attorno a tutto il villaggio ed avendo la necessità di inserirle manualmente nei posti prestabiliti abbiamo creato tre diverse entità, usando una singola texture. Quelle più lontane sono composte davvero da poche decine di poligoni. Tutte utilizzano una versione modificate dei tronchi d’albero che abbiamo realizzato prima

null

Le capanne

A parte zone che non si vedono tutti i pezzi di legno sono posizionati esattamente come nella ricostruzione della capanna presente nel museo.
Abbiamo prodotto anche una versione interna della stessa ma il risultato per l’esterno ci permetteva di togliere pezzi della struttura e metà dei poligoni dei tronchi (quelli interni), invero invisibili all’occhio. Abbiamo piazzato dentro una mesh completamente nera per non far passare la luce, in modo da dare una sensazione di “pieno”.

null

Cielo

Ovvero “le nuove si muovono” (spoiler, no)

Fog Volume

https://assetstore.unity.com/packages/tools/particles-effects/fog-volume-3-81802

Il sistema di nuvole più figo che siamo riusciti a trovare e provare, permette di avere delle nuvole volumetriche, la nebbia volumetrica, Godray (i raggi di luce dal cielo) il tutto condito con ombre in tempo reale e tante belle cose.
Bello.
Pesa come un macigno.
Quindi abbiamo deciso di lasciare le nuvole in cielo alla classica skybox ed usare la sua nebbia volumetrica per avere un pò di foschia.

null

Le nuvole finte

https://github.com/TheMasonX/UnityPCSS
Per dare la sensazione di movimento delle nuvole abbiamo creato delle forme semplici (o come dico io, abbiamo agganciato delle sfere a caso) innestandole in un particle system.
Le abbiamo fatte generare da sinistra verso destra. Il resto l’ha fatto il sistema di ombre PCSS, rendendole più morbide. L’utente ha la sensazione che ci sia un cielo in movimento al costo di 4 mesh. Quindi se chiedono “il cielo si muove?” la risposta è “sisi…”

null

Il vento

https://assetstore.unity.com/packages/tools/visual-scripting/amplify-shader-editor-68570
C’è ma non si vede…Non è vero, non c’è e basta :V
Sempre in ottica di risparmio, avendo già il DX11GS che simula il vento in maniera più che decente sulla superficie d’erba abbiamo deciso di lasciar fare ad uno shader anche il movimento delle foglie degli alberi con il Lod maggiore. Agganciando un Double Sided Shader Cutsom che simula il movimento alle crune degli alberi abbiamo aggiunto un tocco di realismo in più. nLo stesso shader si può usare anche per i cespugli, o per altra vegetazione aggiuntiva, basta non esagerare.

null

Il risultato finale

(dopo aver impostato l’occlusion culling, aver
cancellato gli asset inutili e modificato la resa
delle texture in base alla distanza + post processing)

null
null
null

Bloopers

I glitch belli

Qui è quando ho applicato lo shader del movimento delle foglie la prima volta

Questi sono i test con i Layer

E le timeline che hanno dato i numeri dopo uno degli aggiornamenti di Unity :V

Cosa altro fare con le stesse meccaniche

La sacra tecnica del copia e incolla

null
null
null

Tutti questi elementi che vedete sopra sono stati fatti in 2 giorni soltanto, 10 ore in tutto. Ringraziando la Nasa coi file gratuiti (in Blender!) e l’asset store per l’aiuto!

Ricordatevi che la Realtà Virtuale è sperimentazione

ma ai clienti interessa soprattutto il risultato

Domande Time

potete farmele a questi indirizzi social, o qua sotto.
Grazie, Graziella e Grazie a tutti!

 

Un articolo di the TMO

Puoi trovarmi su Twitter o Facebook

per gli amici Timo, è in realtà Marco E. Giammetti, sul pianeta terra dal 1979 e grafico dal giorno prima. Ha cominciato a mettere le appiccicaticce manine sui videogame all’ età di 3 anni con un Vic 20 e non ha più smesso di giocare da quella data in poi, frequentando sale giochi malfamate e rischiando più volte la bocciatura a scuola per tentare di uccidere quell’ ultimo maledetto boss.

30 luglio 2018 Categoria: Blog Comics

Commenti

Speciali

uncharted_header

Speciale Uncharted

Con la pubblicazione della Nathan Drake Collection su Ps4 finalmente tutti (non tutti) gli episodi di Uncharted sono stati rimessi a nuovo. Nuova grafica, nuova risoluzione, nuovo sistema di mira, 60fps e texture in abbondanza! Ne approfitto per parlarne un pò a modo mio, come al solito no major spoiler anche perchè Sony dice che [...]

CSVrHv6WsAAFqoX

PSW’15 – Playstation Conference [parte 2]

Tekken 7 Torna anche il picchiaduro Namco. E’ il “sette” in ordine di uscita, ma la storia che lega i personaggi funge da prequel dell’intera serie. Gran Turismo Sport (esclusiva) Torna su PS4 GT, ma sarà incentrato pesantemente sull’online, tanto che hanno annunciato una cosa che potrebbe essere fantastica quanto inutile: le prove online dei [...]