antialiasing parzialmente tratto da: han-wei shen daniele marini corso di programmazione grafica...
TRANSCRIPT
Antialiasing
parzialmente tratto da: Han-Wei Shen
Daniele Marini
Corso Di Programmazione Grafica aa2005/2006
Programmazione Grafica aa2005/2006 2
Cos’è un alias?
• Alias - In telecomunicazione un falso segnale dovuto a interferenza tra frequenza del segnale e frequenza di campionamento – aliasing c’è ovunque in computer graphics poichè il rendering è un processo di campionamento
– Esempi: • linee a dente di sega (jagged lines)• false tramature di texture (moirée)
Programmazione Grafica aa2005/2006 3
Aliasing spaziale di linee e di texture
• Osserviamo aliasing sia su singole linee o bordi (denti di sega) sia su texture (moirée)
Programmazione Grafica aa2005/2006 4
Aliasing temporale
• Si osserva aliasing anche in sequenze di immagini:
Programmazione Grafica aa2005/2006 5
Il rendering è un processo di campionamento
Programmazione Grafica aa2005/2006 6
Il rendering è un processo di campionamento
rendere una curva
Programmazione Grafica aa2005/2006 7
Veloce rassegna di campionamento di segnali
• Due passi nella rappresentazione digitale di un segnale: campionamento e ricostruzione– Campionamento: da segnale continuo a campioni discreti– Ricostruzione: dai valori discreti al segnale continuo
• Aliasing può derivare da entrambi i passaggi
Programmazione Grafica aa2005/2006 8
Alias provocato da sotto-campionamento
• una ruota sembra girare in senso inverso
Osserva solo a 1/4 della frequenza
problema di sotto campionamento
Programmazione Grafica aa2005/2006 9
Alias provocato da sotto-campionamento
• segnale 1D
segnale effettivosegnale campionato
Programmazione Grafica aa2005/2006 10
Alias provocato da sotto-campionamento
• segnale 2d: moirée
aliasing moderato aliasing più forte
Programmazione Grafica aa2005/2006 11
Se aumentiamo la frequenza di
campionamento?
f=1 rpm
1 campione per rivoluzione
1 < campione/rivoluzione < 2
2 campioni/rivoluzione
> 2 campioni/rivoluzione
Programmazione Grafica aa2005/2006 12
Quanto basta?
• qual’è la giusta frequenza di campionamento?
• teorema del campionamento (o limite di Nyquist) - la frequenza di campionamento deve essere almeno doppia della massima frequenza del segnale
due campioni in questo periodo
Programmazione Grafica aa2005/2006 13
Si può evitare totalmente aliasing
• Dato il limite di Nyquist ?• In realtà no – la frequenza massima potrebbe essere infinita, segnale non limitato in banda
• La maggior parte delle scene grafiche non sono bandlimited: bordi netti non possono mai venire campionati correttamente in modo digitale (point sampling)
• Come si può correggere o limitare l’aliasing?
Programmazione Grafica aa2005/2006 14
Ricostruzione
• Dopo aver campionato (idealmente) in modo corretto, dobbiamo ricostruire il segnale continuo
• Si procede usando filtri di ricostruzione
Programmazione Grafica aa2005/2006 15
Filtri di ricostruzione
• Filtri più comuni:
Box Filtro a tenda
Sinc = sin(x)/x
Programmazione Grafica aa2005/2006 16
Box
• Molto semplice ma non molto buono
• Si chiama anche nearest neighbor
Programmazione Grafica aa2005/2006 17
Filtro triangolare
• Basato su interpolazione lineare. Migliore ma ancora non smooth
32x3232x32
Nearest neighborNearest neighbor
LineareLineare
Programmazione Grafica aa2005/2006 18
Sinc
• Filtro passa basso ideale:
nearestneighbor
lineare
bicubica
Programmazione Grafica aa2005/2006 19
Ricampionamento
• Allargare o ridurre il segnale• Supponiamo che i campioni siano a intervalli unitari: 0,1,2,3,4,…
• Ricampionare in modo che la loro distanza valga a– a< 1 produce magnification– a>1 produce minification
Programmazione Grafica aa2005/2006 20
Ri-campionamento
• Minification e Magnification – ricampiona il segnale a risoluzioni diverse
Magnification
Minification
(in questo caso la minificazione è stata fatta male)
Programmazione Grafica aa2005/2006 21
Magnification
• facile da usare, ricampiona in modo semplice il segnale da ricostruire
Segnale ricostruito Ricampionamento a frequenza doppia del segnale ricostruito
Programmazione Grafica aa2005/2006 22
Minification
• Raddoppiamo la distanza tra i campioni
• Si ha un effetto di sfocatura
Programmazione Grafica aa2005/2006 23
Minification
• Più difficile• La frequenza del segnale è troppo alta per evitare aliasing
• Soluzioni possibili: – Accresci l’ampiezza del filtro passa basso del filtro ideale sinc - sfoca l’immagine
– Prima sfoca l’immagine (con qualunque metodo), poi ricampionala
Programmazione Grafica aa2005/2006 24
Tecniche di Antialiasing in tempo reale
• Tecniche pratiche usate in hardware grafico
• Lavorano nello spazio schermo
Programmazione Grafica aa2005/2006 25
Algoritmi basati su spazio schermo
• Approccio comune: campiona più fittamente la scena e calcola la media (sovracampionamento)
• È più difficile: i bordi hanno infinite frequenze
idea risultato
Programmazione Grafica aa2005/2006 26
Differenti schemi di sovracampionamento
• Formula comune: c(i,x,y): colore del campione i per
pixel(x,y); wi: peso
Diversi schemi di sovracampionamento
Programmazione Grafica aa2005/2006 27
Campionamento perturbato (Jittered)
• Il campionamneot regolare non può eliminare l’aliasing, può solo ridurlo!
• Perché ?• Poiché i bordi richiedono la presenza di alte frequenze infinite
• Jittering rimpiazza l’aliasnig con rumore• Si usa nel ray tracing• Esempio:
Programmazione Grafica aa2005/2006 28
Tecniche di multicampionamneto con A-
buffer• Prende >1 campione / pixel, suddivide la computazione tra campioni entro il pixel– Lighting– Texturing
• Fattori di forza: aliasing dei bordi e accurato trattamento della trasparenza
Programmazione Grafica aa2005/2006 29
A-buffer
• Per trattare meglio i bordi si usa una maschera di ricoprimento per pixel
• La maschera di ricoprimento, la profondità e il colore costituiscono un fragment
• Durante il rendering i fragment possono esser scartati quando possibile (test di profondità)
• Quando tutti i poligoni sono stati resi, i fragment vengono fusi in un solo colore visibile– Costa in memoria!
Programmazione Grafica aa2005/2006 30
Multicampionamento: Quincunx
• Genera 2 campioni per pixel• w1=0.5, w2=0.125, w3=0.125, w4=0.125, w5=0.125 (filtro triangolare 2D )
• Tutti i pixel producono lo stesso effetto sull’immagine (pixel di centro= 0.5, pixel d’angolo = 4*0.125=0.5)
Programmazione Grafica aa2005/2006 31
Quincunx
• Fatti prestare qualcosa dal vicino
• Qualità comparabile al metodo 4x a metà del costo
Programmazione Grafica aa2005/2006 32
FLIPQUAD
• Pesi: 0.25 per campione• Si comporta meglio di
Quincunx
Programmazione Grafica aa2005/2006 33
FSAA (full screen anti-aliasing)
• Rendi la scena a una risoluzione molto più alta poi fanne la media
• Nvidia GeForce 2: usa ordered grid supersampling (OGSS)
• 3dfx voodo 5: rotated grid supersampling (RGSS) – elimina meglio alias
• 2x or 4x: numero di subpixels per ciascun pixel
• Costoso: l’intera scena può dover essere resa più volte!
OGSS
RGSS
Programmazione Grafica aa2005/2006 34
Multisampling AA
• Nvidia GeForce3 – per accrescere performance
• 2x RGSS e 4x OGSS • Non si inviano più texture per subpixels – usa la stessa texture di colore per i subpixels
• Usata solo sui pixel di contorno – GPU ha più intelligenza (è la maggiore differenza dal sovra campionamento)
Programmazione Grafica aa2005/2006 35
Confronto 4X - Quincunx
4X FSAA 4X Quincunx
Programmazione Grafica aa2005/2006 36
Jittering: ATI - SMOOTHVISIONTM
• usa un pattern di campionamento jittered
• Ogni pixel ha (2x, 4x, 8x) locazioni di campionamneto alternative pre-programmate, jittered.
• Pseudo-random-look (La visione umana è meno sensibile a configurazioni di campionamento casuali)
Possibili locazioni perSMOOTHVISION 4x
Programmazione Grafica aa2005/2006 37
ATI - SMOOTHVISIONTM
Quake3 screen shot
4x multi-sampling SMOOTHVISION™ 2x High-Quality mode