VI RICORDIAMO CHE QUESTO E' IL VECCHIO PLAY2EYE, PER IL NUOVO PS3 e forum Forum Videogiochi

 
 
Speciali
Grafica 3D a cura di nemesis
 
 

 

Grafica 3D:
Guida per la comprensione

Affascinante, spettacolare, incomprensibile, scoinvolgente, fotorealistico! Quanti aggettivi ancora si potrebbero trovare per descrivere un mondo, si, digitale, ma alla base del quale ci sono la fantasia e le capacità umane. Stiamo parlando ovviamente del mondo della grafica tridimensionale, dimensione parallela che nelle sue migliori traspozioni cinematografiche e videoludiche ha riscontrato innumerevoli consensi. Basti pensare ai recentissimi lungometraggi in CG (acronimo di computer grafica) Shrek e Final Fantasy, realizzati rispettivamente con XSI e con Maya, due potentissimi software per la creazione di immagini ed animazioni 3D. Quanti di noi non sono rimasti colpiti dalle sconvolgenti animazioni di Shrek o addirittura incapaci di parlare per una settimana nell’impossibilità di descrivere la bellezza di Final Fantasy? O ancora, avvicinandoci ad un campo che ci è più propriamente congeniale chi non è rimasto colpito davanti a quei piccoli miracoli grafici di Gran Turismo 3 e Devil May Cry (per chi ha avuto la possibilità di vederlo)?. Ad ogni modo, sia che si tratti di immagini statiche, di corto/lungometraggi , di intro per videogiochi o videogiochi stessi, tutto quello che vediamo su schermo al cinema, davanti al pc o davanti alla televisione è spesso il risultato finale di mesi o addirittura di anni di duro lavoro da parte di team appartenenti all’uno o all’altro progetto o di singoli individui che nel loro piccolo e limitatamente ai sistemi che hanno a disposizione riescono a creare delle cose davvero interessanti. Spesso tra gli addetti ai lavori (ave lightman :) ) c’è l’abitudine di perdersi in disquisizioni di natura tecnica sulle texture procedurali, sulle bump map, sugli shader, sul motion capture, face tracking, cinematica inversa, sugli effetti particellari e quant’altro. Per i non adetti invece ci si limita a pronunciare frasi del tipo: “hai visto? Sembra verooooo!!!! Nooo, guarda…..spettacolooooo!!! L’erba, guarda l’erba toccata dalle ruote della macchina come schizza via!” In pratica si resta ad ammirare tutti quei particolari che fanno di un prodotto un capolavoro ignari di quelle opzioni tecniche fondamentali che sono alla radice delle meraviglie virtuali che si prestano ai nostri commenti. L’avvento dei videogames come fenomeno di massa ha fatto si che sempre più persone si avvicinassero alla grafica tridimensionale e di questo dobbiamo esserne riconoscenti a Sony e alla sua sua PSX. Questo comunque ha dato origine anche all’utilizzo di una serie di tecnicismi che sono comparsi con frequenza sempre maggiore su tutte le testate videoludiche cartacee ed elettroniche (come la nostra e vostra amatissima Play2eye.it). Per quanto si cerchi di evitare l'uso copioso di termini tecnici a volte è impossibile farne a meno, soprattutto quando si entra nel merito delle specifiche di una determinata console o di una nuova scheda grafica basta su chi sa quale strabiliante microprocessore. Spesso e volentieri nemmeno le riviste dedicate riescono a spiegarsi bene e quindi nascono equivoci come quello sorto in merito alle specifiche di PlayStation2. Prima, durante e dopo il lancio sono state rilasciate dalle varie pubblicazioni informazioni sulle capacità di calcolo poligonale di questo piccolo mostro dell'ingegneria elettronica. C'era chi le attribuiva la massima capacità di calcolare 66 milioni di poligoni al secondo, e chi invece 75 milioni. A chi dar retta? Ovviamente a noi di Play2eye.it che con questo speciale intendiamo dissipare i vostri dubbi circa tutto quello che riguarda la grafica di un videogioco, strettamente legata alle potenzialità del sistema su cui gira. Pertanto cominciamo con il chiarire subito l'equivoco accennato un rigo fa. L'EMOTION ENGINE di PS2 è in grado di calcolare contemporaneamente e senza effetti grafici un picco massimo di 66 MILIONI DI POLIGONI AL SECONDO. Tuttavia i poligoni calcolati necessitano di un dispositivo di resa su video e questo dispositivo è il GRAPHIC SINTHESIZER (GS), unità capace di "RIPRODURRE" (non calcolare) su schermo un picco di 75 MILIONI DI POLIGONI AL SECONDO. Pertanto il GS è fondamentalmente in grado di visualizzare una quantità di poligoni superiore alle reali capacità di calcolo della CPU. Di conseguenza il massimo numero di poligoni che PS2 potrà mai realmente visualizzare corrisponde al numero massimo di poligoni che la CPU è in grado di generare. Non pensate che SONY abbia commesso una gaff con questa scelta, l'errore sarebbe stato l'opposto, ovvero dotare la macchina di un GS in grado di visualizzare meno poligoni di quelli effettivamente calcolati dalla CPU. Pensate cosa sarebbe accaduto se la cpu fosse stata in grado di generare 66 milioni di poligoni mentre il GS ne poteva visualizzare "solo" 50 milioni? In questo modo invece l'EMOTION ENGINE è libero di esprimere al massimo il suo potenziale sotto tutti gli aspetti. Per altre informazioni sull'eccezionale architettura dell'EMOTION ENGINE e sulle capacità tecniche di PS2 vi rimando allo splendido articolo di Alex Abbate che troverete nella sezione HARDWARE, a mio avviso il più chiaro ed esaustivo mai apparso su una rivista o su un sito e lo dico obbiettivamente perché quando lo lessi per la prima volta non facevo ancora parte dello staff di Play2eye.

 

Come dicevo prima tutti gli effetti grafici riscontrabili in un videogioco dipendono direttamente dalle caratteristiche del sistema su cui il gioco gira; per esempio: se una console non è predisposta per l'utilizzo del bilinear filtering (come PSone) non ci sarà la possibilità di usufruire di questo potente strumento. Ma cosa è il bilinear filtering e cosa si nasconde dietro tutti quei termini strani come MIPMAPPING o ANTI-ALIASING e cosa significano le parole POLIGONI, POLIGONI AL SECONDO, PRIMITIVE, TEXTURE MAPPING e via dicendo? Continuate a leggere per scoprirlo.

Grafica 3D all'opera

Poligoni, curve e modellazione

Prima di ogni cosa è importante affrontare le varie argomentazioni per ordine. Stiamo parlando di immagini tridimensionali e pertanto dobbiamo comprendere quale è la struttura essenziale di una immagine 3D. L'elemento fondamentale per un immagine tridimensionale è un poligono piano. Un poligono è sostanzialmente una figura costituita da almeno tre vertici (o punti) non allineati e uniti tra di loro da dei segmenti. Se evince quindi con estrema facilità che il poligono più semplice è il triangolo in quanto costituito dal minor numero di vertici richiesti per generarne uno. Se invece i vertici fossero stati due avremmo avuto semplicemente le coordinate cartesiane per individuarne un segmento e calcolarne la lunghezza o per individuare una retta. Pertanto quando si parla di un numero di poligoni massimo che un processore può generare ci stiamo riferendo a dei triangoli (il poligono più semplice in assoluto) salvo diversa specificazione. Ogni struttura tridimensionale è pertanto definita poligonale in quanto le immagini sono costituite da poligoni triangolari o tutt' al più quadrangolari. Per fare un ulteriore esempio: una figura apparentemente sferica sarà in realtà costituita da tanti poligoni triangolari o quadrangolari che condivideranno dei vertici

Il triangolo è il poligono più semplice in assoluto, composto da tre soli vertici.
Come si può notare dall'immagine questa sfera 3D è costituita in realtà da tanti piccoli poligoni triangolari

Per ottenere le immagini tridimensionali che che vediamo nei videogiochi i grafici procedono seguendo un iter specifico. Il primo passo è il Modelling o modellazione. In sede di modelling vengono create delle strutture poligonali complesse lavorando con i poligoni. Spesso per farlo ci si avvale di Primitive, o forme geometriche tridimensionali di base. A questa categoria appartengono Prismi, Cubi, Sfere, Parallepipedi, Cilindri, Toroidi, Coni e via dicendo. Modificando queste forme con strumenti molto potenti caratteristici dei migliori programmi di grafica 3D (3D studio, Ligthwave, Maya etc.) si ottengono strutture molto più complesse del modello di base. Un'altro metodo di modellazione è quello di creare letteralmente la struttura base di un oggetto poligono per poligono partendo da un immagine di sfondo caricabile nell'area di lavoro di un programma di grafica, un po' come quando si ricalca un immagine a mano. Naturalmente più alto è il numero dei poligoni che costituiscono oggetti complessi e migliore sarà la resa di quest'ultimi.

Alcuni esempi di primitive su cui lavorare per ottenere oggetti più complessi

Un esempio: partendo da un semplice parallelepipedo con opportuni comandi ho realizzato in meno di un minuto questo bicchiere, oggetto 3D più complesso e tondeggiante.

Lo stesso bicchiere riproposto con meno poligoni. Un oggetto costituito da meno poligoni è più semplice da calcolare e visualizzare ma il risultato è decisamente peggiore.
La base di un volto umano realizzata partendo dalla stessa primitiva utilizzata per modellare il bicchiere

 

 

 

 

 

 

 

Una delle caratteristiche più interessanti di PS2 è la possibilità di utilizzare le cosiddette Curve di Bezier. Fondamentalmente una curva è una linea tondeggiante ottenuta interpolando tra di loro una serie di punti. Per quanto riguarda le Curve di Bezier possiamo dire tratta di un particolare tipo di curva in cui ogni punto della curva (Bezier Corner) dispone di due punti di controllo. questo ne permette un efficace e versatile controllo che rende questo strumento una valida alternativa nella modellazione organica (modellazione di oggetti 3D rappresentanti esseri viventi come animali, uomini e piante). Da un punto di vista matematico le Curve di Bezier sono generate da funzioni semplici e non pesanti per la cpu che riesce in questo modo a generare le coordinate di un oggetto tondeggiante in meno tempo rispetto al calcolare la controparte poligonale.

Chiariamo in questa sede un'altra cosa: ogni volta che si parla di una console la prima cosa che si nota è la quantità di poligoni al secondo che il sistema è in grado di generare e muovere. Come detto nell'introduzione, senza effetti grafici attivati, PS2 è in grado di generare e visualizzare un picco massimo di 66 milioni di poligoni al secondo. Questo non significa che le scene generate da PS2 possano essere costituite da questa enorme quantità massima di poligoni. Ricordate che nel videogioco le immagini sono in movimento ed il movimento viene misurato attraverso gli FPS (frame per second o fotogrammi al secondo) Ogni animazione è costituita da un numero di poligoni variabili in movimento fotogramma dopo fotogramma, secondo dopo secondo. Pertanto per calcolare la massima presenza media di poligoni in ogni fotogramma si dovranno rapportare il numero dei poligoni per secondo al numero degli fps. Ad esemepio, consideriamo il motore grafico di un gioco che riesca a muovere circa 10 milioni di poligoni al secondo ad una velocità di 60 fps. Il numero medio dei poligoni presenti in ogni fotogramma sarà dato da 10 milioni diviso 60.

Il Texture Mapping

Passiamo adesso alla trattazione di un aspetto fondamentale nella grafica 3D: il Texture Mapping. E' in fase di texture mapping che gli ambienti ed i personaggi 3D acquisiscono realismo grazie all'applicazione di textures (o tessuti) che simulano veri e propri materiali virtuali, dalle rocce ai tessuti, dalla pelle all'acqua, dai mattoni alle cortecce degli alberi. Ogni oggetto tridimensionale per acquisire realismo o cmq un aspetto più "vivo" deve godere dell'applicazione di textures e questo avviene proprio durante il processo di texture mapping. Delle buones texture possono dare un ottimo aspetto anche a scene composte da un numero di poligoni essenziale.

Le due immagini qui proposte rappresentano la stessa scena 3D, cioè una caverna con un fuoco acceso. L'unica differenza è che nella prima immagine le textures sono state disattivate . Questo mette in evidenza strutture poligonali non dando l'effetto di realismo desiderato. Con un texture mapping corretto l'immagine avrebbe avuto un aspetto differente (si noti ad esempio il fuoco e la parete rocciosa) così come accade nella seconda figura. Questo è un semplice esempio dell'importanza del texture mapping.

In queste immagini viene riproposta una stessa scena 3D prima senza textures e poi con textures differenti per la seconda e la terza immagine. Questo mette in evidenza come, se ad una stessa scena applichiamo di volta in volta textures diverse, la resa finale cambia radicalmente.

 

E' possibile combinare diversi tipi di textures tra di loro per ottenere mappe più complesse e quindi ricche di particolari. Per fare un esempio: per un effetto fotorealistico le texture sono solitamente delle foto modificate attraverso programmi di fotoritocco e tramite i material editor dei programmi di grafica 3D. La loro natura è bidimensionale ma tuttavia attraverso opportune correzioni e sovrapposizioni è possibile creare delle textures su più livelli capaci di dare la sensazione di tridimensionalità. Un esempio possono essere le bump map, o mappe di rilievo. Il bump mapping è un metodo per simulare superfici scabrose, con rilievi (quindi tridimensionali), attraverso l'utilizzo di textures bidimensionali. Questo avviene per mezzo di un sistema di sovrapposizioni di più immagini che grazie a particolari algoritmi che processano le aree luminose della mappa bump andranno a generare in corrispondenza di quell'area un rilievo più o meno marcato. Il bump mupping tiene anche conto di eventuali cambi di illuminazione simulando sempre una scabrosità confacente alle opzioni impostate. L'utilizzo delle bump permette di risparmiare notevoli quantità di poligoni alleggerendo la cpu.

In queste immagini è possibile notare la texture di partenza (la foto di un marmo rosso, decisamente piatta), la bump map che verrà utilizzata (un negativo della foto in cui le aree + chiare rappresenteranno i punti di maggior rilievo) ed infine la bump map applicata all'immagine di partenza. Noterete la scabrosità acquisita dall'imamgine nella sua resa finale

Ad ogni modo le bump map non sono l'unico aspetto "rilevante" :) del texture mapping. Come abbiamo già detto per i fini fotorealistici si parte ssolitamente da una foto che verrà successivamente modificata per ottenere l'effetto desiderato. Un'altro modo per aggiungere particolari ad una mappa sono le texturer procedurali. Esse sono sostenute da particolari algoritmi casuali capaci di generare immagini infinite e mai uguali che si stendono lungo tutta l'area sulla quale sono applicate. l'utilizzo o l'aggiunta di una texture procedurale crea solitamente un effetto di maggiore varietà nella struttura dell'immagine, rendendola pertanto più interessante.

Differente è invece il concetto di textures ottenute utilizzando solo foto o immagini opportunamente modificate. Infatti, a meno che le dimensioni della texture non siano impostate per ricoprire interamente l'oggetto desiderato, gli algoritmi di applicazione della texture effettueranno un copia/incolla dell'immagine disponendola a ripetizione su tutto l'oggetto. Appare evidente che in determinate circostanze questa scelta potrebbe non essere la migliore, tuttavia se l'mmagine è "ritagliata" in maniera tale che nella sua ripetizione di sia una coincidenza perfetta l'effetto non sarà sgradevole. In talune situazioni, addirittura, è proprio l'ideale come ad esempio per immagini di pavimenti o mura di mattoni e via dicendo.

Due textures ripetute più volte su una parete. Nella visione di insieme della prima figura la ripetitività risulta monotona. Nella seconda immagine, invece, tale ripetitività è l'ideale per l'effetto desiderato, ovvero quello di muro o di un pavimento.

Le mappe di riflessione, invece, sono delle immagini che verranno applicate su uno specifico oggetto con il preciso compito di simulare solitamente la riflessione dell'ambiente circostante (ma non sempre). Applicando arbitrariamente un'immagine di riflessione il sistema si limiterà a posizionare la mappa nel punto e nel modo (riflessione planare, sferica etc.) che noi gli abbiamo specificato.

Mappa di riflessione planare evidente nello specchio d'acqua. Qui è anche evidente l'effetto Alpha Blending che verrà analizzato più avanti.

 

Altro aspetto interessante nel campo delle textures sono le cosiddette immagini di proiezione. Queste immagini vengono largamente usate per creare degli effetti di illuminazione interessanti. In pratica è come mettere un cartoncino ritagliato davanti ad un riflettore per ottenere delle figure luminose. Allo stesso modo sul riflettore virtuale verrà applicata un'immagine di proiezione nella quale le aree nere verranno processate ed interpretate come zone attraverso le quali la luce non potrà passare mentre le aree bianche saranno considerati come dei "buchi" o passaggi che saranno attraversati dal fascio luminoso colpendo gli oggetti desiderati e dando vita ad interessanti giochi d'ombra e di luce.

Ecco un semplice esempio di un'immagine di proiezione ed il suo utilizzo in una semplice scena. L'effetto, seppur semplice, dona ricchezza di particolari rendendo la scena quantitativamente e qualitativamente più piena

 

Introduciamo alla fine della sezione riguardante le textures il concetto di texel (che ci tornerà utile più avanti). Come il pixel è il punto base che costituisce un'immagine così il texel è il punto base, o elemento fondamentale, di una texture. Fondamentalmente sono la stessa cosa ma quando si parla di textures è sintatticamente più corretto parlare di texel e non di pixel.

 

Effetti Grafici

Siamo finalmente giunti alla descrizione degli effetti grafici che insieme al texture mapping sono così dispendiosi in termini di risorse fino al punto di ridurre di un terzo le capacità di visulalizzazione poligonali di un motore grafico. Tuttavia tali effetti sono necessari per la massima qualità possibile dell'immagine e la riduzione dei poligoni generati da CPU a favore di questi effetti è un sacrificio indispensabile per usufruire di tutti quei tocchi di classe che possono rendere eccezionale il comparto grafico di un prodotto ludico .

L'Alpha Blending è' un processo mediante il quale si gestisce la trasparenza di un pixel rispetto al sottostante attraverso una vera e propria fusione di più immagini. Grazie all'alfa blending si possono, per esempio, gestire effetti quali la foschia della nebbia e la trasparenza dell'acqua (vedere l'imamgine d'esempio delle mappe di riflessione e notare la trasparenza dell'acqua).

L'Antialiasing è una tecnica mediante la quale vengono smussate le parti di un'immagine che presentano dello scalettamento per ottenere una miglior qualità visiva. Con l'antialiasing si può, per esempio, eliminare il fastidioso aspetto scalettato dalle linee oblique. E' implementato, in genere, alle basse risoluzioni, dato che alle alte il maggior numero di pixel visualizzati tende ad attenuare naturalmente le scalettature e pertanto l’antialias sarà meno “forte". Esso opera attraverso un particolare algoritmo che riempie i bordi scalettati aggiungendo grandi quantità di pixel in quelle zone. Le risorse impiegate dall'Antialiasing sono enormi, basti pensare che in un programma di grafica 3D l'applicazione dell'Antialias ad un livello minimo può anche quintuplicare il tempo di rendering richiesto per ogni fotogramma.

Una stessa scena renderizzata prima senza antialias e poi con. Sono evidenti le scalettature nei contorni della prima immagine mentre nella seconda prevale un senso di continuità e di armonia del contorno grazie alla presenza di un maggior numero di pixel generati proprio dalle routines di antialias.

 

Il Bilinear Texture Filtering è metodo che serve per applicare una texture evitando il fenomeno della "quadrettazione" dei texel: si analizza un texel alla volta e si interpola con i 4 texel adiacenti per ottenere quello finale. In questa maniera vengono generate delle differenze cromatiche tra texel e texel molto vicine e pertanto morbide ed uniformi rendendo impossibile la visualizzazione dei singoli textel, difetto che affligge i giochi per PSone.

Trilinear texture filtering è tecnica simile al Bilinear Filtering utilizzata per applicare una texture in modo da eliminare il fastidioso effetto a quadretti. Si utilizzano 8 pixel e si interpolano per ottenere quello finale: il risultato è molto superiore a quello che si ottiene con il bilinear texture filtering. Tuttavia in termini di risorse è molto più dispendioso.Per questo processo si utilizza sempre il mipmapping.

Mipmapping è una sofisticata tecnica utilizzata nelle animazioni e nei giochi 3D per applicare le textures ad oggetti in movimento che si allontanano o avvicinano dall'osservatore. Grazie al mipmapping si sfruttano numerose versioni della stessa texture, diverse solo nella risoluzione, scegliendo di volta in volta quella con le dimensioni più appropriate in base alla grandezza del poligono su cui va applicata.

Il Gourad Shading è una tencnica di ombreggiatura tendente a smussare i poligoni e quindi rende possibile l'uniformità nella superfice degli oggetti 3D non visualizzando i singoli poligoni che li costituiscono. Il Gourad Shading utilizza un'algoritmo molto leggero e quindi non incide sulle prestazioni di un sistema.

Confronto tra una sfera senza ombreggiatura Gourad e la stessa sfera con tale opzione. Il Gourad Shading agisce sulla superficie della sfera rendendola liscia tuttavia non elimina la spigolosità del bordo dell'immagine . Questo dipende da numero di poligoni che costituiscono l'oggetto in questione. Maggiore sarà il numero di poligoni e migliore sarà la sensazione di rotondità del bordo.

 

E' detto Fogging l'effetto nebbia che si utilizza in una scena 3D per nascondere gli oggetti distanti sfumandone i loro colori verso un altro, generalmente il bianco. Questa tecnica, oltre a dare un gradevole effetto visivo, alleggerisce anche il carico di lavoro sul chip grafico in quanto i poligoni nascosti completamente dalla nebbia non vengono renderizzati.

Z-Buffer è una zona della memoria destinata a conservare le informazioni dell'asse z di un pixel: in parole povere, lo Z-Buffer contiene la profondità del pixel nello spazio. Utilizzando lo Z-Buffer si può effettuare una cernita di quali pixel dovranno essere renderizzati e quali no: dopo la generazione di un pixel, si confronta la sua profondità con quella del pixel precedentemente generato e, se risulta coperto, verrà eliminato dalla pipeline e non sarà renderizzato, alleggerendo i calcoli ed aumentando le prestazioni. Lo Z-Buffer può avere una precisione a 16, 24 oppure 32 bit: maggiori sono i bit utilizzati, più preciso è l'informazione memorizzata e migliore sarà la qualità finale del rendering.

Conclusione

E così siamo arrivati alla fine. A dire il vero in questo speciale sulla grafica 3D abbiamo trattato solo alcuni degli aspetti dell'argomento. Abbiamo tuttavia cercato di darvi informazioni tecniche nel modo più comprensibile possibile nella speranza di aiutarvi a comprendere il significato di determinati termini ricorrenti nelle recensioni o nelle prewiew. La grafica 3D è un mondo davvero affascinante e condividere con voi questo pezzetto di strada ci ha aiutato a ricordare che le riviste esistono soprattutto come mezzo di informazione e non di ostentazione di una conoscenza di termini e significati non accessibili a tutti. Ed è questo che abbiamo voluto fare: mettere quanti leggeranno quest'articolo nella condizione di comprendere il significato di quei tecnicismi che rivelano il perché un gioco è graficamente bello e che ci aiutano ad apprezzarne maggiormente il potenziale. In questo modo speriamo di aver migliorato la vostra comprensione delle questioni di natura meramente tecnica. Abbiamo inserito quante più immagini possibili in maniera tale che tutto fosse chiaro. Ad ogni modo è possibile che non siamo riusciti a spiegare determinati concetti con completa chiarezza . Se questo fosse accaduto vi preghiamo di farcelo sapere così che potremmo cercare di darvi tutta l'informazione che meritate.

Un saluto a tutti.

Roberto "nemesis" Cifra

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 

   

VI RICORDIAMO CHE QUESTO E' IL VECCHIO PLAY2EYE, PER IL NUOVO PS3 e forum Forum Videogiochi

 
 
 
   
   

Play2eye Italia, tutti i diritti riservati. E' assolutamente vietata la riproduzione del testo pubblicato in queste pagine, tutti i marchi citati sono Copyright dei legittimi proprietari. Questo sito è ottimizzato per essere visualizato con Internet Explorer 5 alla risoluzione di 1024*768 o 1280*1024.