Rozdział 14. TEKSTURY I PROBLEMY PERCEPCJI

14.5. Problemy próbkowania, filtrowanie tekstur

Wydaje się, że najprostszym sposobem nałożenia tekstury na powierzchnię byłoby przeniesienie obrazu z zastosowaniem odpowiedniej kalkulacji współrzędnych, bez żadnych dodatkowych (zbędnych?!) operacji.

Najprostszy algorytm mógłby wyglądać następująco:

  • Potraktować efekt mapowanie tekstury jako obraz w przestrzeni odpowiednich parametrów.
  • Wyznaczyć odpowiednią parametryzację lub projekcję.
  • Mapować teksturę na powierzchnię obiektu.

Problem jaki w tym przypadku się pojawia sprowadza się do pytania. Jak transformować wzór tekstury bez utraty jakości? Jest to związane z rozmiarami obiektów i nakładanych na nie tekstur. Przeskalowanie tekstury (dopasowanie do wymiarów powierzchni obiektu) prowadzi do utraty jakości. W analizie tego problemu rozpatruje się obiekt nazwany tekselem, będący najmniejszym fragmentem tekstury (analogicznie do piksela, tylko że w przestrzeni tekstury).

Aby więc poprawić ten najprostszy (i jak widać naiwny) algorytm, można zaproponować następujące postępowanie:

  • Potraktować teksturę jako obraz będący zbiorem tekseli.
  • Wyznaczyć odpowiednią parametryzację lub projekcję.
  • Mapować teksturę na powierzchnię obiektu.
  • Przeanalizować transformację teksela na piksel.
    • Jeśli piksel jest większy niż teksel, uśrednić jego barwę z sąsiednich tekseli.
    • Jeśli piksel jest mniejszy niż teksel, interpolować barwę z sąsiednich tekseli.
    • Jeśli rozmiar piksela  >>  rozmiar teksela, skopiować barwę teksela (lub uśrednić z sąsiadów).

 Taki algorytm zakłada, że teksel i piksel są całkowicie niezależne. Do realizacji potrzebne jest skalowanie (w ramach parametryzacji/rzutowania niezależnie). Dla wyznaczania odpowiedniego fragmentu tekstury wymagane jest powiększanie i zmniejszanie co jest związane z interpolacją i uśrednianiem. Powstaje problem antyaliasingu, będący typowym problemem próbkowania.


Rys.14.4. Nałożona tekstura typu szachownica.
a) bez dodatkowej obróbki – widoczne zakłócenia (szczególnie w górnej części obrazu),
b) szachownica poprawiona.


Rysunek 14.4 ilustruje problem próbkowania, na który warto zwrócić uwagę, gdyż jest on jednym z poważniejszych problemów występujących w prawie wszystkich dziedzinach związanych z generacją i obróbką obrazów cyfrowych. Częściowo było to omawiane w związku z metodą śledzenia promieni w wariancie śledzenia stochastycznego. Jeśli przeprowadzimy analizę próbkowania ciągłego sygnału dwuwymiarowego, jakim jest obraz to okaże się, że w efekcie na przykład nakładania tekstury pojawiają się składowe o częstotliwości wyższej niż częstotliwość próbkowania (Nyquista). Może to być spowodowane zbyt dużą liczba szczegółów na danej powierzchni w efekcie rzutowania perspektywicznego lub nałożeniem tekstury o rozmiarach tekseli dożo mniejszych niż rozmiary piksela ekranu. Powszechnie rozwiązuje się ten problem za pomocą filtrowania dolnoprzepustowego i stosowania nadpróbkowania uśredniającego (rysunek.14.4 b – szachownica pozbawiona większości artefaktów). Oczywiście efektywniejszym nadpróbkowaniem całego obrazu będzie nadpróbkowanie adaptacyjne, w którym gęstość będzie uzależniona od szybkości zmian lokalnych.

Algorytm nakładania tekstury z zastosowaniem filtrowania:

  • Zastosować mapę tekstury jako regularną siatkę tekseli, zrekonstruować „ciągłość tekstury” używając filtrowania dolnoprzepustowego.
  • Mapować taką teksturę na powierzchnię obiektu.
  • Filtrować (dolnoprzepustowo) rezultat zgodnie z określoną rozdzielczością (aby uniknąć aliasingu)

Takie postępowanie wymaga rozwiązania problemu przydzielania barw przy powiększaniu tekstury (barwa sąsiedniego piksela jest najmniej szczęśliwym rozwiązaniem, lepszą metodą jest interpolacja, chociaż może dawać nieoczekiwaną barwę). Warto także pamiętać, że przy zmniejszaniu tekstury, jeśli obiekt jest bardzo daleko, to wiele tekseli jest mapowanych na jeden piksel. Prowadzi to niepotrzebnego i czasochłonnego filtrowania.

W przypadku nakładania tekstury zamiast filtrować cały obraz można zrobić tę operację na samej teksturze przed jej nałożeniem. Ponieważ konieczne jest przy tym uwzględnienie odwzorowania tekstury więc operacja staje się czasochłonna. Stosuje się techniki splotu bezpośredniego (filtrowanie w przestrzeni tekstury) lub filtrowanie w przestrzeni widma z wykorzystaniem szeregów Fouriera.

Najefektywniejszą techniką jest mip-mapping – technika polegająca na przygotowaniu przefiltrowanych tekstur o różnych rozdzielczościach (rysunki 14.5. i 14.6.). Przechowywane są tekstury w kilku przeskalowanych wersjach (2 razy mniejsza, 4 razy mniejsza itd). Na mapie tekstury rozpatruje się teksele – podstawowe elementy tekstury (analogicznie do pikseli). Metodę tę zaproponował L.Williams w 1983 roku. W efekcie przefiltrowania dla każdej tekstury uzyskujemy zestaw wzorów odpowiadających przeskalowaniu z uwzględnieniem filtracji na odpowiednim poziomie rozdzielczości. Nakładanie takiej tekstury jest bardzo efektywne, gdyż nie wymaga na bieżąco filtrowania. Jedyną operacją jaka jest konieczna to wybór wzoru o właściwej rozdzielczości Dobór mipmapy jest zależny od relacji tekseli do pikseli (liczby tekseli odpowiadających pikselowi). W najprostszym przypadku celem jest nałożenie tekstury, której teksel będzie jak najmniejszy, ale większy od piksela.


Rys.14.5. Mip-mapping :  przeskalowane obrazy tekstury.  Skalowanie wiąże się także z mieszaniem barw.



Rys.14.6. Mip-mapping :  przykład zestawu 8 rysunków tekstury muru.