2010. november 6., szombat

Textúrák szűrése

Miután felépítettünk egy 3Ds jelentett a virtuális világban el kell tudni döntenünk, hogy a képen megjelenő pixeleknek milyen színük legyen. A keresett színnek az alapja egy textúra térképen (texture map) található, ami egy 2D leképezése a textúrázott 3D világnak. A textúra térkép pixeleit texeleknek hívjuk. A nagy kérdés az, hogy melyik texelek határozzák meg a képernyőnk egyes pixeleinek a színét. A textúratér és a képernyő-koordinátarendszer közötti leképzés a textúratér egyes részeit nagyíthatja, más részeit pedig összenyomhatja. Az előbbi esetben nagyításról, az utóbbiban pedig kicsinyítésről beszélünk. Azért, hogy a problémát jobban megértsük, most képzeljünk magunk elé egy 1024×768-as felbontású képet, aminek a pixelein át, mint egy rácson keresztül szemléljük a 3Ds jelenetet.

A mintavételezés problémája

Belesünk egy lyukon át és amilyen színt látunk, az lesz a képpont színe. De mi van, ha több színes pontot (texelt) látunk a lyukon keresztül (ez az eset fordul elő gyakrabban)? Ha a térbeli alakzat, amire rálátunk a lyukon keresztül merőleges a rácsunkra akkor „kör” (négyzet) alakban látunk egy pixelcsoportot, ha nem merőleges (elég gyakran) akkor pedig „ellipszis” (téglalap) alakban látunk egy pontcsoportot. Ez azt jelenti, hogy a képernyőtérben egyenletes sűrűséggel kiválasztott pixel középpontok igen egyenlőtlenül mintavételezhetik a textúrát, amely végső soron problémákat okozhat. Ezért a textúra leképzésnél a mintavételezési problémák elkerülését célzó szűrésnek különleges jelentősége van. A textúra szűrés nehézsége abból fakad, hogy a textúratér és a képtér közötti leképzés nemlineáris. Például, ha doboz szűrést szeretnénk alkalmazni, azaz a pixel textúratérbeli képében kívánjuk a texeleket átlagolni, akkor szabálytalan, általános görbék által határolt területtel kell dolgoznunk.

Textúra szűrő eljárások

A szokásos eljárások ezt az általános területet egyszerű területekkel, például ellipszissel, négyszöggel, téglalappal vagy négyzettel közelítik. A leggyakoribb szűrési módok a következőek:
  1. Point Sampling:
    Egyszerűen kiveszi a középső pixelt, figyelmen kívül hagyva a többit és a "rácson keresztül látott" alakzat formáját. Ez a módszer kis memóriaigényű, de nem valami szép megoldás. Ha egy nagy objektum nagyon közel kerül a kamerához, akkor borzasztóan kockás képet eredményez, mivel több pixelhez is ugyanaz a texel tartozhat, ugyanazzal a színnel.
  2. Bi-linear Filtering:
    Négyzettel történő közelítés esetén egyetlen pixel színét úgy határozhatjuk meg, hogy megkeressük a pixel sarokpontjainak megfelelő textúratérbeli pontokat, előállítjuk a négy pontot tartalmazó legkisebb négyzetet, majd átlagoljuk a négyzetben lévő texelek színeit. A közeli objektumok így szépen elmosódnak (gyengülnek az élhibák és textúrazajok lásd AA), igaz ez csak egy mellékes hatás. Ennek a szűrésnek két hátránya van: négyzet (vagyis 2×2pont) formájú alakzattal dolgozik, ami az esetek többségében pontatlan (kamera irányára nem merőleges poligonok), valamint négyszeres sávszélesség igénye van a Point Samplinghoz képest.
  3. Tri-linear Filtering:
    A Mip-Mapping (lásd később) ötletét adja hozzá a Bi-linear-hoz. Mindkét Mip szinten végrehajtunk egy Bi-linear szűrést és a két értéket átlagoljuk. A memóriaigény megint duplázódik és még mindig négyzet alakzattal dolgozunk.
  4. Anisotropic Filtering:
    Az eddigi szűrési eljárások valójában csak arra voltak jók, hogy a közeli alakzatokat elmossák (ez valójában mellékhatás) a távoli alakzatok még mindig pixel összevisszaságok maradnak az alul mintavételezés miatt. A legjobb minőség akkor érhető el, ha minden egy rácspontból látható texelt felhasználunk a szín meghatározásához és figyelünk a textúratérképen látható alakzat formájára is. Persze ezek az eljárások nagyon komoly memóriaigénnyel rendelkeznek. Általában 16-32 texelt vesznek figyelembe pixelenkét és ügyelnek az alakzat elfordulására is. Anizometrikus szűrést többféleképpen meg lehet valósítani. Az egyik lehetőség a Rip-Mapping, ami egyfajta elforgatott Mip-Mapping. Nem csak az egyes Mip szinteket számolja ki a kártya, hanem bizonyos szögelforgatott textúrákat is. Ezeket az elforgatott textúrákat használja, miután megállapította az éppen renderelt poligonlap elfordulását a kamerához képest. Az eljárás gyors mivel nem kell minden pixelnél elforgatni a textúrát csak egyszer a Rip-mapok képzésekor, de nem teljesen pontos minden szögre.
Felhasznált irodalom:
  1. Dr. Szirmay-Kalos László, Antal György, Csonka Ferenc: Háromdimenziós grafika, animáció és játékfejlesztés
  2. http://vganfo.uw.hu/

0 megjegyzés :

Megjegyzés küldése