Franny's Adobe

Il blog di Francesco Carucci
posts - 99, comments - 739, trackbacks - 6675

3D For Dummies: Bump Mapping e Normal Mapping

Chissa' se daro' seguito a questa idea del 3D For Dummies; al novanta per cento no, ma questa e' la prima (e molto probabilmente ultima) puntata.

Leggendo recensioni e speciali sui videogiochi si leggono spesso nomi di esotiche tecniche come Bump Mapping, Normal Mapping, Parallax Mapping. Ma che cosa sono? Concetti al di la' della comprensione umana, dedicati a pochi guru, di solito provvisti di enormi occhialoni? No, non lo sono, io porto le lenti a contatto.

Bump Mapping.

Una bumpmap e' un una texture dove per ogni texel (pixel della texture) e' memorizzata un'altezza in una qualche scala, invece di un colore. Oppure sono memorizzati due valori che indicano uno scostamento sull'asse x e sull'asse y (sono rappresentazioni equivalenti).
Per ogni pixel del poligono, si legge l'altezza associata dalla bumpmap e la si usa in "un qualche modo" per ottenere un qualche tipo di perturbazione del colore di un poligono che altrimenti varierebbe uniformemente, perche' il poligono per definizione e' "piatto". Ad esempio si puo' usare la bumpmap per modificare leggermente la posizione dalla quale si recupera il colore in una mappa di riflessione (la scena riflessa) per simulare l'acqua. Modificando la bumpmap ad ogni frame secondo un qualche parametro dipendente dal tempo si ottiene l'impressione delle onde. E' la tecnica usata per l'acqua di Halo 2 o Black&White 2 ad esempio (e tanti altri).

Nell'Environment Bump Mapping, si usa l'altezza presa dalla bumpmap per perturbare la posizione nell'environment map dal quale si recupera il colore (tecnica usata tantissimo in passato, ma soprattutto in Rogue Leader dei Factor 5 sul GameCube).

Normal Mapping.

Per capire la differenza fra Bump Mapping e Normal Mapping bisogna capiri prima che cos'e' una normale. La normale ad una superficie e' una freccia che per ogni punto della superficie punta dritto verso l'esterno. Rappresenta per certi versi la curvatura. La normale di un poligono e' per ogni punto una freccia che punta sempre nella stessa direzione: questo e' ovvio perche' un poligono e' "piatto". La normale di una sfera per ogni punto e' una freccia che punto all'esterno in una direzione che congiungi il centro della sfera con il punto in questione. Se disegnate un cerchio su un foglio e unite ogni punto del cerchio con il centro avete la direzione di ogni normale.
La normale si rappresenta in tre dimensioni come un vettore di tre numeri, ed ha sempre una lunghezza pari ad uno (quindi bastano in realta' due numeri e un verso per rappresentare una normale).
La normale e' usata per calcolare quanta luce riceve un punto della superficie data la direzione della luce: se la normale in punto guarda direttamente verso la luce, questo punto e' illuminato al massimo, se guarda nella direzione opposta questo punto non e' illuminato. E' un modello di illuminazione molto semplificato usato nel 99.99% dei giochi. (Ma non in Perfect Dark Zero ad esempio). Varie complicazioni del modello di illuminazione dipendono sempre e comunque dalla normale.
Ora, se un poligono ha la stessa normale in ogni suo punto perche' e' piatto, ne deriva che ogni punto del poligono e' illuminato allo stesso modo da una luce direzionale (il Sole ad esempio).
Ma se io per ogni punto del poligono prendessi da una texture map tre valori che mi rappresentano un vettore da "aggiungere" in qualche modo alla normale del poligono per far finta che il poligono non sia piu' piatto? Questo e' il Normal Mapping ed e' concettualmente piu' vicino alla tecnica che Blinn nel '76 (mi sembra) chiamo' Bump Mapping.
Quindi, quando si fa Normal Mapping, la texture map contiene tre valori (due in realta') che rappresentano una normale che varia per ogni punto del poligono che, una volta inserita nel modello di illuminazione, fa' si' che il poligono non appaia piu' piatto ma presenti tutta una serie di dettagli ad alta frequenza che spariscono nel momento in cui si toglie la luce (vedi Motorstorm).

Parallax Mapping.

Come visto prima, i dettagli ad alta frequenza nel Normal Mapping dipendono solo dalla luce e dalla sua posizione rispetto al poligono, ma non dipendono dalla posizione dell'osservatore rispetto al poligono stesso.
Nel Parallax Mapping si hanno in ingresso due texture, una che codifica la normale per ogni punto del poligono ed una che fornisce l'altezza di ogni punto del poligono (in realta' sarebbe teoricamente possibile ricavare la prima dalla seconda). Per ogni punto si legge la sua altezza dalla base del poligono, e poi si modifica la sua "posizione" nel mondo in base a questa altezza e alla direzione della telecamera rispetto al punto e si recupera il colore e la normale dalla diffuse map e dalla normal map in base a questo calcolo. Questo vuol dire che per lo stesso punto del poligono la sua normale e il suo colore saranno diversi a seconda della direzione dalla quale lo si guarda: simulando l'effetto di paralasse che si avverte guardando un muro, ad esempio, da due punti di vista differenti. Nota: diffidate quando qualcuno grida al parallax mapping guardando uno screen shot, perche' ci si accorge di questo effetto solo muovendo la telecamera ed e' impossibile distinguerlo da un banale normal mapping attraverso un solo screenshot.

Displacement Mapping.

Le tecniche precedenti lavorano tutte a livello di pixel e sono calcoli effettuati per ogni pixel della scena. Il Displacement Mapping e' una tecnica che si implementa a livello di vertice e consiste nell'associare ad un modello una texture map che per ogni suo texel codifica un'altezza; ogni vertice legge dalla height map la sua altezza e si "muove" lungo la sua normale di una quantita' pari a quel valore. Il Displacement Mapping non e' altro che una tecnica di compressione della geometria e serve a rappresentare un modello con certe caratteristiche con meno memoria. E' comunemente usato per rappresentare il terreno o l'acqua, molto piu' raramente per rappresentare modelli umanoidi o oggetti.

Ci sara' una seconda puntata? Mostratemi entusiasmo e scene di giubilo e cerco di vincere la mia pigrizia.

Print | posted on sabato 16 giugno 2007 11.47 | Filed Under [ Programming ]

Feedback

Gravatar

# re: 3D For Dummies: Bump Mapping e Normal Mapping

Francesco...sarebbe una serie di post FANTASTICA!
Mi sto (ri)avvicinando ad XNA e, dopo anni, la mia conoscenza del 3d si è fermata.

Ahimè, quando si è giovani, l'entusiasmo ti porta a studiare le cose + interessanti...poi le esigenze del mercato e gli impegni sempre + pressanti han fatto il resto!

Dai, mi farebbe tornare indietro ai tempi di Fidonet ed al suo gruppo sulle Demo...

IgorA.
16/06/2007 12.47 | Igor A.
Gravatar

# Re: 3D For Dummies: Bump Mapping e Normal Mapping

a me è piaciuto...sono cose che non uso al lavoro, ma qualche ispirazione o dettaglio tecnico reale e concreto per le mie bytes/adventures lo tiro fuori. Continua così...
17/06/2007 10.04 | Igor Damiani
Gravatar

# re: 3D For Dummies: Bump Mapping e Normal Mapping

Interessantissimo Fek :)
17/06/2007 12.44 | danteye
Gravatar

# re: 3D For Dummies: Bump Mapping e Normal Mapping

[Scena di giubilo]
[Scena di Gaudio]
...
Va bene? :P
Dai continua :)
18/06/2007 10.33 | Alessandro Ghizzardi
Gravatar

# re: 3D For Dummies: Bump Mapping e Normal Mapping

Ovvio che devi continuare !!
In ogni caso non sono proprio lezioni per dummies ;)

Per esempio dicendo che le normal maps contentgono solo 2 valori per pixel mi confermi la mia confusione con il bump mapping in cui perturbo la normale in base al valore della texture su x e y.

Grazie di aver dato una definizione di parallax mapping... ora continuo a studiare :D
19/06/2007 16.33 | Valerio
Gravatar

# re: 3D For Dummies: Bump Mapping e Normal Mapping

Il prossimo sarà sul tone mapping? :P
24/06/2007 15.56 | Federico Rebora
Gravatar

# re: 3D For Dummies: Bump Mapping e Normal Mapping

Si', e lo scrivi tu :D
24/06/2007 18.13 | Francesco
Gravatar

# re: 3D For Dummies: Bump Mapping e Normal Mapping

Se trovo le parole, volentieri :P
26/06/2007 0.29 | Federico Rebora
Gravatar

# re: 3D For Dummies: Bump Mapping e Normal Mapping

Molto interessante!!
29/06/2007 14.48 | Anonimo Veneziano
Gravatar

# re: 3D For Dummies: Bump Mapping e Normal Mapping

Ma postale su gameprog-ita!
29/07/2007 14.58 | nig
Gravatar

# re: 3D For Dummies: Bump Mapping e Normal Mapping

Grande Francesco!
Sembra che tu sia l'unico in grado di far sembrare semplici anche le cose che in realtà non lo sono. Questo accadeva sia quando postavi su HWUp che su altri siti o blog.
Se questa non fosse la prima e ultima l'ultima puntata ne sarei veramente contento. :)


BYEZZZZZZZZZZZ!!!!!!!!!!!!!!
22/08/2007 11.10 | Zak84
Gravatar

# Houston swingers clubs.

Mature swingers. Swingers.
26/04/2008 9.55 | Swingers clubs baton rouge.
Gravatar

# Rocking horse.

Chicks suck horse cock. Crazy horse. Horse breeding. Nc horse news. Horse classifieds. Horse fucking.
28/05/2008 5.01 | Horse mating video.
Gravatar

# Prep for anal intercourse.

Prep for anal intercourse.
03/08/2008 21.55 | Prep for anal intercourse.
Gravatar

# Girls flashing on spring.

Girls flashing videos. Girls flashing. Girls flashing all. Spring break girls flashing.
12/08/2008 23.08 | Ct girls flashing.
Gravatar

# Ultram.

Ultram. Low dose naltrexone with ultram.
09/02/2009 0.57 | Ultram.
Gravatar

# Swine flu.

1976 swine flu. 1976 swine flu scare. Reaction to swine flu vaccine.
04/05/2009 6.59 | Swine flu.
Gravatar

# occur ozone

economic process non protocol group web according 1800s
07/05/2009 7.08 | occur ozone
Gravatar

# Free vintage porn galleries.

Free porn downloads. Free porn pics. Free porn.
06/07/2009 4.34 | Free black porn.
Gravatar

# Free teen porn.

Teen porn. Free teen porn.
10/07/2009 3.26 | Teen porn.
Gravatar

# Xxx galleries.

Free xxx passwords. Xxx passwords. Kim possible xxx. Xxx videos. Asian xxx.
10/07/2009 5.37 | Free xxx clips.
Gravatar

# Cilias.

Cilias.
16/10/2009 4.42 | Cilias overdose.
Gravatar

# Lipitor atorvastatin.

Atorvastatin rosuvastatin lipitor crestor safety. Lipitor atorvastatin.
26/05/2010 11.18 | Lipitor atorvastatin.

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 6 and 1 and type the answer here:

Powered by: