Corso di Programmazione Grafica

Slides:



Advertisements
Presentazioni simili
Global Positioning System
Advertisements

Ombre e riflessioni in tempo reale
Texture.
Texture Mapping.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 prove.
25 Nov 2002Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 22 Estensioni Opengl, Multitexturing,
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 prove generali.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
22 Nov 2002Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 22 Texturing
Computer Graphics Marco Tarini Lezione 7: rasterizzazione la fabbrica dei frammenti Università dellInsubria Facoltà di Scienze MFN - Varese Corso di Laurea.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Applicazioni progettuali di grafica computerizzata a.a. 2008/2009 Rendering grafico.
Corso di Elementi di Grafica Digitale Massimo De March
Bump Mapping & Under-Water Effects
Analisi di Immagini e Dati Biologici
Texturing - Tessiture Daniele Marini.
1 Modelli di Illuminazione Daniele Marini. 2 Obiettivo Visualizzare scene cercando di simulare al meglio la realtà Interazione luce-materiali –Modellare.
Modelli Globali Daniele Marini.
1 Superfici nascoste Daniele Marini. 2 Ray casting adatto a CSG o superfici parametriche dipende dal punto di vista è una sorta di campionamento spaziale.
Smoothing Daniele Marini.
1 Effetti impressionistici Daniele Marini. 2 Tecniche discrete di manipolazione del frame buffer: –Texture mapping –Antialiasing –Compositing –Alpha blending.
1 Modelli Globali Radiosity Daniele Marini. 2 Radiosity Bilancio radiativo in un ambiente chiuso (senza scambio di energia con lesterno) Indipendente.
Sampling and Quantization
Infomatica Grafica a.a DICGIM – University of Palermo Dipartimento di Ingegneria Chimica, Gestionale, Informatica e Meccanica Environment Mapping.
Determinazione delle superfici visibili
Illuminamento e Shading
Vettori Finche’ il moto si svolge in una sola dimensione – moto unidimensionale, moto rettilineo – non abbiamo bisogno di vettori La posizione e’ individuata.
Effetti fotorealistici
Modelli Globali: Ray Tracing
Daniele Marini, Maurizio Rossi
Texturing - Tessiture Daniele Marini.
Le ombre proiettate Daniele Marini.
1 Scan conversione di poligoni Daniele Marini. 2 Test interno-esterno Scan conversione di un poligono = decidere se pixel interno Test di intersezione:
Dal modello alla visualizzazione: Verso il foto realismo Daniele Marini.
Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica.
Corso Di Programmazione Grafica
Superfici nascoste Daniele Marini.
Texturing - Tessiture Daniele Marini.
1 Struttura di un sistema grafico e frame buffer Daniele Marini.
1 Visualizzazione scientifica Daniele Marini. 2 Visualizzazione scientifica Trovare un modo per rendere i risultati di un calcolo scientifico, o rilevati.
Modelli di Illuminazione
Texturing - Tessiture Daniele Marini.
Intersezioni e distanze
Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.
Antialiasing tratto da: Han-Wei Shen.
Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2007/2008.
Corso di Programmazione Grafica e Laboratorio Daniele Marini
Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica.
Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2006/2007.
Architettura di OGL e pipe-line Daniele Marini Davide Gadia Davide Selmo Corso Di Programmazione Grafica aa2005/2006.
Ombre e riflessioni in tempo reale Daniele Marini Parzialmente tratte de: Haines-M ö ller Corso di Programmazione Grafica aa2005/2006.
Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006.
Antialiasing parzialmente tratto da: Han-Wei Shen
Intersezioni e distanze Daniele Marini Corso di Programmazione Grafica per il Tempo Reale.
Shading e smoothing Daniele Marini Corso Di Programmazione Grafica aa2005/2006.
Primitive OpenGL Corso di Programmazione Grafica e Laboratorio Daniele Marini.
Ottimizzazione della scena: culling (decimazione) Daniele Marini.
Ottimizzazione della scena: culling (decimazione) Daniele Marini Corso di Programmazione Grafica per il Tempo Reale.
Corso di Programmazione Grafica e Laboratorio Daniele Marini
Titolo Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.
Analisi di Immagini e Dati Biologici Introduzione al linguaggio di MATLAB/OCTAVE Parte 2 16 L5.
Analisi di Immagini e Dati Biologici
Analisi di Immagini e Dati Biologici
22 Nov 2002Costruzione di Interfacce - Paolo Cignoni1 Costruzione di Interfacce Lezione 19 Texturing
Visione e Percezione Matlab Filtri Lineari Operazioni su immagini Piramidi Gaussiane Esercitazione 4 Maggio.
Daniele Marini Con contributi di Maurizio Rossi
1 Smoothing Daniele Marini. 2 Calcoli sui vettori Vettore normale equazione del piano: ax+by+cz+d=0; si può anche scrivere come luogo: e p è un qualunque.
Trattamento delle immagini numeriche Marcello Demi CNR, Institute of Clinical Physiology, Pisa, Italy.
Transcript della presentazione:

Corso di Programmazione Grafica Texturing Daniele Marini

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

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

Texture mapping 2D, 3D o 4D La texture è una qualsiasi immagine L’operazione di mapping trasferisce l’immagine sulla superficie

Pipe-line di texturing Usa una funzione di proiezione MAPPING Usa una funzione di corrispondenza Calcola posizione nello spazio mondo (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 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

Gli elementi dell’array di texture sono i texels 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

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

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)

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

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 :

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

Coordinate texture Diversi modi per ripetere la texture: (0,0) (1,0) (1,1) (0,1) (u0,v0) (u1,v1) (u2,v2) (u,v) in [0,1] Diversi modi per ripetere la texture: Repeat, mirror, clamp, border:

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

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

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

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

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

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 con normali 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

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

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

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

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)

Magnification Nearest neighbor inpterpolazione bilineare

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

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

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)

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.

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

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

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

Calcolare d per mipmapping texel pixel proiettato sullo spazio texture A=area approssimata del quadrilatero b=sqrt(A) d = log2 b 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

MipMapping Non mipmapping mipmapping

Anisotropic texture filtering

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 l’immagine sottocampionata in relazione alla direzione di anisotropia si calcolano valori interpolati usando anche le immagini sottocampionate lungo u e v

Ripmapping

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

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

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] C B R Il valore finale è la media: R’ / (numero texels in R) A D

Confronto Non filtering Mipmapping Summed area table

Texture mapping in OgL

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

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)

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

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”

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

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

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)

Bump mapping

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

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

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)

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)