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

Bump Mapping & Under-Water Effects Dott. Stefano Tubini

Embed Size (px)

Citation preview

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

Bump Mapping & Under-Water Effects

Dott. Stefano Tubini

Page 2: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

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.

Page 3: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

Bump Mapping Types

Emboss Bump MappingEmboss 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.

Page 4: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

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.

Page 5: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

Environment map bump mapping

Page 6: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

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.

Page 7: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

Dot3 Bump Mapping

Texture Normal Map Final Image

Page 8: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

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.

Page 9: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

Bump Mapping (Teoria 1)

Scostamento rispetto a u :

Scostamento rispetto a v :

Calcolo della nuova normale :

Page 10: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

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.

Page 11: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

Dot3 Mapping (Codice)

Associo normal map alla texture unit 0glActiveTextureARB(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

glActiveTextureARB(GL_TEXTURE1_ARB);

…glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_DOT3_RGB_ARB);…… Texture Rendering

Page 12: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

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.

Page 13: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

Parallax Mapping

Senza Parallax Mapping Con Parallax Mapping

Page 14: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

Under-Water Effects

Componenti Effetto Sottomarino Colore sfondo. Nebbia. Caustics su Oggetti Scena. Superficie marina. Moto ondoso della superficie.

Page 15: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

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);

Page 16: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

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)

Page 17: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

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.

Page 18: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

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 textureGLuint 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);}

Page 19: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

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 textureglBindTexture(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);

}

Page 20: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

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.

Page 21: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

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 :

Page 22: Bump Mapping & Under-Water Effects Dott. Stefano Tubini

Superficie Marina (Risultato)