1 / 47

Texturing

Corso Di Programmazione Grafica aa2007/2008. Texturing. Daniele Marini. Più modalità . es. muro di mattoni: texture invece di modellazione mappare una fotografia di un muro di mattoni su una superficie

Download Presentation

Texturing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Corso Di Programmazione Grafica aa2007/2008 Texturing Daniele Marini

  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 Programmazione Grafica aa2007/2008

  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 Programmazione Grafica aa2007/2008

  4. Texture mapping • 2D, 3D o 4D • La texture è una qualsiasi immagine • L’operazione di mapping trasferisce l’immagine sulla superficie Programmazione Grafica aa2007/2008

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

  6. La 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 • Gli elementi dell’array di texture sono i texels • La funzione di mapping associa a ogni punto dell’oggetto un unico valore di T, un unico texel Programmazione Grafica aa2007/2008

  7. I valori di T sono espressi in (R,G,B) • La terna viene usata per modificare la terna (r,g,b) del punto dell’oggetto come calcolata dal modello di illuminazione durante la fase di shading Programmazione Grafica aa2007/2008

  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 Programmazione Grafica aa2007/2008

  9. Proiezione piana • le coordinate (s,t) della texture sono associate alle coordinate proiettate x,y Programmazione Grafica aa2007/2008

  10. Proiezione parametrica • Il mapping: se la superficie è parametrica un punto è: • Si associa T(s,t) a p(u,v) • L’associazione può essere diretta (u=s, v=t) o lineare : Programmazione Grafica aa2007/2008

  11. Proiezione parametrica • La funzione è invertibile se ae ≠ bd • La conversione alle coordinate schermo: • Questo approccio non tiene conto della curvatura, la texture viene tirata (stretched) sulla superficie Programmazione Grafica aa2007/2008

  12. 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 Programmazione Grafica aa2007/2008

  13. Proiezioni intermedie • Scegliere una superficie intermedia S • Mappare la texture su S • Trovare una funzione di mapping m da S all’oggetto O • La funzione di mapping può essere diretta o inversa Programmazione Grafica aa2007/2008

  14. 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 m può essere diretta o inversa Programmazione Grafica aa2007/2008

  15. 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 sull’oggetto finale - O Programmazione Grafica aa2007/2008

  16. Primo passo: proiezione sferica • si proietta sulla sfera con l’equazione: • dove: , sono latitudine e longitudine sulla sfera; rx, ry, rz, sono direzioni di proiezione (riflessione), vettori normalizzati Programmazione Grafica aa2007/2008

  17. Secondo passo • nel secondo passo si sceglie come proiettare sull’oggetto finale l’oggetto intermedio in funzione della normale al punto considerato sull’oggetto - 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 connormali dirette dal centro dell’oggetto finale • Mappa inversa: normali determinate su O; il punto su O è la riflessione, vista dall’occhio, del punto su I Programmazione Grafica aa2007/2008

  18. Funzioni di corrispondenza • Indicano come deve essere mappata la texture: • Wrap, repeat, tile: l’immagine viene ripetuta come una piastrella • Mirror: l’immagine viene ripetuta riflettendola verticalmente o orizzontalmente • Clamp to edge: i valori esterni a (0,1) sono forzati agli estremi, il bordo dell’immagine 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 Programmazione Grafica aa2007/2008

  19. 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 Programmazione Grafica aa2007/2008

  20. Image texture • Mappare una immagine es. 256 x 256 su una superficie piana; se la superficie proiettata supera o è inferiore alla risoluzione dell’immagine: • Magnification • Minification Programmazione Grafica aa2007/2008

  21. 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) Programmazione Grafica aa2007/2008

  22. Magnification Nearest neighbor inpterpolazione bilineare Programmazione Grafica aa2007/2008

  23. Interpolazione bilineare • Interpola Linearmente i valori di texture di 4 texel vicini t1 t2 i valore textur in i = Lerp(lerp(t1, t3), lerp(t2, t4)) t3 t4 Programmazione Grafica aa2007/2008

  24. 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 dell’immagine, in modo da garantire un texel per pixel (frequenza di campionamento ottima) Programmazione Grafica aa2007/2008

  25. Minification • Molti texel coprono un pixel (sotto campionamento) • Solutione: • Accresci campioni o riduci • la frequenza massima della • texture • metodi: • Mip-mapping • Rip-mapping • Sum Area Table un pixel Artefatti di sotto camp. Programmazione Grafica aa2007/2008

  26. MipMapping • Mip: “multi in parvo” • L’immagine di texture originale viene affiancata da molte versioni via via più piccole, mediante ricampionamento dell’immagine 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 Programmazione Grafica aa2007/2008

  27. MipMapping • Per scegliere quale texture usare si usa un parametro d per cercare di ottenre un rapporto pixel:texel par 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 Programmazione Grafica aa2007/2008

  28. MipMapping Non mipmapping mipmapping Programmazione Grafica aa2007/2008

  29. Ripmapping • Si sottocampiona anche linearmente lungo u e v • 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 calcolano valori interpolati usando anche le immagini sottocampionate lungo u e v Programmazione Grafica aa2007/2008

  30. Ripmapping Programmazione Grafica aa2007/2008

  31. 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 nell’array memorizza la somma dei colori di tutti i texel fino all’angolo in basso a sinistra Programmazione Grafica aa2007/2008

  32. Summed area table - 2 • usato per filtrare la texture spazio pixel spazio texture y pixel x Calcola il BB dell’area del pixel nella texture e usa SAT per calcolare il colore medio dell’area coperta dal BB Programmazione Grafica aa2007/2008

  33. Summed area table - 3 • Come si calcola la somma dei texel nell’area tra A e B? R’ = SAT[B] – SAT[C] – SAT[D] + SAT[A] B C R Il valore finale è la media: R’ / (numero texels in R) A D Programmazione Grafica aa2007/2008

  34. Confronto Non filtering Mipmapping Summed area table Programmazione Grafica aa2007/2008

  35. Texture mapping in OgL Programmazione Grafica aa2007/2008

  36. 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 l’interpolazione di shading si calcola il valore di texture usando ancora interpolazione tra vertici estremi Programmazione Grafica aa2007/2008

  37. 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 l’immagine 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) Programmazione Grafica aa2007/2008

  38. Dichiarazione del modo di mapping glTexCoord2f(s,t) /* range di variazione delle coordinate dello spazio texture La texture viene associata alla primitiva all’atto 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(); Programmazione Grafica aa2007/2008

  39. 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 all’intervallo 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” Programmazione Grafica aa2007/2008

  40. Minification, magnification 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 Programmazione Grafica aa2007/2008

  41. 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 l’opzione mipmap Programmazione Grafica aa2007/2008

  42. 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) Programmazione Grafica aa2007/2008

  43. Bump mapping Programmazione Grafica aa2007/2008

  44. Bump mapping • Perturbazione della normale • Funzione di bump d(u,v): • Meglio perturbare la normale e non il punto Programmazione Grafica aa2007/2008

  45. Environmental mapping Simula riflessioni a specchio senza ray tracing, chiamato anche reflection map Si calcola la proiezione dell’ambiente 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 dell’osservatore Programmazione Grafica aa2007/2008

  46. Il programma applicativo deve calcolare la proiezione dell’ambiente 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) Programmazione Grafica aa2007/2008

  47. 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) Programmazione Grafica aa2007/2008

More Related