Antialiasing parzialmente tratto da: Han-Wei Shen Corso Di Programmazione Grafica 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 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)
Aliasing spaziale di linee e di texture Osserviamo aliasing sia su singole linee o bordi (denti di sega) sia su texture (moirée)
Aliasing temporale Si osserva aliasing anche in sequenze di immagini:
Il rendering è un processo di campionamento
Il rendering è un processo di campionamento rendere una curva
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
Alias provocato da sotto-campionamento una ruota sembra girare in senso inverso Osserva solo a 1/4 della frequenza problema di sotto campionamento
Alias provocato da sotto-campionamento segnale 1D segnale effettivo segnale campionato
Alias provocato da sotto-campionamento segnale 2d: moirée aliasing moderato aliasing più forte
Alias e spettro Si può comprendere il fenomeno dell’aliasing considerando che lo spettro di un segnale a supporto finito si ripete periodicamente Se la frequenza di campionamento è inferiore alla frequenza massima del segnale queste ripetizioni si sovrappongono nelle code
Se aumentiamo la frequenza di campionamento? f=1 rpm 1 campione per rivoluzione 1 < campione/rivoluzione < 2 2 campioni/rivoluzione > 2 campioni/rivoluzione
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
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?
Ricostruzione Dopo aver campionato (idealmente) in modo corretto, dobbiamo ricostruire il segnale continuo Si procede usando filtri di ricostruzione
Alcuni filtri di ricostruzione Filtri più comuni: Filtro a tenda Interpolazione lineare Box - Interpolazione Nearest neighbour
Alcuni filtri di ricostruzione Interpolazione bicubica
Box Molto semplice ma non molto buono
Filtro triangolare Lineare Basato su interpolazione lineare. Migliore ma ancora non smooth 32x32 Nearest neighbor
Bicubico Filtro passa basso ideale: nearestneighbor lineare bicubica
Ricampionamento 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
Ri-campionamento Minification e Magnification – ricampiona il segnale a risoluzioni diverse Minification Magnification (in questo caso la minificazione è stata fatta male)
Magnification facile da usare, ricampiona in modo semplice il segnale da ricostruire Segnale ricostruito Ricampionamento a frequenza doppia del segnale ricostruito
Minification Raddoppiamo la distanza tra i campioni Si ha un effetto di sfocatura
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
Tecniche di Antialiasing in tempo reale Tecniche pratiche usate in hardware grafico Lavorano nello spazio schermo
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
Differenti schemi di sovracampionamento Formula comune: c(i,x,y): colore del campione i per pixel(x,y); wi: peso Diversi schemi di sovracampionamento
Campionamento perturbato (Jittered) Il campionamento regolare non può eliminare l’aliasing, può solo ridurlo! Perché ? Poiché i bordi richiedono la presenza di alte frequenze infinite Questo dà anche luogo a oscilazioni ai bordi Jittering rimpiazza l’aliasing con rumore Si usa nel ray tracing Esempio:
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
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 necessario (test di profondità) Quando tutti i poligoni sono stati resi, i fragment vengono fusi in un solo colore visibile Costa in memoria!
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 ) Il campione centrale viene sovrapesato (pixel di centro= 0.5, pixel d’angolo = 4*0.125=0.5)
Quincunx Fatti prestare qualcosa dal vicino Qualità comparabile al metodo 4x a metà del costo
FLIPQUAD Pesi: 0.25 per campione Si comporta meglio di Quincunx
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
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)
Confronto 4X - Quincunx 4X FSAA 4X Quincunx
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
ATI - SMOOTHVISIONTM 4x multi-sampling Quake3 screen shot 2x High-Quality mode Quake3 screen shot