...

ppt

by user

on
Category: Documents
26

views

Report

Comments

Description

Transcript

ppt
Computer Graphics
Lezione 12:
realismo a buon prezzo:
il texture Mapping
Università dell’Insubria
Facoltà di Scienze MFN di Varese
Corso di Laurea in Informatica
Anno Accademico 2006/07
Marco Tarini
rasterizer
punti
setup
rasterizer
triangoli
setup
rasterizer
segmenti
computazioni
per frammento
setup
Frammenti
& attributi
interpolati
Vertici poriettati
& attributi
computati
computazioni
per vertice
Vertici
& loro attributi
Memoria RAM nelle schede grafiche
Screen
buffer
(RGBA)
Screen
buffer 2
(RGBA)
Depth
buffer
Texture
RAM
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Texture Mapping
• Nelle operazioni per frammento 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
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Texels
• Tipici esempi di texels:
– ogni texel un colore (componenti: R-G-B, o R-G-B-A)
• la tessitura è una "color-map"
– ogni texel una componente alpha
• la tessitura è una "alpha-map"
– ogni texel una normale (componenti: X-Y-Z)
• la tessitura è una "normal-map" o "bump-map"
– ogni texel contiene un valore di specularità
• la tessitura è una "shininess-map"
– ogni texel contiene un valore di altezza
• la tessitura è una "displacement-map"
– ...
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Tipica applicazione:
rimappare immagini sulla geometria
=
+
geometria 3D
(insieme di quadrilateri)
RGB texture 2D
(color-map)
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Altri esempi di color-map
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Altro esempio di color-map
+
=
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Texture Mapping: Storia
• 1974 introdotto da Ed Catmull
– nella sua Phd Thesis
Ed Catmull
(MEGA-MEGAGURU)
• Solo nel 1992 (!) si ha text. mapping hardware
– Silicon Graphics RealityEngine
• Dal 92 a oggi:
rapido aumento della diffusione
– strada intrapresa soprattutto da low end graphic boards
• Oggi:
una delle fondamentali primitive di rendering
– la principale tecnica image based di rendering
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Notazione
v
1.0
Texture Space
(o "spazio parametrico" o "spazio u-v" o "spazio s-t")
512 texels
Texture 2D
1.0
u
1024 texels
texel
Una Texutre e' definita
nella regione [0,1] x [0,1]
dello "spazio parametrico"
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Texture Mapping
• Ad vertice (di ogni triangolo) assegno
le sue coordinate u,v nello spazio tessitura
v
x1,y1
u1,v1
x0,y0
u0,v0
x2,y2
posizione del
1mo vertice
u1,v1
u0,v0
attributi del
1mo vertice
u2,v2
u2,v2
Screen Space
u
Texture Space
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Texture Mapping
• Così in pratica definisco un mapping fra il
triangolo 3D e un triangolo di tessitura
Screen Space
Texture Space
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Texture Mapping
• Ogni frammento
ha le sue coordinate u,v nello spazio tessitura
texture look-up
Screen Space
Texture Space
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
compreso:
coordinate
texture
(per vertice!)
rasterizer
punti
setup
rasterizer
triangoli
setup
rasterizer
segmenti
interpolo
coordinate
texture
computazioni
per frammento
setup
Frammenti
& attributi
interpolati
Vertici poriettati
& attributi
computati
computazioni
per vertice
Vertici
& loro attributi
Texture Mapping
Screen
buffer
texture
look-up
coordinate
texture
interpolate
Texture RAM
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Problema:
interpolazione lineare coordinate texture
R3
R2
f( v3 )
V3
p
proiezione f
f(p)
f( v2 )
V2
V1
p ha coord.
baricentriche a,b,c
nel triangolo v1 v2 v3
f( v1 )
f(p) ha coord.
baricentriche a,b,c
nel triangolo f(v1) f(v2) f(v3)
• Non vale per la proiezione prospettica!
– era solo una approssimazione
– andava bene quando interpolavamo colori, normali
– non va bene quando interpoliamo coordinate texture...
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Problema:
interpolazione lineare coordinate texture
v
1
• Esempio:
u,v= (1,0)
1
u1,v1= (1,1)
u1,v1= (0,0)
u1,v1= (0,1)
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
u
Problema:
interpolazione lineare coordinate texture
• Esempio:
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Soluzione:
Correzione Prospettica
•
p ha coordinate baricentriche c0 c1 c2
p = c0 v0 + c1v1 + c2v2
V1
A1,B1 ...
V0 = ( x0 , y0 , z0 , w0 )
p
V2
A2,B2 ...
A0,B0 ...
attributi di p:
(senza considerare
la "normalizzazione affine")
Ap = c0 A0 + c1A1 + c2A2
Bp = c0 B0 + c1B1 + c2B2
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Soluzione:
Correzione Prospettica
•
p ha coordinate baricentriche c0 c1 c2
p = c0 v0 + c1v1 + c2v2
V1
A1,B1 ...
V0 = ( x0 , y0 , z0 , w0 )
p
V2
A2,B2 ...
A0,B0 ...
attributi di p:
(senza considerare
la "normalizzazione affine")
A0
A1
A2
Ap = c0 A0 + c1A1 + c2A2
w0
w1
w2
Ap =
1
Ap = c0 A0 + c1A11 + c2A12
w0
w1
w2
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
attributo
originale A
applico
transofrm.
poi calcolo:
A' = A / w
e
w' = 1 / w
Marco Tarini ‧ Computer
rasterizer
punti
setup
rasterizer
triangoli
setup
rasterizer
segmenti
interpolo
A' e w'
computazioni
per frammento
setup
Frammenti
& attributi
interpolati
Vertici poriettati
& attributi
computati
computazioni
per vertice
Vertici
& loro attributi
Soluzione:
Correzione Prospettica
Screen
buffer
A0
A1
A2
c0
+ c1 + c2
attributo
w0
w1
w2
finale del
frammento: Ap =
1
1
1
A' / w'
c0 w + c 1 + c2
w
w
0
1
2
Graphics ‧ 2006/07 ‧ Università dell’Insubria
Correzione Prospettica
• Senza
• Con
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Correzione Prospettica
• Texture mapping con correzione prospettica
– anche conosciuto come:
• texture mapping perfetto
• metodo dei 3 vettori magici (desueto)
• metodo dei 9 numeri magici (desueto)
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
L
O
A
rasterizer
punti
setup
rasterizer
triangoli
setup
rasterizer
segmenti
computazioni
per frammento
setup
Frammenti
& attributi
interpolati
Vertici poriettati
& attributi
computati
computazioni
per vertice
Vertici
& loro attributi
Nota: la tessitura va caricata
Screen
buffer
D
Texture RAM
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Nota: la tessitura va caricata
1. Da disco a memoria RAM main
•
(sulla scheda madre)
2. Da memoria RAM main a Texture RAM
•
(on board dell'HW grafico)
Entrambe operazioni piuttosto lente.
Per es, impossibili da fare una volta per frame!
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
In OpenGL
• Ad esempio:
glEnable(GL_TEXTURE_2D);
glBindTexture (GL_TEXTURE_2D, ID);
glTexImage2D (
GL_TEXTURE_2D,
0,
// mipmapping
GL_RGB, // formato interno
imageWidth, imageHeight,
0,
// bordo
GL_RGB, // formato nella RAM
GL_UNSIGNED_BYTE,
imageData);
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
compreso:
coordinate
texture
(per vertice!)
rasterizer
punti
setup
rasterizer
triangoli
setup
rasterizer
segmenti
interpolo
coordinate
texture
computazioni
per frammento
setup
Frammenti
& attributi
interpolati
Vertici poriettati
& attributi
computati
computazioni
per vertice
Vertici
& loro attributi
Come si assegnano le coordinate texture
ai vertici?
Screen
buffer
texture
look-up
coordinate
texture
interpolate
Texture RAM
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Come si assegnano le coordinate texture
ai vertici?
• Due classi di soluzioni:
– Assegnarle le coordinate textures al volo
• durante il rendering…
– Precomputarle
• (e salvarle insieme alla mesh)
Dipende dall’applicazione!
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Problema difficile: u-v mapping
• Assegnare una coppia di coordinate texutres
ad ogni vertice della mesh
– In preprocessing
v
v
u
u
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Problema difficile: u-v mapping
fatto a mano,
o automatizzato
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
In OpenGL
• Come ogni altro attributo
glTexCoord2d( u,v )
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
compreso:
coordinate
texture
coordinate
texture
(eventualmente
trasformate)
rasterizer
punti
setup
rasterizer
triangoli
setup
rasterizer
segmenti
interpolo
coordinate
texture
computazioni
per frammento
setup
Frammenti
& attributi
interpolati
Vertici poriettati
& attributi
computati
computazioni
per vertice
Vertici
& loro attributi
Come si assegnano le coordinate texture
ai vertici?
Screen
buffer
texture
look-up
coordinate
texture
interpolate
Texture RAM
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Come si assegnano le coordinate texture
ai vertici?
• Due classo di soluzioni:
– Assegnarle le coordinate textures al volo
• durante il rendering…
– Precomputarle
• (e salvarle insieme alla mesh)
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
produco
coordinate
texture
a partire
dalla
posizione
coordinate
texture
rasterizer
punti
setup
rasterizer
triangoli
setup
rasterizer
segmenti
interpolo
coordinate
texture
computazioni
per frammento
setup
Frammenti
& attributi
interpolati
Vertici poriettati
& attributi
computati
computazioni
per vertice
Vertici
& loro attributi
Come si assegnano le coordinate texture
ai vertici?
Screen
buffer
texture
look-up
coordinate
texture
interpolate
Texture RAM
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Create automaticamente
• Concetto: da (x,y,z) a (u,v) - Linearmente
• In coordinate oggetto o vista
– (prima o dopo la trasformazione)
• Esempi:
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Create automaticamente
• Anche 1D
1D texture!
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Come si assegnano le coordinate texture
ai vertici?
• Due classi di soluzioni:
– Assegnarle le coordinate textures al volo
• durante il rendering…
– Precomputarle
• (e salvarle insieme alla mesh)
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Environment mapping: sferico
Environment map:
una tessitura
che memorizza
il colore dell’ambiente “riflesso”
da ogni normale della semisfera.
Come coordinata tessitura, basta usare
la normale trasformata!
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Environment mapping: sferico
simula oggetto a specchio che riflette uno sfondo lontano
simula un materiale complesso
(condizioni di luce fisse)
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Environment mapping: cubico
above
left
front
right back
below
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
calcolo
coordinate
texture 3D
[-1,+1] x [-1,+1] x [-1,+1]
come raggio di vista
riflesso dalla
normale
rasterizer
punti
setup
rasterizer
triangoli
setup
rasterizer
segmenti
interpolo
coordinate
texture 3D
computazioni
per frammento
setup
Frammenti
& attributi
interpolati
Vertici poriettati
& attributi
computati
computazioni
per vertice
Vertici
& loro attributi
Environment mapping: cubico
Screen
buffer
proietto sul cubo,
accedo alla
faccia
corrispondente
coordinate
texture 3D
interpolate
Texture RAM
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Environment mapping: cubico
above
left
front
right back
below
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Environment mapping: cubico e sferico
• Sferico:
– un texel per ogni
direzione nella semisfera
• proiettata su un cerchio
• Cubico
– un texel per ogni
direzione nella sfera
• proiet. sulla sup di un cubo
– come coordinata texture
uso la normale
– come coordinata texture
uso la direzione di vista
rifelssa dalla normale
– per forza effetto
"headlight":
– punto di vista può ruotare
intorno ad oggetto fermo
• ruoto oggetto mentre punto
vista rimane fermo
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Creazione Automatica Coordinate Texture
S, T, R, Q
1- abilitarla:
glEnable(GL_TEXTURE_GEN_S);
2- scegliere la modalita':
glTexGeni(GL_S , GL_TEXTURE_GEN_MODE , mode )
GL_OBJECT_LINEAR
mode = GL_EYE_LINEAR
GL_SPHERE_MAP
computa le coord texture dalle pos
nel sist di rif oggetto
(prima della trasformazione)
computa le coord texture dalle pos
nel sist di rif camera
(dopo la MODEL-VIEW)
computa come coord texture
il raggio di vista rifelsso – usa la normale
(dopo la MODEL-VIEW)
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Creazione Automatica Coordinate Texture
3- scegliere il piano
S, T, R, Q
glTexGenfv(GL_S, GL_EYE_PLANE , v);
EYE o OBJECT
vettore di 4 elementi
coordinata texture prodotta = vT • pos_vertice
(e' distanza da un piano!)
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
compreso:
coordinate
texture
(per vertice!)
rasterizer
punti
setup
rasterizer
triangoli
setup
rasterizer
segmenti
interpolo
coordinate
texture
computazioni
per frammento
setup
Frammenti
& attributi
interpolati
Vertici poriettati
& attributi
computati
computazioni
per vertice
Vertici
& loro attributi
Texture Mapping
Screen
buffer
texture
look-up
coordinate
texture
interpolate
Texture RAM
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Texture Look-up:
fuori dai bordi: modo "clamp"
v
1
1
u
if (u<0) u←0; if (u>1) u←1;
if (v<0) v←0; if (v>1) v←1;
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Texture Look-up:
fuori dai bordi: modo "repeat"
v
1
1
u
u ← u–[u]
v ← v–[v]
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Tessiture ripetute
• Tipico utilizzo:
Nota: deve essere TILEABLE
Molto efficiente in spazio!
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
In OpenGL
glTexParameteri(
GL_TEXTURE_2D,
GL_TEXTURE_WRAP_S,
GL_CLAMP_TO_EDGE );
sono parametri della
tessitura. Ogni tessitura
caricata in memoria ha i
propri parametri.
nota:
setto
per u e v
separatemente
o
glTexParameteri(
GL_TEXTURE_2D,
GL_TEXTURE_WRAP_S,
GL_REPEAT );
esempio: repeat sulla u e clamp sulla v
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
compreso:
coordinate
texture
(per vertice!)
rasterizer
punti
setup
rasterizer
triangoli
setup
rasterizer
segmenti
interpolo
coordinate
texture
computazioni
per frammento
setup
Frammenti
& attributi
interpolati
Vertici poriettati
& attributi
computati
computazioni
per vertice
Vertici
& loro attributi
Texture Mapping
Screen
buffer
texture
look-up
coordinate
texture
interpolate
Texture RAM
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Texture Look-up
• Un frammento ha coordinate
non intere (in texels)
texture look-up
Screen Space
Texture Space
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Texture Look-up
texel
pixel
un pixel = meno di un texel
magnification
Screen Space
Texture Space
pixel
un pixel = più di un texel
minification
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Caso Magnification
v
Soluzione 1:
prendo il texel in cui casco
7.5
(cioè il texel il cui centro
è più vicino alle coordinate u,v
del frammento)
5.5
equivale ad arrotondare
le coordinate texel
ad interi
"Nearest Filtering"
6.5
4.5
3.5
2.5
1.5
0.5
0.5
1.5 2.5
3.5 4.5
5.5 6.5
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
7.5 u
Caso Magnification
Nearest Filtering: risutlato visivo
texture 128x128
"si vedono i texel !"
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Caso Magnification
v
Soluzione 2:
Medio il valore dei quattro texel
più vicini
7.5
6.5
5.5
Ripasso:
interpolazione lineare (1D)
interpolazione bi-lineare (2D)
4.5
3.5
Formule...
2.5
Interpolazione Bilineare
1.5
0.5
0.5
1.5 2.5
3.5 4.5
5.5 6.5
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
7.5 u
Caso Magnification
Bilinear Interpolation: risutlato visivo
texture 128x128
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
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"
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Caso Minification
Nearest Filtering
Bilinear interpolation
non risolve il problema
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Caso Minification: MIP-mapping
MIP-mapping: "Multum In Parvo"
MIP-map
level 2
MIP-map
level 3
MIP-map
level 1
MIP-map
level 0
MIP-map
level 4
(un solo texel)
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Mipmap Math
• Definiamo un fattore di scala, =texels/pixel
–
–
–
–
 è il massimo fra x e y
può variare entro lo stesso triangolo
può essere derivato dalle matrici di trasformazione
e calcolato nei vertici, interpolato nei frammenti
• il livello di mipmap da utilizzare è: log2 
– livello 0 = massima risoluzione
– se livello<0 cosa significa?
– nota: il livello non è necess. un numero intero
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Caso Minification: MIP-mapping
Bilinear interpolation
non risolve il problema
MIP-mapping
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Caso Minification: MIP-mapping
5
4
3
2
1
altro
esempio
0
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
In OpenGL
decidere che tipo di magnificazione usare:
glTexParameteri(
GL_TEXTURE_2D,
GL_TEXTURE_MAG_FILTER,
GL_NEAREST);
oppure
glTexParameteri(
GL_TEXTURE_2D,
GL_TEXTURE_MAG_FILTER,
GL_LINEAR );
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
In OpenGL
decidere che tipo di minifacazione usare:
glTexParameteri(
GL_TEXTURE_2D,
GL_TEXTURE_MIN_FILTER,
modo );
dove
modo = GL_NEAREST
GL_LINEAR
GL_NEAREST_MIPMAP_NEAREST
GL_LINEAR_MIPMAP_NEAREST
GL_NEAREST_MIPMAP_LINEAR
GL_LINEAR_MIPMAP_LINEAR
interpolazione
trilineare
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
In OpenGL
• Caricare sulla scheda
i vari livelli di mipmapping.
– uno per uno:
glTexImage2D (
GL_TEXTURE_2D,
i,
// MIP-map level
GL_RGB, // formato interno
imageWidth, imageHeight,
0,
// bordo
GL_RGB, // formato nella RAM
GL_UNSIGNED_BYTE,
imageData);
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
In OpenGL
• Caricare sulla scheda
i vari livelli di mipmapping.
– tutti insieme (con la liberira glu):
gluBuild2DMipmaps
glTexImage2D
(
(
GL_TEXTURE_2D,
0,
// MIP-map level
GL_RGB, // formato interno
imageWidth, imageHeight,
0,
// bordo
GL_RGB, // formato nella RAM
GL_UNSIGNED_BYTE,
imageData);
Marco Tarini ‧ Computer Graphics ‧ 2006/07 ‧ Università dell’Insubria
Fly UP