Gli effetti visivi di Ghost of Tsushima

1 0
Gli effetti visivi di Ghost of Tsushima

Come il vento e gli effetti particellari hanno contribuito a dare forma al mondo di Tsushima.

L’isola di Tsushima è un fantastico luogo da esplorare, ricco di piccoli dettagli realizzati con cura dal nostro team. Il gioco è anche considerevolmente diverso dalla nostra ultima creazione, inFAMOUS: Second Son, piena di effetti visivi dal sapore supereroistico. Mi chiamo Matt Vainio e sono il capo artista degli effetti visivi di Sucker Punch Productions. Il mio lavoro consiste nel risolvere i problemi relativi alla grafica e al design attraverso la tecnologia, ed è una cosa che faccio per Sucker Punch dai tempi di inFAMOUS 2. Oggi vi spiegherò com’è avvenuta la transizione da un titolo pieno di vistosi superpoteri a un gioco realistico ma visivamente stupendo, pieno di fango, sangue e acciaio, illustrandovi anche i metodi utilizzati per creare gli effetti visivi di Ghost of Tsushima.

Quando abbiamo iniziato a lavorare a Ghost, ho individuato alcune macroaree di miglioramento necessarie al progetto. La prima consisteva nel migliorare i livelli di interattività all’interno dei sistemi particellari. Per Second Son abbiamo creato un vasto assortimento di superpoteri magici, sviluppando sistemi particellari basati sulle espressioni.  Per Ghost of Tsushima, uno degli obiettivi principali era sfruttare quel sistema e orientarlo verso livelli elevati di interattività. Sapevamo sin dall’inizio che il vento sarebbe stato un elemento importante che andava incorporato nei sistemi particellari e non solo. Volevamo anche aggiungere elementi di vita animale, dare ai paesaggi mozzafiato un’atmosfera ambientale e riprodurre al meglio quella sensazione di “fango, sangue e acciaio”, sporcando di sangue e terra i personaggi durante l’esplorazione e i combattimenti. Sono tanti i modi in cui abbiamo reso gli effetti particellari più interattivi, ma hanno tutti richiesto un maggior numero di dati provenienti dal mondo di gioco. Eccone alcuni esempi: vento globale, vento originato dal movimento del giocatore, displacement dei personaggi, informazioni di posizione del terreno e dell’acqua, informazioni meteo come umidità, ora del giorno e tanto altro.

La seconda macroarea comprendeva la necessità di costruire su larga scala. Il mondo di Ghost of Tsushima è significativamente più grande di quello di Second Son. Per la maggior parte della fase di sviluppo, però, sono state solo due le persone responsabili degli effetti visivi nel team di Sucker Punch. In altre parole, era necessario che aggiornassimo il maggior numero possibile di contenuti attraverso processi automatizzati. Inoltre, era anche importante adattare panorami immensi a condizioni meteo dinamiche e a una progressione temporale di 24 ore. Infine, abbiamo integrato personalmente alcuni elementi per aiutare il giocatore durante l’esplorazione dell’isola di Tsushima.

Vento

Sin dall’inizio, uno degli obiettivi principali della direzione artistica era che tutto si dovesse muovere. Era chiaramente un’area in cui gli effetti particellari avrebbero potuto aiutare attraverso l’integrazione di foglie e polline fluttuanti, ma sono tanti i sistemi che lavorano in contemporanea per dare l’illusione del vento che soffia. Oltre alle particelle, anche gli alberi, l’erba, i tessuti e le corde si muovono con il vento. Tutti questi elementi sono stati coordinati in modo da muoversi coerentemente in base alle diverse condizioni di vento. Abbiamo integrato questa direzione globale del vento in quasi ogni singolo effetto del gioco. Ad esempio, quando esplode una bomba o viene acceso un bivacco, il fumo si muove nella direzione verso cui soffia il vento. Questo succede nel caso di fuochi, scintille, fumo… in pratica quasi tutto. Per dare una turbolenza aggiuntiva quando la velocità aumenta, abbiamo campionato anche la velocità del vento.

Il sistema di vento globale è diventato uno strumento di navigazione solo quando Jason Connell, il direttore artistico, si è presentato da me e da Adrian Bentley, uno dei nostri capi ingegneri, chiedendo di rendere le particelle un indicatore di direzione per le missioni. Così è nato quello che noi chiamiamo “windicator” (letteralmente “venticatore”). Il nostro scopo non era creare un sistema di tracciamento che cambiasse continuamente direzione per evitare gli ostacoli, ma che al contrario indicasse costantemente l’obiettivo lasciando ai giocatori la scelta del percorso da seguire. Questo perché volevamo lasciare i giocatori liberi di esplorare, impegnandosi nella navigazione senza seguire un’interfaccia utente in modo passivo. Tutto ciò è stato possibile solo grazie alle informazioni sul terreno a cui il nostro sistema particellare aveva accesso, permettendo alle particelle di riconoscere il paesaggio attorno al giocatore.

Durante i primi tentativi, avevo fatto sì che le particelle si agganciassero alla struttura del terreno, spostandosi in alto e in basso seguendo l’andamento di avvallamenti e colline. Questo però si è rivelato un problema sotto vari punti di vista. Innanzitutto, le nostre montagne usano diversi modelli di rocce, e le informazioni sul terreno a nostra disposizione includevano solo le mesh sottoposte a tassellazione dinamica sottostanti e non comprendevano questi modelli. In questo modo le particelle si scontravano con tutte le sporgenze rocciose per poi scomparire, rendendo difficile seguire le indicazioni fornite dal vento. Inoltre, un’interazione così precisa con il terreno sembrava poco naturale, così il mio tentativo successivo è stato quello di impostare il terreno come un pavimento, in modo che le particelle subissero una spinta ascendente per seguire il movimento verso l’alto e continuassero a fluttuare in modo lineare quando il terreno digradava. In caso di pendii ho aumentato la velocità ascendente, facendo diversi test preliminari lungo il percorso seguito dalle particelle. In ognuno di questi test, la particella verifica la distanza dal terreno in quel determinato punto o la possibilità di essere addirittura coperta. Se la particella è troppo vicina o viene coperta, allora riceve una spinta verso l’alto. Per concludere, il “venticatore” ha diversi elementi di riferimento in base all’ambientazioni: la vegetazione della pampa e l’erba nei campi, le foglie nelle foreste, la cenere nelle aree bruciate e così via. Spiegherò meglio come funziona questo sistema più avanti.

Per quanto riguarda il fogliame, le piante sono interconnesse tramite punti di giunzione che rispondono alla velocità del vento locale. In collaborazione con il team di programmazione e ambientazione abbiamo realizzato dei controlli separati per i tronchi e i rami, in modo da ottenere la flessibilità necessaria per creare la grande varietà di alberi e arbusti che caratterizzano Tsushima. Per riprodurre le piccole oscillazioni delle foglie abbiamo sommato al movimento generale dei tronchi e dei rami un livello di noise sulla superficie.

I campi di erba e pampa sono un elemento iconico del gioco e hanno richiesto una particolare collaborazione tra i team di rendering, ambientazione ed effetti visivi. Sono stati realizzati con un insieme di triangoli generati proceduralmente per l’erba e di asset modellati per la pampa. Inizialmente, abbiamo provato a utilizzare degli effetti particellari per riprodurne il movimento ondulato attraverso il displacement dell’erba in archi sovrapposti. L’erba andava visivamente bene, ma lo stesso non si poteva dire di alberi e arbusti, per non parlare dei costi che sforavano il nostro budget. Come secondo tentativo, abbiamo aggiunto all’ambientazione due strati di folate procedurali. Il primo è un pattern di noise che segue la direzione del vento, a cui è stata applicata una texture che scorre lungo il terreno e crea dettagli minori sull’erba. Il vantaggio di questo approccio (oltre al risparmio in termini economici) è stato il poter utilizzare il noise grezzo delle raffiche di vento anche sugli alberi e sui cespugli, rendendo più naturale l’integrazione tra erba e fogliame.

Alla fine, abbiamo usato lo stesso la tecnologia del displacement particellare dell’erba, ma solo per farla spostare al passaggio del giocatore e del cavallo. Si tratta di una tecnica che è già stata utilizzata per altri giochi in passato, ma sfruttando il sistema particellare per controllare il displacement in questo caso siamo riusciti a implementare le nostre espressioni in modelli di comportamento più avanzati. Tra questi vi era la possibilità di far oscillare l’erba in modo realistico applicando un’onda smorzata alla forza del displacement, in modo da evitare che l’erba ritornasse nella sua posizione originaria in modo lineare e poco naturale. Il video qui sotto mostra il displacement dell’erba e la visuale di debug del sistema particellare che ne controlla il funzionamento. Le parti verdi del tracciato rappresentano il displacement, mentre le parti rosse ne indicano la fine. Guardando attentamente, è possibile notare come l’erba perde e riacquisisce i valori di displacement in quantità sempre minori con l’allontanarsi del tracciato dall’eroe. Questo crea un normale riverbero di movimento che aiuta a rendere l’erba molto più realistica.

Infine, il team artistico responsabile della creazione tecnica dei personaggi si è occupato dell’implementazione di tessuti e corde dinamiche per via del loro uso massiccio anche sui personaggi. Ogni simulazione dei tessuti e delle corde usa gli stessi input del vento usati per il fogliame e per gli effetti particellari, contribuendo alla sensazione che stia realmente soffiando del vento nella scena.

Animali

Sin da subito, abbiamo pensato che qualsiasi animale creato dal team degli effetti visivi sarebbe stato visto solo da lontano, ma con l’evolversi del progetto abbiamo capito che gli animali avrebbero potuto ricoprire un ruolo più importante. Per questo abbiamo collaborato con lo stesso programmatore responsabile del rendering che ha realizzato il sistema particellare durante la produzione di Second Son, Bill Rockenbeck. Innanzitutto, ha lasciato che le particelle generassero oggetti poligonali (mesh) completi di rig e animati. In seguito, usando le stesse informazioni relative alla posizione del terreno usate per il “venticatore”, abbiamo potuto accordare l’orientamento dei modelli all’andamento del terreno, facendoli collidere quando necessario.

Abbiamo aggiunto animali come rane, uccelli/gru, pesci, granchi, insetti in grado di reagire a Jin e agli altri personaggi del mondo. Abbiamo avvolto i personaggi (incluso Jin) in una sfera di vento dai valori molto bassi in modo che gli effetti particellari degli animali potessero rilevarli se presenti nelle vicinanze. Abbiamo usato un nuovo sistema di eventi per modificare i movimenti delle particelle ogni volta che si presentava questa condizione, in modo che gli animali si allontanassero dalle persone. Lo stesso procedimento è stato applicato agli oggetti lanciati e agli impatti, così che gli animali risultassero spaventati anche da frecce e pugnali da lancio.

Nel seguente video è possibile osservare alcune delle prime iterazioni degli effetti dei granchi che si disperdono sulla spiaggia. Siamo partiti con delle mesh statiche (probabilmente i miei migliori risultati nella modellazione) e abbiamo realizzato delle iterazioni sul comportamento. Volevo che i granchi mantenessero una distanza minima da Jin per evitare che gli stesse direttamente sopra, in modo da farli impaurire. Per aiutarmi a correggere questi comportamenti, nel video i granchi sono bianchi quando si muovono e arancioni quando stanno fermi.

Foglie e duelli

Considerato che uno dei tratti distintivi di Ghost of Tsushima è il vento, sapevamo di dover aggiungere tante foglie facendole sembrare belle e allo stesso tempo naturali. È per questo motivo che in Ghost in qualsiasi momento ci possono essere decine di migliaia di foglie sullo schermo che interagiscono tutte con vento, ambientazione e personaggi.

Per renderle realistiche, abbiamo impiegato diverso tempo nel farle atterrare in modo corretto a seconda del terreno. Ogni foglia è modellata come un disco e usa la matematica 3D per ruotare appropriatamente in risposta ai torcenti applicati non appena entra in contatto con il suolo.  A parte il semplice atterraggio sul terreno, abbiamo modellato anche altri comportamenti avanzati: le foglie atterrano sulla superficie dell’acqua venendo trascinate dalla corrente, cadono da una cascata e affondano gradualmente mentre vengono portate alla deriva.

Nelle fasi finali dello sviluppo, un tester mi ha fatto notare uno strano bug: le foglie cadevano sui falò senza bruciarsi una volta raggiunto il terreno sotto o nelle vicinanze del fuoco. Ho pensato anch’io che fosse strano, così abbiamo deciso di risolvere il problema posizionando sui falò un diffusore di vento a cui potessero reagire le foglie in caduta. Questa corrente ascensionale impedisce in buona parte alle foglie di cadere sul fuoco, creando un dettaglio piacevole.

I duelli sono diventati un elemento molto apprezzato del gioco sin dai primi test. Fin da subito il team responsabile degli effetti visivi è stato incaricato dai direttori di gioco di creare degli scenari che mostrassero al meglio l’interattività nel gioco e nei sistemi particellari.

Abbiamo inserito delle foglie sempre presenti che reagissero ai movimenti del giocatore e dell’intelligenza artificiale nella maggior parte dei duelli. Per questo, abbiamo ricalibrato il displacement dell’erba, permettendo agli effetti particellari di campionare quest’informazione. Così siamo riusciti a far interagire in modo elegante le foglie quando i personaggi vi si muovono rapidamente attraverso. Nel caso dei duelli, l’obiettivo non era ricreare un realismo perfetto, ma una sequenza elegante di movimenti. Abbiamo usato lo stesso sistema a eventi descritto prima per individuare i momenti in cui i valori del displacement del giocatore erano sotto la soglia minima. Abbiamo quindi creato un falloff per far assestare le foglie dopo la prima animazione e poter essere successivamente spostate. Abbiamo sfruttato anche un pattern di noise in modo da permettere temporaneamente alle foglie di essere sollevate da terra dal vento, per simulare le raffiche e la natura instabile delle foglie.

In altre tipologie di duello sono stati usati in modo massiccio altri sistemi particellari dinamici, come nel caso di lanterne fluttuanti, candele che si spengono, nebbia che si sposta ai piedi dei personaggi, fulmini e altro. Abbiamo adottato tecniche simili a quelle usate per le foglie nel caso delle lanterne, ognuna costituita da un set di effetti particellari che si muove e oscilla sull’acqua in base alla posizione del giocatore. Per le candele dinamiche nel secondo duello con Ryuzo, abbiamo integrato dei diffusori di vento ai colpi delle spade, campionando quelli sulle candele. Se il vento avesse superato un determinato limite, avremmo usato il nostro sistema a eventi per spegnere il fuoco e la luce, generando un nuovo filo di fumo ricreandone l’effetto sul soffitto. Inoltre, quando i giocatori schivano o rotolano generano del vento, facendo sì che con dei movimenti rapidi nelle vicinanze le candele di questo duello speciale si spengano.

Sangue e fango

Quando i personaggi corrono, schivano, rotolano e cadono a terra, viene dinamicamente aggiunto del fango alle loro mesh. Riuscire a far sporcare i personaggi durante l’esplorazione del mondo era uno degli obiettivi principali della direzione artistica per poter creare l’adeguata atmosfera di gioco. Durante le animazioni, abbiamo aggiunto diverse “fonti” di fango su ginocchia, gomiti e spalle, in modo che Jin e gli altri potessero avere un aspetto realistico da battaglia. Per Ghost ci siamo ispirati alle scene di combattimento dei film sui samurai: i personaggi spostano il fango con i loro piedi sporcandosi a ogni interazione con il terreno.

Come per il fango, abbiamo creato delle “fonti” anche per il sangue, in modo che si aggiungesse dinamicamente alle mesh del personaggio durante gli scontri, evidenziandone così le ferite. Per ogni impatto, viene aggiunto un po’ di sangue nel punto dove si è stati colpiti dalla spada e nella zona adiacente. Oltre che per i combattimenti sistemici, lo stesso procedimento è stato usato per i filmati e le sequenze scriptate.

Oltre all’aggiunta di sangue ai modelli dei personaggi, ogni attacco crea un effetto particellare con migliaia di gocce e rivoli di sangue. Ogni goccia atterra geometricamente nelle vicinanze e sull’acqua si disperde in macchie che vengono trascinate dalla corrente.

Costruire su larga scala

Un aspetto fondamentale della costruzione in scala consisteva nell’accordare i nostri effetti visivi all’ambientazione senza doverli implementare manualmente. Sapevamo che con un team così piccolo e un mondo di gioco così vasto avremmo dovuto utilizzare un qualche tipo di posizionamento procedurale, per adattarci alla frequenza di cambiamento dei biomi ambientali. Non volevamo passare tutto il tempo ad aggiornare i contenuti: dovevano autocorreggersi.

Crescita e biomi

Ecco un esempio: volevamo che gli effetti particellari delle foglie cadessero solo nelle aree della foresta e non nelle praterie. Il primo approccio è stato abbastanza invasivo: abbiamo applicato un effetto sugli alberi che crescevano proceduralmente sull’isola. Non ha avuto molto successo perché l’ambientazione generava centinaia di alberi in piccoli spazi. Sebbene funzionasse da un punto di vista geometrico, per i sistemi particellari era troppo dispendioso. Abbiamo fatto qualche progresso impostando i nostri effetti particellari in modo che comparissero solo se molto vicini agli alberi (circa 15 metri), ma ci è sembrato un fallimento con distanze visive così lontane. L’altro problema di questo approccio era che lasciando cadere una foglia dalla cima di un albero a 12 metri di altezza mentre il giocatore è a cavallo, ci sarebbe stato il rischio che questa non comparisse prima del suo passaggio. Le foglie, in questo modo, non erano spesso visibili.

Come secondo approccio abbiamo utilizzato il sistema di crescita proprio come per l’ambientazione, posizionando proceduralmente i sistemi particellari nello stesso spazio degli alberi e usando le stesse maschere ed espressioni. In questo caso si trattava di posizionare dei cerchi sovrapposti di foglie all’interno di una maschera talvolta complessa. I cerchi venivano spinti all’interno del loro raggio dall’estremità delle regole della maschera, creando però dei grandi spazi vuoti dove non erano presenti le foglie per via delle espressioni e delle regole di crescita. Avremmo potuto bilanciare questo problema creando altri diffusori più piccoli, ma a costo della prestazione. Sistemare delle aree specifiche è stato difficile perché, se avessimo cambiato le regole di crescita per sistemare la densità o gli spazi vuoti in una determinata area, avremmo alterato anche altre zone che prima funzionavano bene. Ciononostante, la tecnica si è rivelata funzionale, e nonostante qualche difetto c’eravamo quasi.

Nella prima immagine si vede come abbiamo usato lo strumento di crescita per aggiungere gli effetti particellari basati sulle regole che determinano la posizione degli alberi. Si possono vedere dei grandi spazi vuoti, motivo per cui non eravamo soddisfatti. Nella seconda immagine, ho aumentato notevolmente la quantità di diffusori di effetti particellari. Il problema era quasi risolto, ma richiedeva prestazioni preziose che sarebbero potute servire altrove. La terza immagine dimostra il nostro terzo approccio, la mappa del bioma. Uno dei nostri programmatori addetti al rendering stava lavorando con il team d’illuminazione a una tecnologia che usa i dati relativi alle maschere di crescita ambientale accessibili in tempo reale. Gli ho chiesto se potessimo utilizzarla e fortunatamente è stato così. In questo modo, il sistema particellare era in grado di riconoscere il bioma in cui ogni singolo effetto particellare era stato creato. Nell’immagine numero quattro è raffigurato il debug di un sistema particellare che mostra come gli effetti particellari leggono questi dati. Le aree blu sono occupate dalla prateria e quelle verdi dalla foresta.

All’inizio si è rivelato un po’ macchinoso, ma dopo aver usato un pattern di noise per modificare le informazioni campionate è diventato tutto più organico e fluido. Questo è divenuto il nucleo del nostro sistema di atmosfera ambientale in combinazione con altre opzioni come il campionamento della posizione del terreno, il materiale e la direzione del vento. In un qualsiasi luogo, eravamo in grado di rimuovere dall’ambientazione centinaia di sistemi particellari e sostituirli con un unico sistema che seguiva la telecamera rivelandosi molto più fedele ai biomi ambientali.

Anche se abbiamo trasferito una buona parte dei nostri effetti dal sistema di crescita a un bioma in tempo reale, abbiamo comunque utilizzato il sistema di crescita per alcuni effetti particellari, come nel caso degli uccelli situati ai margini delle foreste, dei granchi e dei gabbiani nelle spiagge, degli aironi nelle risaie e delle gru nelle paludi. Infine, abbiamo utilizzato il sistema di crescita per aggiungere dei banchi di nebbia ai margini della foresta. In tutti questi casi, ogniqualvolta il team addetto alle ambientazioni modificava la posizione delle foreste, dei campi o delle spiagge, gli effetti visivi venivano aggiornati automaticamente.

Panorami e suggerimenti di navigazione

I panorami sono un elemento importante all’interno di Ghost poiché aiutano nell’individuare alcuni oggetti all’interno del gameplay e sono fondamentali per creare l’atmosfera e il tono. Abbiamo pensato che le missioni di ricerca dovessero essere il più naturali possibile, così abbiamo creato diversi elementi che indicassero la posizione delle missioni e le sfide. Alcuni esempi di questo sono i diversi tipi di fumo per le missioni o le sfide, gli uccelli che segnalano la possibilità di fermarsi a scrivere un haiku, il vapore che si alza dalle sorgenti onsen e altro ancora.

Mettere tutto insieme

Gli effetti visivi di Ghost of Tsushima sono parte integrante dell’ambientazione. Ogni frame è dato dall’integrazione di diversi sistemi che collaborano per migliorare l’aspetto dinamico del gioco. Tutti gli effetti visivi contribuiscono a dare vita al mondo di Tsushima, rendendo l’esplorazione un’esperienza unica, dagli animali ai biomi in primo piano passando per gli effetti meteo e gli indicatori del paesaggio.

Grazie per la lettura. Spero che questo viaggio alla scoperta degli effetti visivi di Tsushima vi sia piaciuto. Per approfondire alcune delle nostre tecnologie di base, basta dare un’occhiata  all’intervento che ho tenuto per la Game Developers Conference nel 2014, in cui approfondisco i sistemi particellari basati sulle espressioni.

I commenti sono chiusi.

1 Commento