Architetture per
la grafica 3D
Le problematiche della
grafica tridimensionale
La grafica tridimensionale
Per riuscire a comprendere a pieno le motivazioni che
hanno determinato le scelte effettuate nelle architetture
utilizzate per la grafica 3D, occorre capire come funzioni il
processo di generazione di una immagine tridimensionale.
Inizieremo quindi con una panoramica cronologica di quali
siano i passi necessari per generare una immagine
tridimensionale.
Porremo quindi anche attenzione ai dati necessari per
creare determinati tipi di immagini.
Marco Gribaudo
[email protected]
La grafica tridimensionale
Ogni oggetto tridimensionale, viene codificato solamente
mediante la sua superfice: salvo casi particolari "l'interno" di un
oggetto non viene mai modellato.
La grafica tridimensionale
La grafica tridimensionale
Ogni superfice viene generalmente memorizzata tramite una
insieme di poligoni adiacenti (chiamata Mesh).
La grafica tridimensionale
Questi poligoni vengono a loro volta suddivisi in triangoli.
In geometria e' noto che per tre punti non
allineati passa un solo piano.
La grafica tridimensionale
Tre punti non allineati delimitano un
triangolo.
La grafica tridimensionale
I triangoli vengono a
loro volta memorizzati
attraverso l'insieme dei
vertici che li delimitano.
Semplificando: i modelli
tridimensionale vengono
codificati come insiemi di
vertici.
La grafica tridimensionale
Quando una scena
viene composta, i
singoli oggetti che
vi appartengono
vengono
"spostati" dalla
posizione in cui
sono stati
memorizzati in
quella dove
devono essere
collocati.
La grafica tridimensionale
Qualsiasi poligono formato da un numero
superiore di punti, potrebbe non giacere
su un unico piano.
La grafica tridimensionale
Ogni oggetto viene memorizzato mediante le coordinate dei
suoi vertici in una posizione di riposo (coordinate locali).
La grafica tridimensionale
Queste operazioni di "spostamento" vengono
chiamate trasformazioni.
Le trasfosmazioni base sono 3:
Translazione
Rotazione
Variazione di scala
La grafica tridimensionale
La grafica tridimensionale
Ogni vertice viene memorizzato attraverso le sue
coordinate.
y
Il sistema di coordinate utilizzate e' una
particolare estensione del sistema cartesiano,
chiamato coordinate omogenee.
}w
x
z
In coordinate omogenee un punto viene descritto da 4
numeri x, y, z e w. Le coordinate x,y e z sono
coordinate cartesiane, mentre w rappresenta una scala.
La grafica tridimensionale
y
x
z
La grafica tridimensionale
(2,2,2,1)
(2,2,2,1)
(2:1, 2:1, 2:1)
(1,1,1,0.5)
(1,1,1,0.5)
(1:0.5, 1:0.5, 1:0.5)
(5,5,5,2.5)
(5,5,5,2.5)
(5:2.5, 5:2.5, 5:2.5)
In coordinate omogenee, ad un punto corrispondono
piu' quaterne diverse (tutte quelle in cui i 4 numeri
sono multipli di uno stesso fattore). Queste coordinate
servono per implementare la prospettiva.
La grafica tridimensionale
Le trasformazioni (capaci di riposizionare un
oggetto nello spazio), vengono codificate
attraverso matrici 4x4.
Le coordinate di un vertice sottoposto ad una
trasformazione, si calcolano moltiplicando il
vettore contenente la coordinata omogenea del
punto, con la matrice che ne codifica la
trasformazione.
(2,2,2)
Per ottenere la coordinata cartesiana
equivalente e' sufficente dividere le prime 3
componenti per l'ultima.
La grafica tridimensionale
Oltre agli oggetti
presenti in una
scena
tridimensionale,
vengono anche
memorizzate
apposite
"cineprese" con cui
inquadrare il
mondo virtuale
creato.
La grafica tridimensionale
L'immagine
bidimensionale
visualizzata sul
monitor viene
ottenuta
"proiettando" i vertici
che definiscono le
geometrie
trasformate sul piano
di inquadratura della
cinepresa.
La grafica tridimensionale
In coordinate omogenee, anche la proiezione sul
piano di ripresa puo' essere realizzata
moltiplicando il vettore che rappresenta un
vertice con una opportuna matrice.
Occorre pero' poi uniformare la scala,
effettuando una divisione (come visto prima).
La grafica tridimensionale
La grafica tridimensionale
Dopo aver effettuato le operazioni di proiezione, si ottengono
un insieme di coordinate schermo, che unite tra di loro,
costituiscono i contorni degli oggetti tridimensionali.
Ricapitolando, per visualizzare un oggetto sulla
scena occore:
- Considerare uno ad uno tutti i suoi vertici
- Trasforamare e proiettare ogni vertice (un
prodotto vettore per matrice)
- Dividere per uniformare i risulatati (una
divisione di vettore per scalare)
- Unire i punti ottenuti
La grafica tridimensionale
Le immagini create in questa modalita' vengono dete
Wireframe, e corripondno piu' o meno a quelle dei videogiochi
dei primi anni 80.
La grafica tridimensionale
Per poter aver un po' piu' di
realismo, nella scena
vengono anche codificate
delle sorgenti luminose.
La grafica tridimensionale
Per simulare l'effetto di una luce e calcolare il colore esatto di
un Pixel, occorrono tre informazioni: la direzione del raggio
luminoso, la direzione dell'osservatore e la normale alla
superfice.
n
l
θ
r
θ
La grafica tridimensionale
Le formule che calcolano l'effetto delle sorgenti luminose sono
piuttostto complesse, e richiedono il calcolo di funzioni
trascendenti.
o
α
La grafica tridimensionale
Per una superfice
piana, tutti i suoi punti
presentano la normale
orientata nella stessa
direzione. Inoltre la
direzione della
normale puo' essere
ottenuta direttamente
dalle posizioni dei
vertici dei triangoli
che compongono la
figura.
La grafica tridimensionale
Questo tipo di grafica viene detto "Flat shaded" e
corrisponde a quello dei videogiochi di meta' anni ottanta.
Iλ = ksλ + Iaλ kaλ +
+ Σi fatt_i Ipλ_i ( kdλ cosθ_i + kwλ cosn α_i)
La grafica tridimensionale
Per rappresentare una superfice piana e' quindi
sufficiente calcolare la formula che ne determina
il colore (detta Shader), una volta per faccia.
Invece che unire i punti proiettati sul piano della
cinepresa con linee, li si unisce mediante triangoli
"pieni", la cui colorazione e' dettata dallo shader.
La grafica tridimensionale
In una superfice curva, ogni punto della stessa
presenta un normale differente.
I modelli vengono quindi arricchiti di una
informazione in piu': le normali alle sue
superfici!
La grafica tridimensionale
La grafica tridimensionale
Generalmente viene memorizzata solamente una normale
distinta per vertice, e poi per interpolazione vengono calcolate
le normali interne ad ogni triangolo.
Lo shader valuta quindi il colore della superfice
per vertice o per pixel.
Nel primo caso, i colori calcolati per i vertici
vengono interpolati per determinare i colori dei
punti interni ai triangoli.
Il secondo invece offre una qualita' grafica
superiore, al prezzo di un notevole incremento
nei tempi di calcolo.
La grafica tridimensionale
Per rendere piu' realistiche le
superfici, su queste vengono
applicate delle immagini dette
texture.
La grafica tridimensionale
Inoltre, ad ogni
vertice viene aggiunta
una informazione che
permetta di
identificare
correttamente quale
parte della texture
debba venire applicata
su di esso (coordinata
di mappatura).
La grafica tridimensionale
La codifica di un modello quindi, richide oltre alle coordinate
dei suoi vertici, anche le immagini delle texture da applicare
sulle sue superfici.
La grafica tridimensionale
Durante la visualizzazione, i triangoli non
vengono piu' visualizzati sfumando (mediante gli
shader) una tonalita' uniforme, ma ricavando il
colore dalla texture.
Questo richiede un ulteriore lavoro per ricavare il
colore corrispondente al pixel che sta venendo
disegnato (detto Texture Look-up)
La grafica tridimensionale
La grafica tridimensionale
Questo corrisponde indicativamente alla grafica utilizzata nei
video giochi di meta' anni 90
Quando poi si devono modellare personaggi con
pelli "deformabili", allora ogni vertice viene
calcolato effettuando una media pesata di piu'
trasformazioni (in genere fino a 4).
Inoltre, nelle applicazioni odierene, per ottenere
effetti piu' realistici vengono utilizzate piu'
texture (Light Map, Normal Map, Environment
Map ...), richiedendo quindi un lavoro superiore
di Texture Lookup.
La grafica tridimensionale
Parallelamente al problema di ricavare i colori e le
posizioni corrette dei pixel sulla scena, vi e' quello
di stabilire l'ordine con cui appaiono gli oggetti
sulla scena.
Infatti alcuni oggetti potrebbero essere oscurati
da altri che vi si trovano davinti, od essere
semplicemente invisibili poiche' alle spalle
dell'osservatore.
Il "back face culling"
La tecnica del back face culling, consiste
nell'eliminare le facce "posteriori" di un solido
Se si ordinano i vertici delle facce di un solido
in senso orario, e' possibile determinare
facilmente quali superfici siano "davanti"
(visibli) e quali dietro.
La grafica tridimensionale
La fase in cui si stabilisce quali oggetti siano
visibili viene detta Clipping.
Una volta determinati gli oggetti che rientrano
nella scena, questi vengono visualizzati in ordine
arbitrario, utilizzando due tecniche speciali
chiamate back-face culling e z-buffer per
visualizzare solamente le superfici non occultate.
Il "back face culling"
Immaginiamo che i vertici di una faccia di
un solido siano ordinati in senso orario
quando osserviamo tale faccia "in fronte".
Il "back face culling"
La proiezione dei vertici sara' orientata in
senso orario per le faccie visibili.
Il "back face culling"
E' possibile determinare, con due semplici
calcoli, la direzione della proiezione dei vertici
di una faccia rispetto ad un osservatore - e
quindi stabilire se essa sia visibile o meno.
Tale tecnica e' utilizzata per non disegnare i
triangoli che appartengono alle facce posteriori
degli oggetti.
Lo Z-Buffer
Ed in senso antiorario per le faccie
nascoste.
Lo Z-Buffer
La tecnica piu' semplice per determinare
quali oggetti siano visibili e quali oscurati
e' quella dello z-buffer.
Tale tecnica richiede di memorizzare un
dato addizionale per ogni pixel generato.
L'area di memoria in cui questo dato viene
memorizzata e' detta z-buffer.
Lo Z-Buffer
L'algoritmo considera una per una tutte le
superfici visibili e determina i pixel da essa
occupati.
3
2
Il "back face culling"
1
Per ogni pixel vengono calcolati il colore e
la distanza dall'osservatore.
20
Lo Z-Buffer
Lo z-buffer memorizza la distanza dall'osservatore di
ogni pixel presente sullo schermo.
Lo Z-Buffer
Ogni volta che un nuovo pixel viene generato,
viene confrontata la sua distanza con quella
precedentemente memorizzata nello z-buffer.
20
20
20
10
Lo Z-Buffer
Lo Z-Buffer
Se la distanza del nuovo pixel e' minore del valore
presente nello z-buffer, questo sostituisce il punto
precedente, in quanto piu' vicino all'osservatore.
Se invece la distanza e' maggiore, il nuovo
pixel viene scartato in quanto "dietro" rispetto a
quello gia' presente sullo schermo.
30
20
10
10
10
Lo Z-Buffer
La tecnica dello z-buffer e' molto semplice
da realizzare ma richiede notevole spazio
di memoria addizionale.
Inoltre tutti gli oggetti visibili nella scena
devono essere considerati: e' necessario
generare anche i pixel corrispondenti ad
oggetti completamente oscurati.
Lo Z-Buffer
Lo z-buffer e' generalmente realizzato
mediante hardware dedicato.
Ormai praticamente tutte le schede video
comunemente installate sui nuovi PC
implementano lo z-buffer, rendendone
estremamente veloce e flessibile l'utilizzo.