Bilinear texture filter
Prilično trivijalna i ujedno toliko rasprostranjena i sveprisutna stvar da više niko i ne obraća pažnju na to. Najjednostavniji način da shvatite o čemu se radi je da pogledate teksture bilo koje igre na PSX i, npr., Quake 3 Arena, ili bilo koju noviju igru. Šta primjećujete? Na PSX su teksture "kockaste", tj. rubovi svakog texela se jasno ističu formirajući kvadratiće, što rezultuje "preoštrim" izgledom, dok je na (skoro) svakoj igri na PCu (a i konzolama, počevši od PS2 i DreamCasta) uključen bar bilinearni filter koji čini da teksture izgledaju uglađeno i bez onih stršećih "kockica". Uglavnom, ove dvije slike govore za sebe :
S
Kako radi? Ubitačno jednostavno. Da imate npr. brojeve 2 i 10, 3 prazna polja između njih i trebate učiniti prijelaz što "nježnijim" - kako biste to uradili? Pa ravnomijerno, naravno, popunjavajući polja brojevima 4, 6 i 8, tako da razlika između dva susjedna polja bude uvijek ista. E, upravo to se događa i sa vrijednostima boja kod bilinearnog filtera, s tom razlikom što se tu to događa u dva smijera (bilinearno - dva linearna), pošto je tekstura dvodimenzionalna. I upravo na taj jeftini fazon dobijamo uglađene teksture u današnjim igrama, ali taj fazon nije uvijek dovoljan...
Trilinear texture filter
Dakle, bilinearni filter se sastojao iz dvije linearne interpolacije - jedne horizontalne i jedne vertikalne, a sada imamo trilinearni filter, što će reći da imamo još jednu interpolaciju. Koja je treća? Treća je interpolacija između dvije mip-mape. Sjećate se šta sam pričao o mip-mapama? O tome kako se bira odgovarajući mip-level za svaki dio teksture na ekranu? E, pa prijelazi između dva mip-levela na istoj teksturi znaju nekada biti jako uočljivi. To pogotovo mogu primijetiti korisnici low-end grafičkih kartica koji su prinuđeni da smanje sve "detalje", tako da na kraju vjerovatno završe s mip-mapama fitrovanim bilinearnim filterom, pa ona mogu primijetiti jasnu granicu između dva mip-levela, tj. kako im tekstura naglo postaje mutnija. Najuočljiviji primjeri su teksture podova i sl., gdje je ugao gledanja mali, pa je i mip-mapping najagresivniji. E, tu uskače ona treća interpolacija kod trilinearnog filtera, koja, jednostavno rečeno, radi sa mip-mapama isto ono što bilinearni filter radi sa texelima - čini njihove prijelaze (skoro) neprimjetnima. Dakle, trilinearni filter neće učiniti da vam teksture budu manje mutne, ali će vas poštedjeti gledanja očiglednih granica između dva mip-levela.
Anisotropic texture filter (AF)
Hm... odakle da počnem? Mogao bih početi od toga što ću vam reći da je trilinearni filter isto što i 1X anisotropski. Kakve oni imaju veze? Pa, zapravo se svode na istu stvar - uzmu se sampleovi (uzorci) sa dva mip-levela i onda se vrši interpolacija između njih, kako bi se pogodila "prava vrijednost". Dakle, nigdje nećete vidjeti 1X AF, jer je to isto što i trilinearni filter. Već sa 2X AF imamo nešto novo - uzimanje više sampleova sa svakog mip-levela. Za trilinearni filter uzimamo ukupno 8 sampleova : gornji, donji, lijevi i desni texel prve i druge mip mape - 2 x 4 = 8. Već kod 2X uzimamo po 8 sampleova za mip-level, dakle ukupno 16. Za 4X AF uzimamo 2 x 16 = 32, itd. Dakle, veći kvalitet dobijamo korišćenjem više uzoraka, ali nije kvaka samo u uzimanju više njih - vrlo važno je i odakle ih uzimamo. Kod bilinearnog (a time i trilinearnog) je uvijek isto - uzimaju se 4 susjedna texela, bez obzira pod kojim se uglom gledala tekstura. Što često prouzrokuje situaciju u kojoj, npr. imamo vrlo malo texela po horizontali, a možda i previše po vertikali (ponovo, čest slučaj kod "podova" u igrama). Dakle, kod anisotropskog filtera se radi nešto pametnije - uzorci se raspoređuju po elipsi zavisno od ugla gledanja. Mislim da će vam biti jasno nakon posmatranja slijedeće slike :
Šta uočavamo? Na ovom primjeru samplovanja jednog mip-levela pri 2X AF uočavamo da se sampleovi teksture ravnomijerno uzimaju sa projektovane elipse koja zavisi od ugla gledanja na teksturu. Upravo to i jeste glavna prednost anisotropskog filtera - ima obzira prema uglu gledanja, te stoga proizvodi sliku optimizovanu za baš taj ugao iz koga posmatramo. U praksi je vrlo lako uočiti prednost AF nad običnim mip-mapama. Evo jednog primjera :
Krenuvši od dna prema vrhu slike, vidimo kako obične mip-mape s trilinearnim filterom polagano gube kvalitet, dok ga AF zadržava. Dakle, vizualno, AF je superioran u odnosu na tradicionalne metode u svakom pogledu - slika koju dobijete sa 16X AF je vjerovatno najbolja koju možete dobiti. Jedini nedostatak je, naravno, njegova zahtjevnost, pogotovu što se tiče memorijske propusnosti. Naravno, potrebno i je procesorskog vremena da se sve to sračuna, ali usko grlo je memorijska propusnost, jer treba tu pretrpiti svo to zivkanje tekstura radi uzimanja sampleova. Uglavnom, do prije par godina AF je još uvijek bio egzotika, dok je to danas dobrim dijelom prešao u mainstream upotrebu.
Hvala na čitanju, nadam se da nije bilo previše nerazumljivo. Slijedeći put ćemo se vjerovatno baviti anti-aliasingom. Do čitanja.
Screenshot za bilinearni filter iz Half-Life by Valve Software; screenshoti za trilinearni filter iz Quake III Arena by id Software; primjer anisotropije sa Wikipedia-e