Il Rigging dei character per la Realtà Virtuale
Possiamo considerare il rig dei characters come l’anello che congiunge la fase di modellazione con quella dell’animazione. Il rig, difatti, è la costruzione di una...
Filtra per Categoria
Possiamo considerare il rig dei characters come l’anello che congiunge la fase di modellazione con quella dell’animazione. Il rig, difatti, è la costruzione di una...
Per la realizzazione della scenografia di Vajont ho dovuto tenere a mente tre fondamentali richieste: la dimensione della stanza, e la conseguente disposizione degli oggetti...
Come abbiamo già visto nell’articolo dedicato al texturing della pelle e dei dettagli del viso, il texturing consente di raccontare parte della storia senza scomodare gli...
La maggior parte delle fasi di produzione di un progetto 3D implica un momento di ricerca e studio delle references: i character artists ricercano immagini che utilizzeranno...
Quanta storia può raccontare un dettaglio? Credo che il mio lavoro possa essere riassunto in quest’unica domanda. Il texturing non è solamente l’applicazione di colore ad un...
Quanto sono importanti i capelli per definire l’età di un personaggio, la cultura e l’epoca d’appartenenza? C’è una sola risposta a queste domande: tantissimo. Probabilmente, se...
Posso asserire che i concept di Vajont sono cresciuti di pari passo con la maturazione dell’idea generale dell’opera stessa. Poiché i character del pezzo sono ispirati a...
Probabilmente molti di voi già conosceranno qual è la pipe-line di produzione di un’esperienza VR – o un videogioco in sé – ma riteniamo comunque importante mettere...
Il focus della nostra esperienza VR è decisamente la relazione umana. Il tempo, in Vajont, trascorre in presenza di personaggi che, per tutta la durata del pezzo, tentano di...
Ad oggi è trascorso circa un anno e mezzo dalla data in cui Artheria è stata fondata. Ho sempre trovato un pizzico di difficoltà nello spiegare all’esterno di cosa ci occupiamo;...
Possiamo considerare il rig dei characters come l’anello che congiunge la fase di modellazione con quella dell’animazione. Il rig, difatti, è la costruzione di una specifica ‘ossatura’ – bones – all’interno della mesh dell’oggetto 3d, che consente di gestirne le deformazioni.
Nonostante quest’introduzione faccia apparire il rigging come qualcosa di semplice e meccanico, beh, non lo è: un rigger richiede di conoscere molta tecnica per gestire tutte le possibili deformazioni a cui un asset 3D può essere sottoposto, oltre a necessitare di un occhio artistico per rendere quanto più fluide e naturali le deformazioni stesse.
Lasciatemi essere più chiaro con un esempio: la maggior parte di noi è dotato di un arto composto da mano, avambraccio, braccio e spalla. La semplice azione di ‘piegare il braccio’ è consentita dalla presenza di una cerniera – nel nostro caso, il gomito – e da muscoli agonisti ed antagonisti, che si contraggono e si rilasciano. In altre parole, si deformano.
Ed è qui che interviene l’occhio artistico del rigger: comprendere la modalità e le deformazioni a cui sono sottoposti gli elementi in scena è il primo passo verso il realismo.
Come avrete già avuto modo di leggere qui e là in questo blog, esiste una differenza sostanziale tra quanto viene prodotto – in termini di modellazione, texturing e, di conseguenza, anche rigging – per i motori di render off-line e quanto viene prodotto per i motori di render online.
Ho già affrontato le differenze sostanziali di queste due tipologie di motori di render nell’articolo dedicato alla creazione dei capelli per un progetto VR, ma per maggiore chiarezza le accennerò di seguito.
I motori di render off-line (quelli utilizzati per il cinema e per i cartoni animati, per intenderci) renderizzano ogni frame in un tempo che può variare da una manciata di minuti a, verosimilmente, ore. I frame ottenuti vengono soltanto successivamente montati in sequenze di 25 fps.
Trattandosi di una tipologia di destinazione d’uso che privilegia la qualità alla performance, oltre ad avere in scena degli oggetti 3D composti da geometrie molto dense e complesse, hanno a disposizione molti strumenti di deformazione specifica per la gestione dei vari movimenti: lattice, cluster, tension, wrap, twist, jiggle sono tutti deformatori.
I motori di render online – utilizzati prevalentemente per videogames e Realtà Virtuale – funzionano sostanzialmente in modo opposto: come è intuibile dal nome, renderizzano ogni frame in tempo reale, privilegiando la performance rispetto alla qualità visiva.
Ne consegue la necessità di ottimizzare il flusso dati per evitare un dropdown del framerate: geometrie e textures molto leggere procedono di pari passo ad un rig semplificato, sprovvisto di strumenti di deformazione specifica.
E qui viene il bello. Come fare ad ottenere un rig di buona qualità – come richiesto da un progetto come Vajont – pur dovendo ricorrere ad un sistema semplificato?
Poiché la deformazione della mesh avviene seguendo quella che è la topologia del modello 3D – ovvero l’organizzazione e la distribuzione dei poligoni che compongono l’oggetto – il primo passaggio in assoluto è assicurarsi che tutto sia corretto ed ottimizzato.
Successivamente, si passa al posizionamento delle ossa all’interno della mesh. Ogni osso virtuale – bone – dispone di un joint, una sorta di pivot che indica le diverse direzioni in cui l’osso stesso può essere ruotato.
I joint vengono posizionati sulle giunture del corpo: alcuni esempi sono il polso, il gomito, la spalla, il collo, il ginocchio ecc. La rotazione dei joint può essere limitata solamente ad alcuni assi e per un certo numero di gradi: ad esempio, la rotazione della testa avviene unicamente sugli assi destra-sinistra, alto-basso con degli angoli di rotazione che difficilmente superano i 180°.
A tal proposito, è importante che ogni joint sia correttamente orientato, per avere un processo che sia quanto più possibile standardizzato.
Facciamo un piccolo passo indietro. Piegate il vostro gomito fino a disegnare un angolo di circa 90 gradi tra braccio ed avambraccio. Ci siete? Bene. Cominciate a ruotare il polso, guardando bene quello che accade alla pelle del vostro avambraccio. Cosa potete notare?
Vi do un piccolo indizio: la parte di avambraccio più vicina al polso ruota di un’ampiezza maggiore rispetto a quella più vicina al gomito. Questo movimento è il risultato dello slittamento di radio ed ulna, le due ossa dell’avambraccio.
Come è stato possibile trasferire questo effetto sul nostro modello 3D?
In realtà, il processo è più semplice di quello che appare.
Tra gomito e polso ho inserito tre diversi joint, applicando ad essi funzioni matematiche tali da ricalcare la rotazione che avviene nella realtà. Questo piccolo trucco mi ha consentito di ricreare una rotazione che avvenisse in modo fluido e graduale.
Non dobbiamo dimenticare che il rig è fatto per essere utilizzato da un animatore. Di conseguenza, non dobbiamo dimenticare l’importanza dell’usabilità! Non possiamo chiedere all’animatore di muovere ogni singolo osso per realizzare l’animazione, in quanto i tempi di realizzazione triplicherebbero, senza tra l’altro avere garanzia di un risultato godibile.
Bisogna quindi aggiungere i controlli.
Sostanzialmente, i controlli sono delle shape a cui vengono agganciati – tramite dei constrain – dei sistemi di ossa e joint. I controlli consentono comodamente di gestire rotazione e traslazione di ciascun gruppo di ossa a cui si riferiscono.
Per quei gruppi di ossa e joint troppo ravvicinati, in cui i controlli sul modello rischierebbero di sovrapporsi – come avviene per le falangi delle dita – vengono costruiti dei pannelli esterni, sempre nel rispetto dell’usabilità.
È adesso il momento di collegare la mesh 3D alle ossa posizionate al suo interno. Questo processo prende il nome di skin-binding: una volta che viene agganciata la ‘pelle’ ai sistemi di ossa e joint, al movimento dell’osso coincide il movimento di una parte della geometria.
Si passa dunque alla fase di pesatura, che consente di definire con precisione quali sono le aree di influenza di ciascun joint, sulla mesh 3D.
La pesatura viene proprio ‘dipinta’ sulla mesh attraverso un apposito pennello. Come potete vedere nell’immagine, le zone bianche definiscono le aree di influenza dei joint; più ci si allontana dal joint, più l’area di influenza sfuma. Per meglio aiutarci a visualizzare questo passaggio, possiamo pensare che muovere la spalla avrà comunque una minima influenza sul petto e sul braccio.
Avete mosso anche voi la spalla per capire come influenza il resto del corpo?
Bene, in questo modo vi sarà ancora più chiara l’importanza della pesatura.
Possiamo pensare ai blendshapes come differenti versioni di un unico modello: questa è una delle possibili tecniche utilizzate per il rig facciale.
Ciascun blendshape corrisponde ad una diversa espressione dello stesso viso: avremo dunque una mesh 3D differente per rabbia, gioia, tristezza…
Includendo la diversa posizione delle labbra e delle guance per la pronuncia di ogni singolo fonema, i personaggi di Vajont hanno 68 blendshape facciali l’uno, ricalcando l’espressività propria degli attori che hanno loro dato voce e motion-capture per avere un look finale ancora più realistico.
I blenshapes vengono dunque integrati nel rig. Nel nostro caso specifico, abbiamo scritto un sistema customizzato, talmente vasto da non rientrare all’interno di un unico screenshot!
Anche in questo caso, viene realizzato un pannello di controllo per consentire all’animatore un utilizzo più agevole del sistema.
Il personaggio così riggato viene dunque consegnato all’animatore. Quest’ultimo, attraverso un sistema di chiavi, registra la posizione di ogni controllo nel tempo. L’animazione viene quindi bakata – fissata, memorizzata – direttamente sulle ossa, consentendo di importare all’interno di Unity un file leggero ed ottimizzato, sprovvisto di controlli e di ogni ulteriore dato.
Per i personaggi la cui animazione non è realizzata dall’animatore, ma gestita dinamicamente dal sistema, il comando bake deformation to skin weight consente di trasferire le informazioni relative alla deformazione della mesh all’interno del file di pesatura. In questo modo, muovendo l’osso in Unity si muoverà la mesh.
Comments