Corso Di Programmazione Grafica per il Tempo Reale 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) 2 Aliasing spaziale di linee e di texture • Osserviamo aliasing sia su singole linee o bordi (denti di sega) sia su texture (moirée) 3 Aliasing temporale • Si osserva aliasing anche in sequenze di immagini: 4 Il rendering è un processo di campionamento 5 Il rendering è un processo di campionamento rendere una curva 6 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 7 Alias provocato da sottocampionamento • una ruota sembra girare in senso inverso Osserva solo a 1/4 della frequenza problema di sotto campionamento 8 Alias provocato da sottocampionamento • segnale 1D segnale effettivo segnale campionato 9 Alias provocato da sottocampionamento • segnale 2d: moirée aliasing moderato aliasing più forte 10 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 11 Se aumentiamo la frequenza di campionamento? f=1 rpm 1 campione per rivoluzione 1 < campione/rivoluzione < 2 2 campioni/rivoluzione > 2 campioni/rivoluzione 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 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? 14 Ricostruzione • Dopo aver campionato (idealmente) in modo corretto, dobbiamo ricostruire il segnale continuo • Si procede usando filtri di ricostruzione 15 Alcuni filtri di ricostruzione • Filtri più comuni: Box - Interpolazione Nearest neighbour Filtro a tenda Interpolazione lineare 16 Alcuni filtri di ricostruzione Interpolazione bicubica 17 Box • Molto semplice ma non molto buono 18 Filtro triangolare Lineare • Basato su interpolazione lineare. Migliore ma ancora non smooth 32x32 Nearest neighbor 19 Bicubico • Filtro passa basso ideale: nearestneighbor lineare bicubica 20 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 21 Ri-campionamento • Minification e Magnification – ricampiona il segnale a risoluzioni diverse Minification Magnification (in questo caso la minificazione è stata fatta male) 22 Magnification • facile da usare, ricampiona in modo semplice il segnale da ricostruire Segnale ricostruito Ricampionamento a frequenza doppia del segnale ricostruito 23 Minification • Raddoppiamo la distanza tra i campioni • Si ha un effetto di sfocatura 24 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 25 Tecniche di Antialiasing in tempo reale • Tecniche pratiche usate in hardware grafico • Lavorano nello spazio schermo 26 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 27 Differenti schemi di sovracampionamento • Formula comune: c(i,x,y): colore del campione i per pixel(x,y); wi: peso Diversi schemi di sovracampionamento 28 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: 29 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 30 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! 31 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) 32 Quincunx • Fatti prestare qualcosa dal vicino • Qualità comparabile al metodo 4x a metà del costo 33 FLIPQUAD • Pesi: 0.25 per campione • Si comporta meglio di Quincunx 34 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 35 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) 36 Confronto 4X - Quincunx 4X FSAA 4X Quincunx 37 Jittering: ATI TM SMOOTHVISION • usa un pattern di campionamento jittered • Ogni pixel ha (2x, 4x, 8x) locazioni di campionamneto alternative preprogrammate, jittered. • Pseudo-random-look (La visione umana è meno sensibile a configurazioni di campionamento casuali) Possibili locazioni per SMOOTHVISION 4x 38 ATI - TM SMOOTHVISION 4x multi-sampling SMOOTHVISION™ 2x High-Quality mode Quake3 screen shot 39