notJustCode.it
 
\\ Home : Articoli
Bump Mapping
Di RobyDx (del 25/07/2007 @ 12:03:35, in DirectX9, linkato 2049 volte)

Il bump mapping è semplicemente una delle operazioni permesse nella gestione delle texture multiple. Il bump mapping si ottiene infatti con almeno 2 texture una normale e una definita bump map. Il bump mapping consiste nella deformazione della texture normale tramite quella sottostante. Il risultato è molto spettacolare a patto di saperlo ben utilizzare.

bumpSample

Potete notare come l'immagine di sinistra risulti deformata. Se un immagine immobile non è niente di speciale farlo in movimento crea effetti veramente particolari. In questo modo si ottengono vibrazioni dell'immagine (esempio la deformazione delle immagini vicino a fiamme e all'asfalto bollente), rifrazioni (ambienti sottomarini), texture a rilievo (queste molto complesse). Come per altri componenti DirectX attivare l'effetto è facile, crearci qualcosa di bello un pò meno.

Teoria

Le bump map sono texture un pò particolari, differenti da quelle usate. normalmente. I formati da utilizzare nella creazione della texture sono

CxV8U8
Q16W16V16U16
Uyvy
A2W10V10U10
V16U16 *
Q8W8V8U8
X8L8V8U8 *
L6V5U5 *
V8U8 *

Quelle con l'* vicino sono quelle consigliate. I colori delle texture vengono utilizzati per i calcoli. Modificate il formato nella funzione che crea la texture. La texture sopra alla texture di bump viene visualizzata con i pixel spostati rispetto a questa formula

Du' =Du x M00 + DV x M10
Dv' =Du x M01 + DV x M11

Du' e Dv' sono le coordinate texture del punto sosì come verranno visualizzate sullo schermo. Du e Dv sono appunto i valori della texture bump chiamati valori delta (corrispondenti ai colori della bump map). M è una matrice 2x2 che viene passata al device. Nei formati oltre a U e V potete trovare anche L costituente la luminosità della texture (sempre in base alla bump). La formula con cui viene calcolata è

L'=LS+O

Dove L' è la luminosità finale, L è preso dalla texture mentre S e O sono due valori impostabili nel Device corrispondenti ai valori di scala di luminosità e offset di luminosità. Il bump mapping è una operazione multitexture quindi ora la attivarò in una texture con indice 0

device.TextureState(0).ColorOperation = TextureOperation.BumpEnvironmentMap
device.TextureState(0).ColorArgument1 = TextureArgument.TextureColor
device.TextureState(0).ColorArgument2 = TextureArgument.Current

Negli altri indici mettete le impostazioni come spiegato nel tutorial sulle texture multiple. Renderizzate la scena con la bump texture nell'indice zero e con quella da modificare nell'indice 1. Il gioco è fatto, la texture 1 è deformata da quella zero. Per ottenere comunque i risultati che volete dovrete intervenire nelle variabili spiegate nelle formule. La più importante è la matrice 2x2 (che se lasciata a zero annulla ogni effetto come vedete dalla formula).

device.TextureState(0).BumpEnvironmentMaterial00 = 0.01F
device.TextureState(0).BumpEnvironmentMaterial01 = 0.0F
device.TextureState(0).BumpEnvironmentMaterial10 = 0.0F
device.TextureState(0).BumpEnvironmentMaterial11 = 0.01F

Questo è un settaggio. I valori sono single.

Questi invece sono quelli usati per la luminosità

device.TextureState(0).BumpEnvironmentLuminanceScale = 1.0F
device.TextureState(0).BumpEnvironmentLuminanceOffset = 1.0F

Ottenere una bump map

Come ho detto la bump map deve essere una texture caricata da file (o generata come vi pare) quindi un'immagine caricata da file (bmp, jpg, tga etc). La bump map deve contenere una immagine che rappresenti la deformazione della scena (per un moto ondoso potete ad esempio disegnare delle linee ondulate sfumate). Le possibilità sono molte. Una di queste è quella di utilizzare texture in scale di grigio e caricarle. La migliore è quella di usare un normal map generator, un semplice programmino che data una immagine ne genera una perfetta per questi effetti (se provate con una grigia e una normalizzata da questa vedrete che la normalizzata è molto più incisiva) . Ne trovate freeware su molti siti ma i migliori sono quelli della nVidia e della ATI (linkati dalla sezione Game & Code).

Esempi

In genere tutti gli effetti si ottengono utilizzando un formato di vertice con più coordinate texture. Infatti in questo modo è possibile spostare le diverse texture ed è proprio questo spostamento a generare l'effetto di bump mapping.

Effetto di texture a rilievo

Questo effetto richiede 3 texture

Nello strato più basso si inserisce la normale texture mentre in seconda posizione si mette la bump map del rilievo (di solito la stessa texture ma in bianco e nero). Infine la texture più in alto deve essere una texture volumetrica che riflette l'ambiente circostante. La texture volumetrica verrà deformata da quella sotto che a secondo di come sarà spostata farà in modo che l'oggetto sembri in rilievo. La cosa è meno semplice del previsto dato che non è sempre semplice muovere le coordinate texture della bump map in modo da essere sempre orientata nel modo migliore.

Effetto di deformazione

Questo effetto è più semplice, più veloce e utilizzabile in migliaia di situazione. Usate nella prima posizione una bump map e sopra un'altra texture. Muovete le coordinate texture come volete per generare l'effetto.

L'esempio riguarda questo ultimo e consiste inĀ  una immagine che viene usata come texture su un rettangolo e deformata in modo che sembri di guardare l'immagine sott'acqua. Provate ad usare diverse bump map o meglio ancora ad usare il render to surface per renderizzare l'intera scena sulla texture e poi deformarla (un sistema semplicissimo per creare un gioco subacqueo davvero convincente). Fate prove e prove.

Ultimo consiglio: controllate la compatibilità della vostra scheda o non vedrete nulla.

Esempio VB.Net

Articolo Articolo  Storico Storico Stampa Stampa
I commenti sono disabilitati.
"La tecnologia non tiene lontano l'uomo dai grandi problemi della natura, ma lo costringe a studiarli più approfonditamente."

Antoine de Saint-Exupéry


Cerca per parola chiave
 

Titolo
Articoli (4)
C++ (4)
Direct3D10 (30)
Direct3D11 (20)
DirectX9 (82)
DotNet (10)
English (9)
FanGames (22)
ManagedDX11 (2)
Materiale Utile (4)
News (39)
Shader Library (12)
SharpDX (1)
Software (25)
Tecnologia (19)
Varie (9)

Gli interventi più cliccati

Ultimi commenti:
If you wish to retai...
23/05/2013 @ 13:07:45
Di chanel outlet
You deficit of self-...
23/05/2013 @ 13:07:13
Di cartier watches uk
Reinforce your own l...
23/05/2013 @ 13:06:37
Di replica watches
Whenever you"re shiv...
23/05/2013 @ 13:06:11
Di swiss replica watches
It's likely you have...
23/05/2013 @ 13:05:02
Di chanel handbags
Cheap automobile ins...
23/05/2013 @ 13:04:28
Di replica watches

Titolo
Con quale tecnologia state realizzando o avete intenzione di realizzare i vostri progetti?

 DirectX11
 DirectX10
 DirectX9
 XNA
 DirectX8 o Precedenti
 OpenGL
 Motori grafici già pronti
 Altro

Titolo
Umorismo (17)

Le fotografie più cliccate



Ci sono 62 persone collegate
Sono state visualizzate  pagine

23/04/2024 @ 11:39:10
script eseguito in 54 ms