ANTIALIASING -------------- vseobecne metody na odstranovanie aliasu (exisuju aj specialne - napr. pre radiocity) alias = artefakt vznikajuci, ked periodicita v obrazku (textura a pod) je porovnatelna s rozmermi pixla: Nyquist sampling frequency - hranicna hodnota, ked zacina vznikat alias = 2 * f_max; f_max = maximalna frekvencia signalu (fourierka) Nyquist sampling interval priklady - nekonecna sachovnica v projekcii - sinusoida - najprv poriadne husto navzorkovane - I_vzorky = 1/2 I_signalu -> konstanta 0 - I_vzorky = 3/4 I_sigmalu - I_vzorky = 1.2 (napr) I_signalu - casovy alias - opacne tocenie kolies vo filme a pod - prenesene - zubate usecky, zubate hrany (nie je to alias v povodnom zmysle, ale riesi sa to rovnakymi metodami, niektori aj toto nazyvaju aliasom) - tiez rozna intezita usecky pri axialnych kontra diagonalnych zvysenie vzorkovacej frekvencie - hardwarove obmedzenia - len odsunutie, nie riesenie problemu vhodnejsie je vyprodukovat "biely sum", rozostrenie Ziadne filtrovanie -------------------- tvarime sa, ze cosi ako alias neexistuje: jediny bod (napr stred, alebo lavy dolny roh) urci farbu/intenzitu pixla - rychle -> puzitie: animacie v realnom case preview Pre-filtering (area sampling) ------------------------------- Catmull 1978 antialiasing sa riesi predtym, ako sa pocita hodnota pixla vypocty na urovni pixla: pixel sa nenavzorkuje jedinou hodnotou, ale sa zrataju plochy zasahujuce do plochy pixla, vysledna hodnota je priemer vypoctovo extremne drahe -> zjednodusenia, napr pripustaju sa len urcite tvary prieniku pixla a mnohouholnika, napr zasiahnuty roh (pixla), useknuty roh, lichobeznik; t.j. vrchol mnohouholnika sa vnutri pixla nepripusta,... pouziva sa pri renderovani pomocou skenovacej priamky v kombinacii so z-buffrom -> A-buffer (antialiased z-buffer) Priklad - aplikacia na rasterizaciu usecky: usecka sa nahradi obdlznikom -> moznost volit hrubku usecky vsade, kam obdlznik zasahuje, spocita sa percento zasahu, vysledna hodnota = interpolacia medzi farbou pozadia a farbou usecky -> riesia sa oba problemy - zobatost aj rozna intenzita Uniformny postfiltering (supersampling - nadvzorkovanie?) ----------------------------------------------------------- generovanie obrazku s vyssim rozlisenim nez je vysledne - rozdel pixel na podpixely (t.j. akoby zvys rozlisenie) - vygeneruj obrazok vo vacsom rozliseni - prevzorkuj na pozadovanu frekvenciu prevzorkovanie - bud jednoduche spriemerovanie, ale - spravidla sa pouzivaju nejake filtre, t.j. kazdy podpixel ma nejaku vahu priklady filtrov: 1 2 1 1 2 3 2 1 2 4 2 2 4 6 4 2 1 2 1 3 6 9 6 3 2 4 6 4 2 1 2 3 2 1 atd. pricom - jeden podpixel moze prispievat do viacerych pixlov, cize jednotlive masky sa mozu prekryvat (nasobok noveho rozlisenia obrazku nemusi zodpovedat velkosti filtra) - filter nemusi byt konstantny pre cely obrazok - spriemerovanie = pouzitie box filtra - existuje cela veda o tom, aky filter pouzit na aky obrazok - mame tu alias kontra rozostrenie - velka spotreba pamati (specialne v kombinacii so z-buffrom) Priklad - aplikacia na rasterizaciu usecky: sposob 1: - 3-nasobne rozlisenie - zbehni na tom Bresenhama - vysledne intenzity: 0, 1/3, 2/3, 1, podla poctu podpixlov v pixli sposob 2: - 3-nasobne rozlisenie, - zvol hrubku usecky -> nahrad usecku obdlznikom - nasampluj napr stredy podpixlov (alebo lave dolne rohy, to je jedno) - spriemeruj Neuniformne vzorkovanie (t.j. tiez postfiltering) --------------------------------------------------- riesi alias bez zvysenych narokov na pamat 1. neuniformne prerozdelovanie -------------------------------- jemnejsie navzorkujeme, kde treba viac zaostrit (odkial vieme kde?) najbeznejsia strategia - hrubo navzorkuj - prezri obrazok a deteguj, kde treba viac zaostrit 2. stochasticke samplovanie ----------------------------- alias - pravidelnost v obrazku sa bije s pravidelnostou vzorkovania 1982 Yellot: nase oko neprodukuje alias, pretoze fotoreceptory su su na sietnici rozlozene nepravidelne -> navzorkujme nepravidelne - s frekvenciou mozme ist az pod Nyquistovu limitu a stale to namiesto aliasu vyprodukuje biely sum - treba nezavisly vypocet pre kazdy pixel - vhodne napr pre raytracing - nevhodne pre z-buffer, kde intenzita ziskava interpolaciami