Texture mapping 1
Modelli per i materiali Il realismo visivo può essere ottenuto mediante i modelli di illuminazione e dei materiali Per modellare i materiali si possono utilizzare delle immagini dette immagini di texture da incollare sulla struttura geometrica dell oggetto Durante la fase di shading Dopo la fase di shading perturbandone il risultato 2
Immagini di texture o mappe Sono esempi di texture: color-map: ogni pixel è un colore (componenti: R- G-B, o R-G-B-A) l intensità di colore di un punto della superficie dipende dal colore del punto corrispondente della immagine di texture alpha-map: ogni pixel è un valore di trasparenza alpha normal-map o bump-map ogni pixel è una normale (componenti: X-Y-Z): le variazioni dei livelli di grigio della mappa daranno luogo a variazioni di altezza sulla superficie shininess-map: ogni pixel contiene un valore di specularità 3
Mapping di immagini sulla geometria + = geometria 3D (mesh di quadrilateri) RGB texture (color-map) 4
Mapping di immagini sulla geometria 5
Mapping di immagini sulla geometria + = 6
Storia Ed Catmull 1974 introdotto da Ed Catmull nella sua Phd Thesis Solo nel 1992 si ha texture mapping in hardware Silicon Graphics RealityEngine Dal 92 a oggi ha avuto aumento rapidissimo della diffusione Oggi è una delle fondamentali tecniche di rendering La più utilizzata tecnica image based 7
512 texels 1.0 v Notazione Texture Space (o spazio parametrico o spazio u-v ) Texture 2D 1.0 u texel 1024 texels Una Texture è definita nella regione [0,1] x [0,1] dello spazio parametrico 8
Texture mapping Consideriamo una texture come una matrice di nxm elementi, il texture mapping è una funzione che Associa i texel ad i punti della superficie di un oggetto geometrico Proietta i punti sullo schermo E una funzione matematica che trasforma Coordinate texture (u,v) in coordinate del mondo (X,Y,Z) in coordinate schermo (x s,y s ) 9
Texture Mapping Texture mapping consiste di 3 passi Definire la texture nello spazio (u,v) Associare durante la fase di modellazione a ciascun vertice di ciascun triangolo (X i,y i,z i ) il corrispondente punto nello spazio (u,v) Calcolare durante la fase di rendering per ogni pixel generato all interno di una faccia il valore di tessitura per interpolazione 10
Mapping inverso Il calcolo è effettuato nelle coordinate dello schermo, per evitare il calcolo su frazioni di pixel E necessario considerare la trasformazione inversa dalle coordinate dello schermo (x s,y s ) alle coordinate della texture (u,v): Per ogni pixel dello schermo si calcola mediante trasformazione inversa il punto corrispondente (X i,y i,z i ) sulla superficie Il punto (X i,y i,z i ) viene mappato nello spazio della texture (u,v) 11
Texture mapping e modello di illuminazione Il valore di texture ottenuto sia in maniera diretta che inversa - può essere utilizzato Per attribuire direttamente il colore al pixel Oppure per attribuire il colore al pixel dopo essere stato composto con il valore di riflessione diffusa di Phong I f = (1 - α t ) I t + α t I I f - valore finale I t - valore di texture I - valore di illuminazione Phong α t - valore di trasparenza per la texture (0..1) 12
Proiezioni per il texture mapping Come trasformare le coordinate di una mappa di texture 2D in una superficie 3D generica. Si utilizzano: Trasformazione piana ( ad es. bilineare) Proiezione cilindrica Proiezione sferica 13
Texture Mapping Ad ogni vertice (di ogni triangolo) si associa un punto di coordinate u,v nello spazio della v texture u 1,v 1 u 0,v 0 x 1,y 1 u 1,v 1 posizione del 1mo vertice x 0,y 0 u 0,v 0 attributi del 1mo vertice u 2,v 2 u x 2,y 2 u 2,v 2 Texture Space Screen Space 14
Texture Mapping Si definisce cioè un mapping fra il triangolo e un triangolo di tessitura Screen Space Texture Space 15
Texture Mapping Ad ogni vertice (di ogni triangolo) si associa un punto di coordinate u,v nello spazio della texture texture look-up Screen Space Texture Space 16
V 3 Interpolazione delle coordinate R p 3 V 2 texture f( v 3 ) proiezione f R f(p) 2 f( v 2 ) V 1 f( v 1 ) p ha coordinate baricentriche a,b,c nel triangolo v 1 v 2 v 3 f(p) ha coordinate baricentriche a,b,c nel triangolo f(v 1 )f(v 2 ) f(v 3 ) La proiezione è una approssimazione utile per colori e normali ma non funziona quando si interpolano le coordinate di texture... 17
Interpolazione delle coordinate v 1 texture Esempio: u,v= (1,0) 1 u u1,v1= (1,1) u1,v1= (0,0) u1,v1= (0,1) 18
Correzione Prospettica p ha coordinate baricentriche c 0 c 1 c 2 V 1 A 1,B 1... p = c 0 v 0 + c 1 v 1 + c 2 v 2 V 2 A 2,B 2... p V 0 A 0,B 0... = ( x 0, y 0, z 0, w 0 ) attributi di p: (senza considerare la correzione prospettica) A p = c 0 A 0 + c 1 A 1 + c 2 A 2 B p = c 0 B 0 + c 1 B 1 + c 2 B 2 19
Correzione Prospettica p ha coordinate baricentriche c 0 c 1 c 2 V 1 p A 1,B 1... V 0 A 0,B 0... = ( x 0, y 0, z 0, w 0 ) p = c 0 v 0 + c 1 v 1 + c 2 v 2 attributi di p: (con la correzione prospettica) V 2 A 2,B 2... Ap = A 0 A A p = c 0 A 0 + c 1 1 A 1 + c 2 A 2 w 2 0 w 1 w 2 1 A p = c 0 A 0 + c 1 A 1 1 + c 2 A 1 w 2 0 w 1 w 2 20
Correzione Prospettica Senza Con 21
u-v mapping Assegnare una coppia di coordinate di texture ad ogni vertice della rete di pologoni v v u u Texture atlas 22
Mapping lineare Si utilizza un mapping lineare da (x,y,z) a (u,v) Esempi: 23
Esempio environment mapping Environment map: una texture che memorizza il colore dell ambiente riflesso da ogni normale della semisfera. 24
Environment mapping: sferico simula oggetto a specchio che riflette uno sfondo lontano simula un materiale complesso (condizioni di luce fisse) 25
Environment mapping: cubico above left front right back below 26
Texture fuori dai bordi: modo clamp v 1 1 u (u<0) u 0; if (u>1) u 1; (v<0) v 0; if (v>1) v 1; 27
Texture fuori dai bordi: modo repeat v 1 1 u u u [ u ] v v [ v ] 28
Tessiture ripetute Tipico utilizzo: Molto efficiente in spazio: una sola texture mappa su molti triangoli 29
Texture Look-up Un frammento ha coordinate texture look-up non intere (in texels) Screen Space Texture Space 30
Texture Look-up pixel texel un pixel = meno di un texel magnification Screen Space Texture Space pixel un pixel = più di un texel minification 31
Caso Magnification v Soluzione 1: Si sceglie il texel più vicino Questo equivale ad arrotondare le coordinate all intero più vicino 7.5 6.5 5.5 4.5 3.5 2.5 "Nearest Neighbour" 1.5 0.5 0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 32 u
Caso Magnification Nearest Neighbour : risultato visivo texture 128x128 "si vedono i texel!" 33
v 7.5 Soluzione 2: i prende il valore medio dei quattro texel più vicini Caso Magnification 6.5 5.5 4.5 3.5 2.5 Interpolazione Bilineare 1.5 0.5 0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 34 u
Caso Magnification Bilinear Interpolation: risultato visivo texture 128x128 35
Caso Magnification Modo Nearest: si vedono i texel va bene se i bordi fra i texel sono utili più veloce Modo Interpolazione Bilineare di solito qualità migliore può essere più lento rischia di avere un effetto "sfuocato" 36
Caso Minification Nearest Neighbour Bilinear interpolation non risolve il problema 37
Caso Minification: MIP-mapping MIP-mapping: multum in parvo MIP-map level 1 MIP-map level 2 MIP-map level 3 MIP-map level 4 (un solo texel) MIP-map level 0 Si considera una gerarchia di mappe di texture a risoluzione diversa piramide di immagini L occupazione di memoria della piramide è circa il doppio della occupazione della singola imamgine 38
Mipmap Si definisce un fattore di scala: ρ= texel/pixel come valore massimo fra ρ x e ρ y, che può variare sullo stesso triangolo Il livello di mipmap da utilizzare è: log 2 ρ dove il livello 0 indica la massima risoluzione Il livello non è necessariamente un numero intero e può quindi essere arrotondato 39
Caso Minification: MIP-mapping Bilinear interpolation non risolve il problema MIP-mapping 40
Caso Minification: MIP-mapping 5 4 3 2 1 0 altro esempio 41
Bump mapping Un ulteriore modifica all apparenza del rendering può essere effettuata usando il bump mapping 42
Bump mapping Il metodo prevede di variare la normale alla superficie pixel per pixel utilizzando la formula: I texel in questo caso sono utilizzati ad uno stadio diverso rispetto ai color texel, prima del calcolo dell'equazione di illuminazione 43
Bump mapping L effetto che si ottiene è un perturbazione del valore delle normali che altera il rendering senza modificare la geometria 44
Bump mapping 45
Displacement mapping Nel displacement mapping si modifica effettivamente la geometria dell oggetto spostando i punti della superficie: Il displacement mapping è eseguito in fase di rendering e non modica stabilmente la geometria della scena Rispetto al bump mapping anche la silhouette del modello mostra le corrette deformazioni 46
Displacement mapping 47
Texture mapping e schede grafiche La grande diffusione del texture mapping è dovuta anche al largo utilizzo nei videogiochi La struttura di un video gioco è caratterizzata da Uso di geometrie semplici con livello di approssimazione delle forme basso Utilizzo di sofisticate tessiture 48
Architettura del processo di rendering Il sistema di rendering si può suddividere in Sottosistema geometrico si occupa del calcolo delle trasformazioni geometriche ed illuminazione dei vertici delle primitive geometriche Sottosistema raster si occupa della rasterizzazione e calcolo della texture delle primitive 49
Memoria RAM nelle schede grafiche setup setup Frammenti & attributi interpolati setup rasterizer punti rasterizer triangoli rasterizer segmenti Screen buffer (RGBA) Screen buffer 2 (RGBA) Depth buffer 50 Vertici & loro attributi computazioni per vertice Vertici poriettati & attributi computati computazioni per frammento Texture RAM
Texture Mapping Nelle operazioni per frammento nelle coordinate dello schermo si può accedere ad una RAM apposita: la Texture RAM strutturata in un insieme di Textures ( tessiture ) Ogni tessitura è un array 1D, 2D o 3D di Texels (campioni di tessitura) dello stesso tipo 51
Texture Mapping setup setup Screen buffer 52 Vertici & loro attributi Vertici poriettati & attributi computati Frammenti & attributi interpolati setup rasterizer punti rasterizer triangoli rasterizer segmenti Texture RAM computazioni per vertice computazioni per frammento compreso: coordinate texture (per vertice!) interpolo coordinate texture coordinate texture interpolate texture look-up
Texture Mapping setup setup Screen buffer 53 Vertici & loro attributi Vertici poriettati & attributi computati Frammenti & attributi interpolati setup rasterizer punti rasterizer triangoli rasterizer segmenti Texture RAM computazioni per vertice computazioni per frammento compreso: coordinate texture (per vertice!) interpolo coordinate texture coordinate texture interpolate texture look-up