La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Bump Mapping & Under-Water Effects

Presentazioni simili


Presentazione sul tema: "Bump Mapping & Under-Water Effects"— Transcript della presentazione:

1 Bump Mapping & Under-Water Effects
Dott. Stefano Tubini

2 Bump Mapping Il bump mapping è un metodo per simulare superfici scabrose, con rilievi, con textures bidimensionali. Per esempio: se realizziamo un oggetto che rappresenta un tronco di legno, le fenditure della corteccia, grazie al bump mapping, possono apparire tridimensionali anche se non sono realizzate realmente con poligoni. In questo modo, eventuali cambi di illuminazione possono far apparire tali solchi profondi anche se sono assolutamente piatti; grazie al bump mapping si possono, utilizzare molti meno poligoni per disegnare un oggetto 3D.

3 Bump Mapping Types Emboss Bump Mapping
Emboss non è il termine corretto: in realtà questo metodo si dovrebbe chiamare Multi-Pass Alpha Blended Bump Mapping, che rende molto meglio l'idea di come agisce. Con l'emboss bump mapping viene creata una texture monocromatica che è la mappatura luminosa della textures stessa. Riapplicandola sulla texture principale mediante il canale alfa, che gestisce la trasparenza dei pixel, si ottiene la texture finale. In pratica, si sfrutta la variazione dell'angolo di incidenza della sorgente luminosa per simulare la scabrosità della texture. Questo metodo di bump mapping è stato il primo realizzato ed è gestibile da quasi tutti i chip grafici, anche se l'incidenza sulle prestazioni dipende da come viene poi effettivamente implementato in hardware. La resa qualitativa non è eccellente.

4 Bump Mapping Types Environment map bump mapping :
è uno tra i metodi più nuovi apparsi nel campo della grafica 3D. Famoso è quello del G400, il chip Matrox che per primo ne ha diffuso in modo significativo l'utilizzo. L'environment map bump mapping utilizza 3 texture diverse: la texture di base, una bump map ed una environment map. La bump map contiene i valori di altezza dei particolari della texture di base. Per capire meglio riprendiamo l'esempio della texture della corteccia: avremo i solchi più profondi che rappresenteranno il livello di base, avremo i rilievi più alti che potranno sporgere di 10 unità, quelli intermedi di 5 unità, ecc... Tutti questi valori sono raccolti nella height map sotto forma di una matrice di valori. L'environment map è la matrice che contiene le informazioni su cosa deve essere fatto: in genere, l'environment map può essere una semplice mappa di illuminazione, ma può contenere anche altri effetti da applicare. Alla fine, quando le 3 texture sono combinate insieme, si ottiene quella finale che sarà applicata sul poligono.

5 Environment map bump mapping

6 Bump Mapping Types Dot3 Bump Mapping :
Questo metodo di bump mapping è anche detto Dot Product Perturbed Bump Mapping o Per-pixel lighting. L'algoritmo alla base del Dot3 mapping è relativamente semplice e si basa sulla creazione di una normal map, vale a dire una mappa dove i valori di ogni singolo pixel non rappresentano un colore come nelle texture convenzionali (secondo il classico schema RGB [red-green-blue]) ma vettori 3D, o normali (rette perpendicolari). A questo punto si esegue un prodotto (da cui "dot product") tra queste normali ed il vettore della luce: il risultato indica l'intensità di riflessione della luce per ogni pixel trattato. Modulando questo valore con il pixel della texture di base si ottiene la texture finale che sarà applicata all'oggetto.

7 Dot3 Bump Mapping Texture Normal Map Final Image

8 Bump Mapping (Normal Map)
Generata da programmi dedicati a partire dalla immagine della texture di partenza. Esiste un plugin del noto programma di grafica open-source Gimp per la loro creazione. La Normal map è rappresentata da una matrice a due dimensioni di valori di elevazione. Questa bump map è definita come la differenza scalare F(u,v) tra la superficie piatta P(u,v) e la superficie rialzata desiderata P'(u,v) lungo la normale N per ogni punto u,v della texture. I colori rosso, verde, e blu della Normal map rappresentano I valori delle X, Y, Z del vettore normale in ogni punto.

9 Bump Mapping (Teoria 1) Scostamento rispetto a u :
Scostamento rispetto a v : Calcolo della nuova normale :

10 Bump Mapping (Teoria 2) Il vettore normale a u,v è calcolato mediante il prodotto incrociato delle derivate parziali di P' in u e v. I valori Fu e Fv sono facilmente calcolabili come scostamenti della 2D bump map, e Pu e Pv possono essere calcolati direttamente dalle cordinate della superficie.

11 Dot3 Mapping (Codice) Associo normal map alla texture unit 0
glActiveTextureARB(GL_TEXTURE0_ARB); glBindTexture(GL_TEXTURE_2D, oggetto3D->normalMap); glEnable(GL_TEXTURE_2D); //Associo normalisation cube map alla texture unit 1. Normalisation cube map: può essere vista come 6 texture 2D posizionate in modo da formare un cubo. glActiveTextureARB(GL_TEXTURE1_ARB); glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, normalisationCubeMap); glEnable(GL_TEXTURE_CUBE_MAP_ARB); … Dot 3 Bump Mapping glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_DOT3_RGB_ARB); … Texture Rendering

12 Parallax Mapping Parallax Mapping è un miglioramento della tecnica del bump mapping applicata alle textures nelle applicazione di 3D rendering come i video games. Le textures, con l’utilizzo di questa tecnica avranno una maggiore profondità e realismo senza aumentare la loro complessità poligonale. Il Parallax mapping agisce su di una texture modificando le coordinate di ogni punto che la compone di un valore uguale a quello riportato nella normal map associata.

13 Parallax Mapping Senza Parallax Mapping Con Parallax Mapping

14 Under-Water Effects Componenti Effetto Sottomarino Colore sfondo.
Nebbia. Caustics su Oggetti Scena. Superficie marina. Moto ondoso della superficie.

15 Effetto Nebbia Rende più realistica la simulazione di visibilità sottomarina. La luce ha più difficoltà a penetrare in un mezzo denso come l’acqua rispetto all’aria. Le particelle d’acqua tendono a diffondere in ogni direzione la radiazione luminosa. GLfloat fogColor[4] = {0.23, 0.52, 0.99, 0.7}; glFogi (GL_FOG_MODE, GL_EXP); glFogfv (GL_FOG_COLOR, fogColor); glFogf (GL_FOG_DENSITY, 0.015); glHint (GL_FOG_HINT, GL_NICEST); glClearColor(0.23, 0.52, 0.99, 0.7);

16 Caustics 1 Riproducono l’andamento della luce che attraversa una superficie di acqua Textures generate mediante algoritmi matematici Riproducono pattern di immagini continui Esistono programmi che si occupano di generarle (Caustics Generator)

17 Caustics 2 La luce colpendo la superficie increspata dell'acqua genera degli effetti di focalizzazione o “caustics" sulle superfici subacquee (come sulle pareti di una piscina). Questo movimento lumimoso è un'indicazione importante per la distinzione tra ambientazioni subacquee e ambientazioni terrestri. I patterns caustici sono dinamici in modo che in ogni frame è possibile osservare una leggera variazione dell’effetto. Il piano di proiezione delle caustics textures è quasi tangente alla superficie marina rappresentata, così che le caustics disegnate appaiono sempre più allungate man mano che la superficie su cui sono riportate diviene verticale.

18 Caustics (Codice) …Caricamento Caustics Textures
for (int i=0; i<64; i++) { char filename[80]; BITMAPINFO *BitmapInfo; /* Bitmap information */ imageData = LoadDIBitmap(filename, &BitmapInfo); //Converti immagine in texture GLuint Texindex = i + 21; glGenTextures(1, &Texindex); glBindTexture(GL_TEXTURE_2D, i + 21); gluBuild2DMipmaps( GL_TEXTURE_2D, 3, BitmapInfo->bmiHeader.biWidth, BitmapInfo->bmiHeader.biHeight, GL_BGR_EXT, GL_UNSIGNED_BYTE, (const GLvoid *) imageData ); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); free(imageData); }

19 Caustics (Codice 2) …Disegno le Caustics Textures su un Oggetto
/* The 0.03 in the Y column is just to shift the texture coordinates a little based on Y (depth in the water) so that vertical faces (like on the cube) do not get totally vertical caustics. */ GLfloat sPlane[4] = { 0.05, 0.03, 0.0, 0.0 }; GLfloat tPlane[4] = { 0.0, 0.03, 0.05, 0.0 }; sPlane[0] = 0.05 * caustScale; sPlane[1] = 0.03 * caustScale; tPlane[1] = 0.03 * caustScale; tPlane[2] = 0.05 * caustScale; glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); glTexGenfv(GL_S, GL_OBJECT_PLANE, sPlane); glTexGenfv(GL_T, GL_OBJECT_PLANE, tPlane); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); //associo texture glBindTexture(GL_TEXTURE_2D,currentCaustic); glEnable(GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); … disegno oggetto glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T); glDisable(GL_TEXTURE_2D); }

20 Superficie Marina Mesh piana di triangoli.
Utilizza il bump-mapping per rendere più realistici gli effetti luce. Rappresenta un unico oggetto nella scena da rappresentare. La mesh sovrasta tutti gli oggetti che compongono la scena.

21 Superficie Marina (Moto ondoso)
Utilizzando la Idle function dell’OpenGL si aggiornano le posizioni dei punti della mesh. Ad ogni aggiornamento vendono ricalcolate sia le posizioni (x,y,z) di ogni vertice che le normali ad esse associate. Dispendioso in fatto di risorse CPU utilizzate. Formula utilizzata per la simulazione : Sinusoide NO !! Trocoide SI !! (come mi è stato ricordato da un ingegnere navale) Formula Trocoide :

22 Superficie Marina (Risultato)


Scaricare ppt "Bump Mapping & Under-Water Effects"

Presentazioni simili


Annunci Google