|
In occasione del debutto della scheda video Matrox Parhelia,
avvenuta circa 2 anni fa, una delle caratteristiche più interessanti presentate da Matrox
era il supporto hardware al Displacement Mapping, tecnologia implementata nelle API
DirectX 9 ma almeno sino ad ora poco implementata. L'Hardware Displacement Mapping si compone di due distinte parti, il
Depth-Adaptive Tessellation e il Vertex Texturing: vediamo in dettaglio di cosa si tratti
e come operino.
La geometria di una scena 3D è definita da una mesh, cioè
dall'insieme dei triangoli che connessi tra di loro rappresentano la superficie degli
oggetti 3D che compongono la scena. Le tecniche di tessellazione (Tessellation) permettono
di generare un maggior numero di triangoli a partire dai triangoli base che compongono gli
oggetti 3D: aumentando il numero dei triangoli aumenta il numero di elementi che
compongono la mesh, di conseguenza il dettaglio con il quale i singoli oggetti 3D vengono
costruiti nella scena.
Sulla tessellated mesh viene applicata una displacement map:
questa è niente altro che una immagine bitmap, tipicamente di dimensioni 64 x 64 x 8bit,
con vari livelli di colore per ogni pixel (in toni di grigio, per la precisione); in base
all'intensità del colore, più chiaro o più scuro, corrisponde una specifica altezza
nello spazio del pixel corrispondente sulla tessellated mesh. In altre parole, le
informazioni contenute nella displacement map servono per trasferire in piano
tridimensionale i triangoli che compongono la tessellated mesh.
Una volta applicata la displacement mesh l'immagine finale
viene renderizzata, applicandone le varie textures ed eventualmente vertex shaders e pixel
shaders, ottenendo la scena finale che appare a monitor.
Le mesh possono essere di vario tipo: una base mesh è
composta da due soli triangoli; una linear tessellated mesh è una base mesh con un
maggior numero di triangoli ottenuti per interpolazione. La linear tessellated mesh può
essere a sua volta elaborata con un procedimento di N-Patch, così da ottenerne una
superficie curva, oppure su di essa può essere applicata una displacement map così da
ottenere una vertex textured mesh, nella quale i vari pixel hanno altezza variabile a
seconda dei dati contenuti nella displacement map.
L'operazione di tessellation permette di
arricchire le informazioni di natura geometrica che compongono la scena 3D riprodotta. In
base al punto di osservazione dell'utente, la maggiore geometria fornita con l'operazione
di tessellation permette di arricchire notevolmente i dettagli degli oggetti in primo
piano. Allo stesso modo, però, viene influenzata la geometria anche degli elementi in
secondo piano, che per la loro particolare posizione all'interno della scena non
richiedono un dettaglio così elevato.
Per risparmiare il numero di calcoli richiesto al sistema, diminuendo il numero
complessivo di triangoli che compongono la scena, è possibile adottare tecniche di
Dept-Adaptive Tessellation, cioè la tessellazione in funzione della profondità. In
parole povere, all'aumentare della distanza di un oggetto dal punto di osservazione viene
ridotto il numero di triangoli utilizzato per comporlo, così da mettere a disposizione
della GPU una superiore potenza di calcolo.
L'approccio della Dept-Adaptive Tessellation può essere
utilizzato, in modo molto intuitivo, anche con le displacement map: in altro modo, in
funzione della lontananza dal punto di osservazione della scena varia il numero di
triangoli utilizzato per comporre gli oggetti 3D, pertanto sempre in funzione del punto di
osservazione possono essere utilizzate differenti displacement map, che intervengono sulla
tessellated mesh a generare la posizione verticate dei singoli triangoli, in modo
completamente dinamico in funzione dello spostamento del punto di osservazione. Anche in
questo caso, la logica di fondo parte dal presupposto che più lontano è il punto di
osservazione, minori dettagli saranno distinguibili in modo chiaro e quindi meno
informazioni si renderanno necessarie per costruire gli oggetti.
La tecnica del displacement mapping può ricordare, per
alcuni versi, il bump mapping. Scopo del bump mapping era quello di creare l'impressione
che su un oggetto 3D fossero presenti variazioni (bumps) della superficie, mentre il
displacement mapping non crea un'illusione ma genera effettivamente sull'oggetto 3D
riprodotto una variazione di superficie.

Nell'esempio, la testa di un dinosauro al quale sulla
sinistra è stata applicata una mesh; sulla destra è stato applicato il colore del
materiale utilizzato per la superficie.

Applicando una displacement map sulla mesh la superficie del
dinosauro si presenta ricca di increspature, piccole variazioni e dettagli, rendendo
l'oggetto molto più realistico. A differenza dell'utilizzo di tecniche di bump mapping,
con una displacement mapping il realismo ottenuto è estremamente più elevato, in quanto
non si ha la percezione degli avvallamenti presenti sulla superficie ma questi sono
realmente presenti.
|