Sui forum “tecnologici” di tutto il mondo si parla diffusamente di grafica 3D, gpu, alu, tmu, stream processor, vertex e pixel shader, antialiasing, ecc. Tutti termini che per gli addetti ai lavori e per chi ha una certa confidenza con una pipeline 3D sono non soltanto familiari ma evocativi di interi mondi: anzi, sarebbe opportuno dire “spazi“.
La creazione di un semplice oggetto 3D passa, infatti, attraverso più ambienti che ne definiscono le caratteristiche di posizione, forma, colore, consistenza, orientazione, trasformano queste caratteristiche in coordinate e mettono in relazione le coordinate di quell’oggetto con quelle di altri oggetti per farli interagire tra di loro.
L’idea di oggi è quella di passare in rassegna, in maniera sommaria, questi spazi e le loro caratteristiche, in modo da dare, anche a chi non avesse particolare dimestichezza con una pipeline 3D, almeno una vaga idea del lavoro che sta dietro la creazione di quelle immagini che siamo abituati a vedere quando giochiamo o usiamo programmi di computer grafica.
La creazione di una scena complessa passa attraverso alcune tappe elementari:
– la creazione dei singoli oggetti contenuti nella scena
– il posizionamento di questi oggetti all’interno di uno spazio che ne stabilisca una prima forma di relazione reciproca
– la definizione, all’interno di questo spazio, del punto di vista di un ipotetico osservatore e di alcuni parametri, come ad esempio, l’illuminazione
– la definizione dello spazio effettivamente visualizzato dall’osservatore in questione
– la rimozione di tutte le superfici nascoste alla vista dell’osservatore
– le operazioni di rendering
– la trasformazione di uno spazio 3D in uno 2D che possa essere visualizzato sul monitor di un pc.
Il primo passo è quello di definire un oggetto, ad esempio un cubo o un cilindro o un bicchiere. Per farlo si adopera uno spazio detto OBJECT SPACE o MODEL SPACE, in cui ogni singolo oggetto è rappresentato con un suo sistema di coordinate. Questo significa che, ad esempio nel caso del cubo, si fissa un punto, sul cubo o interno ad esso, come origine degli assi (sarebbe opportuno scegliere un vertice o il baricentro dell’oggetto) e si utilizza tale origine per definire la posizione e le dimensioni dell’oggetto in quello spazio; questo punto si definisce anche pivot point o object origin. Se nella scena compaiono altri oggetti, si fa la stessa cosa per ciascuno di essi, prendendo come origine, di volta in volta, un punto su ciascun oggetto.
Quindi ogni elemento risulta avere un suo proprio sistema di coordinate e ad ognuno è associato un pivot point tramite il quale è possibile traslare o far ruotare l’oggetto stesso che si muoverà come un corpo rigido, in quanto le sue coordinate restano solidali al punto di controllo. Caratteristiche di questo spazio sono l’utilizzo di coordinate “locali” (ogni oggetto ha le sue) e la facilità di modellazione.
Gli oggetti possono non essere in alcuna relazione tra loro e sono rappresentati in forma di vettori in coordinate omogenee con le loro normali; ciò significa che un oggetto tridimensionale sarà rappresentato da una quaterna di numeri (x, y, z, w). In tal modo, ad ogni terna di numeri x, y, z, corrisponderà una infinità di elementi simili nello spazio in coordinate omogenee, al variare di w.
Una volta definiti, gli oggetti sono posizionati all’interno di uno spazio comune, detto WORLD SPACE, in cui essi sono mesi in reciproca relazione spaziale potendo fare riferimento ad un sistema di coordinate unico. In grafica 3D si fa uso di una terna di riferimento “sinistra”, in cui il pollice rappresenta l’asse Y, il medio l’asse X e l’indice l’asse Z
In questo ambiente si definiscono anche le proprietà dei singoli oggetti e delle loro superfici, il tipo di animazione e di illuminazione. Il vantaggio dell’utilizzo di coordinate omogenee risiede nella possibilità di effettuare una trasformazione di coordinate, una traslazione, uno scaling, un operazione di shearing, una rotazione di un oggetto attorno ad uno dei suoi assi, ecc. facendo uso di moltiplicazioni tra vettori e matrici. Lo stesso posizionamento dei singoli oggetti all’interno del world space è effettuato tramite una moltiplicazione tra il vettore rappresentativo dell’oggetto e la matrice che definisce il nuovo sistema di assi.
A questo punto, abbiamo un insieme di oggetti elementari, di cui sono state definite le caratteristiche, posizionati all’interno di un ambiente, a formare una scena complessa. A questa scena, però, mancano ancora diverse cose: sono stati “fabbricati” alcuni oggetti a cui è stata data una forma, una dimensione e sono stati disposti all’interno di un determinato ambiente condaterminate caratteristiche; ma a questi oggetti mancano ancora colore e consistenza. Inoltre non c’è nessuno che possa muoversi all’interno di questo ambiente per esplorarlo.
Il prossimo passo sarà quello di mettere un osservatore all’interno della stanza e stabilire il suo punto di vista e la porzione o spazio dell’immagine che è in grado di visualizzare. Questo è quello che avviene nel VIEW SPACE o CAMERA SPACE.
Chi si rilegge! :)
E’ sempre un piacere. I miei rispetti, e auguri per il prosieguo della serie!
Bye!
ciao Marco; mi fa molto piacere risentirti.
Grazie per gli auguri
[…] scorsa puntata, avevamo creato gli oggetti e/o i personaggi presenti in una determinata scena e li avevamo […]
[…] si è già diffusamente parlato del funzionamento dei singoli stadi di una FF pipeline, mi limito a postarne l’immagine per […]
[…] aver analizzato la genesi delle primitive di un’immagine 3D e aver iniziato ad introdurre lo schema a blocchi di una gpu , passiamo, questa settimana, ad […]
professor yossarian sono un ragazzo di 31 anni da un pò di tempo mi gira in testa un idea di effetti in 3D visibbili ad occhio nudo e in movimento con delle specifiche azzioni nulla di anormale o di osceno non si preoccupi vorrei sapere se lei fosse interessato al mio proggetto che a mia veduta dovrebbe fruttare un bel po di milardi di euro
@ Gianni
Ti ringrazio per l’appellativo ma non sono professore ma solo un più modesto ingegnere elettronico.
Non che non mi interessi ma, probabilmente, e se non ho capito male, per il tuo progetto, hai bisogno più di qualcuno pratico di informatica. Io mi occupo di hardware e la mia conoscenza del software e dei linguaggi di programmazione è molto “scolastica” e poco approfondita rispetto a chi si occupa, invece, di scrivere software o fa, addirittura, il coder di professione.
Quindi, temo di non poterti, purtroppo, aiutare a sviluppare il tuo porgetto.
[…] chip grafici. Questa volta faremo un breve cenno alle tecniche di texture mapping e filtering. Nei tre articoli riguardanti la realizzazione di un’immagine 3D, avevamo visto che dopo aver disegnato le geometrie, disposto gli oggetti all’interno dello […]