La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Texturing Daniele Marini Corso di Programmazione Grafica.

Presentazioni simili


Presentazione sul tema: "Texturing Daniele Marini Corso di Programmazione Grafica."— Transcript della presentazione:

1 Texturing Daniele Marini Corso di Programmazione Grafica

2 Più modalità es. muro di mattoni: texture invece di modellazione –mappare una fotografia di un muro di mattoni su una superficie –simulare opacità del cemento e lucentezza dei mattoni con funzione immagine che modula la lucentezza –simulare la rugosità del mattone con bump mapping

3 Come opera durante il rendering per ogni locazione su una superficie: –la superficie viene orientata secondo il punto di vista –si applica il modello di illuminazione considerando luci e proprietà del materiale se necessario applicando effetti nebbia o trasparenza –il colore viene modificato secondo la funzione di texture –se presente si modifica il coefficiente di lucentezza secondo la funzione di lucentezza –se presente, si modifica la normale secondo la funzione di bump mapping

4 Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine Loperazione di mapping trasferisce limmagine sulla superficie

5 Pipe-line di texturing Calcola posizione nello spazio mondo Usa una funzione di proiezione MAPPING Usa una funzione di corrispondenza Applica funzione di trasformazione dei valori Modifica valore di illuminazione (x,y,z) Es: proiezione ortografica (proiettare una slide) (u,v) in (0,1) Da (0,1) a es. (256x256), trova valore in array R,G,B Es. moltiplica R,G,B per 1.1 per evitare valori troppo scuri Applica modello illuminazione con terna R,G,B

6 coordinate di textureLa configurazione di texture 2D è definita sul piano s,t - coordinate di texture normalizzate in [0,1] o in coord. di array, T(s,t) è la texture texelsGli elementi dellarray di texture sono i texels –La funzione di mapping associa a ogni punto delloggetto un unico valore di T, un unico texel

7 I valori di T sono espressi in (R,G,B) La terna viene usata per modificare la terna (r,g,b) del punto delloggetto come calcolata dal modello di illuminazione durante la fase di shading

8 Funzioni di proiezione proiezione piana o ortografica –piano su piano proiezione parametrica –piano texture su superficie parametrica proiezione sferica (a due passi) –piano texture su più superfici proiezione cilindrica (a due passi) –piano texture su più superfici

9 Proiezione piana le coordinate (s,t) della texture sono associate alle coordinate proiettate x,y

10 Proiezione parametrica Il mapping: se la superficie è parametrica un punto è: Si associa T(s,t) a p(u,v) Lassociazione può essere diretta (u=s, v=t) o lineare :

11 Proiezione parametrica –La funzione è invertibile se ae bd –La conversione alle coordinate schermo (trasfrmazione window-to-viewport): –Questo approccio non tiene conto della curvatura, la texture viene tirata (stretched) sulla superficie

12 Coordinate texture Diversi modi per ripetere la texture: Repeat, mirror, clamp, border: (0,0)(1,0) (1,1)(0,1) (u,v) in [0,1] (u 0,v 0 ) (u 1,v 1 ) (u 2,v 2 )

13 Metodo delle proiezioni intermedie Per evitare distorsioni nella proiezione occorre trovare un metodo che rispetti similarità La parametrizzazione non è una similarità Nel piano deve preservare gli angoli In generale deve preservare colinearità, mappare rette in rette Una soluzione è ricorrere a proiezioni intermedie

14 Proiezioni intermedie Scegliere una superficie intermedia S Mappare la texture su S Trovare una funzione di mapping da S alloggetto O La funzione di mapping può essere diretta o inversa

15 Proiezioni intermedie: due passi Al primo passo si sceglie la superficie intermedia S Al secondo passo si determina il metodo di proiezione da S ad O La proiezione può essere diretta o inversa

16 Primo passo: proiezione cilindrica –Per proiezione sferica e cilindrica si segue un approccio a due passi: Mappare su una sfera o un cilindro (oggetto intermedio) - S Mappare la struttura ottenuta sulloggetto finale - O

17 Primo passo: proiezione sferica si proietta sulla sfera con lequazione: dove: sono latitudine e longitudine sulla sfera; r x, r y, r z, sono direzioni di proiezione (riflessione), vettori normalizzati

18 Secondo passo nel secondo passo si sceglie come proiettare sulloggetto finale loggetto intermedio in funzione della normale al punto considerato sulloggetto - 3 modi principali: –Mappa diretta: proiezione da I su O con normali determinate su I –Mappa inversa: determina la normale su O in ogni punto e individua il punto su I –Mappa inversa: proiezione dal centroide di O con normali dirette dal centro delloggetto finale –Mappa inversa: normali determinate su O; il punto su O è la riflessione, vista dallocchio, del punto su I

19 Funzioni di corrispondenza Indicano come deve essere mappata la texture: –Wrap, repeat, tile: limmagine viene ripetuta come una piastrella –Mirror: limmagine viene ripetuta riflettendola verticalmente o orizzontalmente –Clamp to edge: i valori esterni a (0,1) sono forzati agli estremi, il bordo dellimmagine si prolunga su tutta la superficie –clamp to border: i valori esterni a (0,1) sono resi con un colore proprio, va bene per decalcomanie

20 Funzioni di modifica Replace: rimpiazza i valori R,G,B della texture agli r,g,b del modello di illuminazione - chiamato anche glow texture Decal per simulare decalcomanie: sfrutta canale alfa per modulare r,g,b,alfa con R,G,B,ALFA Modulate: moltiplica r,g,b per R,G,B

21 Image texture Mappare una immagine es. 256 x 256 su una superficie piana; se la superficie proiettata supera o è inferiore alla risoluzione dellimmagine: –Magnification –Minification

22 Magnification Nasce aliasing, si supera con interpolazione –Nearest neighbor: produce pixellizzazione, va bene per piccoli ingrandimenti (max fattore 2) –Interpolazione bilineare: smoothing –Altri filtri per ingrandimenti elevati (ricampionamento)

23 Magnification Nearest neighbor inpterpolazione bilineare

24 Interpolazione bilineare Interpola Linearmente i valori di texture di 4 texel vicini t1t2 t3 t4 i valore textur in i = Lrp(Lrp(t1, t3), Lrp(t2, t4))

25 Interpolazione bilineare t(u,v) individua il valore nella texture map b(u,v) filtered texel

26 Minification Molti texel possono cadere sullo stesso pixel –Ancora nearest neighbor, sceglie il texel più vicino al pixel, aliasing forte, soprattutto nella animazione –Ancora interpolazione bilineare: sceglie il texel medio per il pixel –Meglio ricampionamento dellimmagine, in modo da garantire un texel per pixel (frequenza di campionamento ottima)

27 Minification Molti texel coprono un pixel (sotto campionamento) Artefatti di sotto camp. un pixel Solutione: Accresci campioni o riduci la frequenza massima della texture metodi: 1.Mip-mapping 2.Rip-mapping 3.Sum Area Table

28 MipMapping Mip: multi in parvo –Limmagine di texture originale viene affiancata da molte versioni via via più piccole, mediante ricampionamento dellimmagine originale –Livello 0 originale –Livello 1 sottocampionato a un quarto (subtexture), si usa filtro gaussiano –Si prosegue fino alla risoluzione del pixel –Attenzione al gamma! per garantire brightness costante

29 MipMapping Per scegliere quale texture usare si usa un parametro d per cercare di ottenere un rapporto pixel:texel pari a 1:1 o 2:1 (frequenza di Nyquist) Se un pixel ingloba più texel si scende di livello d individua il livello, la terna (u,v,d) individua il texel, il campione si determina con interpolazione trilineare

30 Mipmapping Interpola tra i valori già interpolati in modo bilineare v u d Level n+1 Level n (u0,v0,d0)(u0,v0,d0)

31 Calcolare d per mipmapping Approssima il quadrilatero con un quadrato Rafforza la sfocatura! Per evitarlo si usa un filtro anisotropo: approssima il quadrilatero con un numero superiore di campioni mip-map più piccoli pixel proiettato sullo spazio texture A=area approssimata del quadrilatero b=sqrt(A) d = log 2 b texel

32 MipMapping Non mipmapping mipmapping

33 Anisotropic texture filtering

34 Ripmapping Rectim in parvo Si sottocampiona separatamente lungo u e v È un sottocampionamento anisotropo Permette di evitare effetti di sfocatura ai bordi Si crea una struttura ad array, la diagonale principale contiene la struttura mipmapping, lungo righe e colonne abbiamo le immagini sottocampionate lungo u e v. Si sceglie limmagine sottocampionata in relazione alla direzione di anisotropia si calcolano valori interpolati usando anche le immagini sottocampionate lungo u e v

35 Ripmapping

36 Summed area table filtro anisotropo - calcola il colore medio in una regione rettangolare nello spazio texture a velocità costante si usa un array 2d della stessa dimensione della texture, si usano più bit per maggiore precisione Ogni elemento nellarray memorizza la somma dei colori di tutti i texel fino allangolo in basso a sinistra

37 Summed area table - 2 usato per filtrare la texture pixel spazio pixel spazio texture Calcola il BB dellarea del pixel nella texture e usa SAT per calcolare il colore medio dellarea coperta dal BB x y

38 Summed area table - 3 Come si calcola la somma dei texel nellarea tra A e B? R A B C D R = SAT[B] – SAT[C] – SAT[D] + SAT[A] Il valore finale è la media: R / (numero texels in R)

39 Confronto Non filtering Mipmapping Summed area table

40 Texture mapping in OgL

41 Il texturing è fatto durante la rasterizzazione della primitiva mappa punti 3D in locazioni (pixel) sul display Ciascun frammento generato viene testato per la visibilità (z-buffer) e se visibile viene calcolato lo shading Durante linterpolazione di shading si calcola il valore di texture usando ancora interpolazione tra vertici estremi

42 Dichiarazione della texture Glubyte my_texels [512][512] /* dichiara una immagine di texture glTexImage2D(GL_TEXTURE_2D,0,components,512,512, 0,format,type, my_texels); /*specifica che limmagine deve essere una Texture components determina il numero di colori (da 1 a 4) format è determinato dai due parametri successivi (valori dei pixel e dim immagine) glEnable(GL_TEXTURE_2D)

43 Dichiarazione del modo di mapping glTexCoord2f(s,t) /* range di variazione delle coordinate dello spazio texture La texture viene associata alla primitiva allatto della dichiarazione: glBegin(GL_QUAD); glTexCoord2f(0.0, 0.0); glVertex2f(x1, y1, z1); glTexCoord2f(1.0, 0.0); glVertex2f(x2, y2, z2); glTexCoord2f(1.0, 1.0); glVertex2f(x3, y3, z3); glTexCoord2f(0.0, 1.0); glVertex2f(x4, y4, z4); glEnd();

44 Posso usare anche un intervallo inferiore di s e t, in tal caso viene mappata solo una parte della texture; OgL interpola i valori Cosa succede se si specificano valori di s e t esterni allintervallo 0,1? –Potremmo volere che la texture si ripeta periodicamente –Oppure vorremmo clampare gli estremi ed estendere 0 ed 1 per i valori inferiori o superiori glTexParameter(GL_TEXTURE_WRAP_S, GL_REPEAT) /*texture ripetute glTexParameter(GL_TEXTURE_WRAP_S,GL_CLAMP) /* texture clampate

45 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST|GL_LINEAR) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST|GL_LINEAR) GL_NEAREST adotta nearest neighbourgh GL_LINEAR applica un filtro smooth 2x2 Minification, magnification

46 mipmapping OgL permette di creare una serie di array di texture a risoluzione decrescente gluBuild2DMipmaps(GL_TEXTURE_2D,3,64,64,GL_RGB, GL_UNSIGNED_BYTE,my_texels) /* crea le texture 64x64-32x32-16x16-8x8-4x4-2x2-1x1 glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST) /*invoca lopzione mipmap

47 Modifica del colore Il colore può essere modulato (alfa blending) o coperto dalla texture: glTexEnv(GL_TEX_ENV,GL_TEX_ENV_MODE,GL_MODULATE) glTexEnv(GL_TEX_ENV,GL_TEX_ENV_MODE,GL_DECAL)

48 Bump mapping

49 Perturbazione della normale Funzione di bump d(u,v): Meglio perturbare la normale e non il punto

50 Environmental mapping Simula riflessioni a specchio senza ray tracing, chiamato anche reflection map Si calcola la proiezione dellambiente su una forma determinata (sfera per oggetti, cubo nel caso di ambienti chiusi) La proiezione viene trattata come una texture, ma la texture viene proiettata dal punto vista dellosservatore

51 Il programma applicativo deve calcolare la proiezione dellambiente sulla superficie intermedia (sfera o scatola) OgL genera automaticamente le coordinate di texture per un mapping sferico glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP) glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP) glEnable(GL_TEXTURE_GEN_S) glEnable(GL_TEXTURE_GEN_T)

52 Nebbia ed effetti di profondità Depth cueing Fog factor f viene trattato come il coefficiente alfa blending, è approssimato da una funzione del tipo GLFloar fcolor[4] = […] glEnable(GL_FOG) glFogf(GL_FOG_MODE,GL_EXP) glFoGf(GL_FOG_DENSITY,0.5) glFogfv(GL_FOG_COLOR, fcolor)


Scaricare ppt "Texturing Daniele Marini Corso di Programmazione Grafica."

Presentazioni simili


Annunci Google