Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2005/2006
Programmazione Grafica aa2005/20062 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/20063 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/20064 Aliasing temporale Si osserva aliasing anche in sequenze di immagini:
Programmazione Grafica aa2005/20065 Il rendering è un processo di campionamento
Programmazione Grafica aa2005/20066 Il rendering è un processo di campionamento rendere una curva
Programmazione Grafica aa2005/20067 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/20068 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/20069 Alias provocato da sotto- campionamento segnale 1D segnale effettivo segnale campionato
Programmazione Grafica aa2005/ Alias provocato da sotto- campionamento segnale 2d: moirée aliasing moderato aliasing più forte
Programmazione Grafica aa2005/ 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/ 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/ 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/ Ricostruzione Dopo aver campionato (idealmente) in modo corretto, dobbiamo ricostruire il segnale continuo Si procede usando filtri di ricostruzione
Programmazione Grafica aa2005/ Filtri di ricostruzione Filtri più comuni: Box Filtro a tenda Sinc = sin( x)/ x
Programmazione Grafica aa2005/ Box Molto semplice ma non molto buono Si chiama anche nearest neighbor
Programmazione Grafica aa2005/ Filtro triangolare Basato su interpolazione lineare. Migliore ma ancora non smooth 32x32 Nearest neighbor Lineare
Programmazione Grafica aa2005/ Sinc Filtro passa basso ideale: nearestneighbor lineare bicubica
Programmazione Grafica aa2005/ 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/ Ri-campionamento Minification e Magnification – ricampiona il segnale a risoluzioni diverse Magnification Minification (in questo caso la minificazione è stata fatta male)
Programmazione Grafica aa2005/ Magnification facile da usare, ricampiona in modo semplice il segnale da ricostruire Segnale ricostruito Ricampionamento a frequenza doppia del segnale ricostruito
Programmazione Grafica aa2005/ Minification Raddoppiamo la distanza tra i campioni Si ha un effetto di sfocatura
Programmazione Grafica aa2005/ 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/ Tecniche di Antialiasing in tempo reale Tecniche pratiche usate in hardware grafico Lavorano nello spazio schermo
Programmazione Grafica aa2005/ 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/ Differenti schemi di sovracampionamento Formula comune: c(i,x,y): colore del campione i per pixel(x,y) ; w i : peso Diversi schemi di sovracampionamento
Programmazione Grafica aa2005/ 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/ 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/ 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/ Multicampionamento: Quincunx Genera 2 campioni per pixel w 1 =0.5, w 2 =0.125, w 3 =0.125, w 4 =0.125, w 5 =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/ Quincunx Fatti prestare qualcosa dal vicino Qualità comparabile al metodo 4x a metà del costo
Programmazione Grafica aa2005/ FLIPQUAD Pesi: 0.25 per campione Si comporta meglio di Quincunx
Programmazione Grafica aa2005/ 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/ 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/ Confronto 4X - Quincunx 4X FSAA 4X Quincunx
Programmazione Grafica aa2005/ Jittering: ATI - SMOOTHVISION TM 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/ ATI - SMOOTHVISION TM Quake3 screen shot 4x multi-sampling SMOOTHVISION™ 2x High-Quality mode