Filtrowanie tekstur Kinga Laurowska
Wprowadzenie Filtrowanie tekstur (inaczej wygładzanie) technika polegająca na 'rozmywaniu' sąsiadujących ze sobą tekseli (pikseli tekstury). Istnieje wiele metod filtrowania, które balansują pomiędzy złożonością obliczeniową a jakością obrazu. Filtrowanie tekstur jest formą interpolacji, gdyż poszukuje ono średniej wartości (koloru) na podstawie podanych dyskretnych wartosci (kolor sąsiednich pikseli).
Aliasing i anti-aliasing Kiedy powstaje aliasing mapowanie piksela na teksturę Jak skutkuje wybierany tylko jeden teksel reprezentowany przez piksel Zapobieganie (anti-aliasing) uśrednianie (filtrowanie) wszystkich tekseli 'przykrytych' przez piksel
Anti-aliasing Wady: Szczegóły mogą zostać całkowicie wygładzone (szara przestrzeń na poprzednim rys) Duża złożoność obliczeniowa, dla każdego piksela może być konieczne przeglądnięcie nawet O(n) tekseli
Mip-map (image piramid) Budowanie 'piramidy' obrazów: jej podstawa to obraz wejściowy, każdy kolejny jest dwukrotnie mniejszy od poprzedniego obraz wejściowy musi mieć wymiary podzielne przez 2 całość zajmuje jedynie 4/3 pierwotnego rozmiaru Poziom piramidy dobierany jest w zależności od potrzeb (tak aby rozdzielczość wystarczyła do reprezentowania całej wymaganej powierzchni)
Mip-map (image piramid) Zalety: zwiększenie prędkości teksturowania (przetwarzana jest o wiele mniejsza liczba pikseli tekstury) Wady: zwiększenie wymagań pamięciowych o 1/3
Supersampling Próbki brane są w kilku punktach piksela, nie tylko w jego środku i na ich podstawie wyliczana jest (poprzez uśrednianie) wartość wynikowa
Jak to działa: Supersampling obraz renderowany jest w dużo wyższej rozdzielczości niż obraz wyświetlany następnie zmniejszany jest poprzez downsampling (wybór tylko części próbek) do wymaganej wielkości wykorzystując dodatkowe piksele do obliczeń Istnieje wiele algorytmów wyboru miejsc dodatkowych próbek Siatka Losowy Poisson Disc Jitter Odwrócona siatka
Multiasmpling Optymalizacja supersamplingu Za specyfikacją OpenGL GL_ARB_multisample: fragment programu zostanie wywołany tylko raz dla danego piksela i tylko na głębii i bufororze szablonowym wykonane będzie supersampling Zalety: pixel shader zazwyczaj wywołany tylko raz na piksel boki polygonów mają antialiasing Wady: aliasing i inne błędy są ciągle widoczne wewnątrz polygonów jeśli na wyjściu fragment shadera są komponenty o wysokiej rozdzielczości
Bilinear filtering Podczas powiększania tekstury widoczne stają się prostokątne obszary reprezentujące odpowiednie teksle (rys. 1) Filtrowanie dwuliniowe polega na obliczaniu wartości pomiędzy dyskretnymi punktami w teksturze (wynik takiego działania pokazuje rys. 2) Wykorzystywana jest tutaj interpolacja dwuliniowa (biliniowa), kolory są uśredniane z wagami zależnymi od odległości
Interpolacja dwuliniowa Przykład interpolacji dwuliniowej z wartościami 0;1;1;0,5, wartości interpolowane reprezentowane przez kolor.
Trilinear filtering Filtrowanie dwuliniowe połączone z mipmapowaniem skutkuje w bardzo widocznym 'przeskoku' z jednego poziomu mipmapy na kolejny Filtrowanie trójliniowe rozszerza powyższe o interpolację pomiędzy kolejnymi poziomami
Bilinear a trilinear filtering
Anisotropic filtering Filtrowanie anizotropowe stosowane jest w grafice 3D W przeciwieństwie do filtrowania dwu- i trzyliniowego, anizotropowe wyświetla poprawnie tekstury także pod dużymi kątami znajdującymi się w dużej odległości Polega na tym intensywniejszym filtrowaniu im głębiej w ekran wchodzi tekstura Analogicznie do downsampling przy mipmapie, ale próbkowanie w poprawnym trapezoidowym kształcie zależnym od kąta widzenia (np. zejście nie tylko do 128x128, ale też 256x128 i 32x128)
Trilinear mipmap texture - enhanced with anisotropic texture filtering
Podsumowanie Filtrowanie anizotropowe daje najlepszą jakość obrazu, jest jednak wolniejsze i wymaga więcej pamięci niż trójliniowe Najszybsze, ale też dające najgorszą jakość jest filtrowanie metodą najbliższego sąsiada Problem aliasingu jest ciągle obecny, jednak jakość monitorów (wielkość plamki) ciągle się poprawia co wpływa na obniżenie znaczenia tego problemu