370 likes | 541 Views
Corso Di Programmazione Grafica aa2005/2006. Antialiasing parzialmente tratto da: Han-Wei Shen. Daniele Marini. Cos’è un alias?. Alias - In telecomunicazione un falso segnale dovuto a interferenza tra frequenza del segnale e frequenza di campionamento
E N D
Corso Di Programmazione Grafica aa2005/2006 Antialiasingparzialmente tratto da: Han-Wei Shen Daniele Marini
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
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
Aliasing temporale • Si osserva aliasing anche in sequenze di immagini: Programmazione Grafica aa2005/2006
Il rendering è un processo di campionamento Programmazione Grafica aa2005/2006
Il rendering è un processo di campionamento rendere una curva Programmazione Grafica aa2005/2006
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
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
segnale effettivo segnale campionato Alias provocato da sotto-campionamento • segnale 1D Programmazione Grafica aa2005/2006
Alias provocato da sotto-campionamento • segnale 2d: moirée aliasing moderato aliasing più forte Programmazione Grafica aa2005/2006
f=1 rpm Se aumentiamo la frequenza di campionamento? 1 campione per rivoluzione 1 < campione/rivoluzione < 2 2 campioni/rivoluzione > 2 campioni/rivoluzione Programmazione Grafica aa2005/2006
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
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
Ricostruzione • Dopo aver campionato (idealmente) in modo corretto, dobbiamo ricostruire il segnale continuo • Si procede usando filtri di ricostruzione Programmazione Grafica aa2005/2006
Filtri di ricostruzione • Filtri più comuni: Filtro a tenda Box Sinc = sin(px)/px Programmazione Grafica aa2005/2006
Box • Molto semplice ma non molto buono • Si chiama anche nearest neighbor Programmazione Grafica aa2005/2006
Lineare Filtro triangolare • Basato su interpolazione lineare. Migliore ma ancora non smooth 32x32 Nearest neighbor Programmazione Grafica aa2005/2006
Sinc • Filtro passa basso ideale: nearestneighbor lineare bicubica Programmazione Grafica aa2005/2006
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
Ri-campionamento • Minification e Magnification – ricampiona il segnale a risoluzioni diverse Minification Magnification (in questo caso la minificazione è stata fatta male) Programmazione Grafica aa2005/2006
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
Minification • Raddoppiamo la distanza tra i campioni • Si ha un effetto di sfocatura Programmazione Grafica aa2005/2006
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
Tecniche di Antialiasing in tempo reale • Tecniche pratiche usate in hardware grafico • Lavorano nello spazio schermo Programmazione Grafica aa2005/2006
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
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
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
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
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
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
Quincunx • Fatti prestare qualcosa dal vicino • Qualità comparabile al metodo 4x a metà del costo Programmazione Grafica aa2005/2006
FLIPQUAD • Pesi: 0.25 per campione • Si comporta meglio di Quincunx Programmazione Grafica aa2005/2006
OGSS RGSS 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! Programmazione Grafica aa2005/2006
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
Confronto 4X - Quincunx 4X FSAA 4X Quincunx Programmazione Grafica aa2005/2006
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 per SMOOTHVISION 4x Programmazione Grafica aa2005/2006
ATI - SMOOTHVISIONTM 4x multi-sampling SMOOTHVISION™ 2x High-Quality mode Quake3 screen shot Programmazione Grafica aa2005/2006