Tekstūros filtravimas

Kompiuterinėje grafikoje tekstūros filtravimas – procesas, kurio metu yra nustatoma, tekstūra dengiamo paviršiaus kiekvieno taško (pikselio) spalva, naudojant artimiausių tekselių spalvas. Yra dvi pagrindinės tekstūros filtravimo kategorijos, didinimo filtravimas ir mažinimo filtravimas.[1]

Tekstūrų filtravimas reikalingas todėl, nes ekrane atvaizduojamo paviršiaus dydis priklauso nuo to paviršiaus atstumo iki virtualios kameros. Dengiant paviršių tekstūra, tekstūros paveikslėlį reikia padidinti arba sumažinti, kad jis atitiktų paviršiaus dydį. Tekstūros filtravimas yra supaprastintas sumažinto/padidinto paveikslėlio glodinimas, naudojamas, kai vaizdai turi būti generuojami didele sparta. Pavyzdžiui, jei virtuali kamera yra labai toli nuo dengiamo paviršiaus, visa tekstūra gali sutilpti į vieną paviršiaus tašką, tačiau mažinant tekstūrą įprastu metodu, reiktų nuskaityti visus tekstūros taškus, ir juos sukombinavus, gauti dengiamo paviršiaus taško spalvą. Realaus laiko užduotyse, tokia operacija yra neleistinai ilga.

Metodai redaguoti

Artimiausio kaimyno interpoliacija redaguoti

Šiame metode kiekvienam paviršiaus taškui parenkama to tekstūros taško (tekselio), kuris yra arčiausiai atitinkamo paviršiaus taško centro, spalva. Šis metodas yra greičiausias, tačiau gaunamas blogos kokybės vaizdas.[2][3]

Artimiausio kaimyno interpoliacija su tekstūrų dydžių žemėlapiu (mipmap) redaguoti

Šiame metode naudojamas tekstūrų dydžių žemėlapis (kiekviena tekstūra yra pridedama įvairiais dydžiais). Paviršiaus taškų spalva parenkama naudojant artimiausio kaimyno interpoliaciją iš to tekstūros paveikslėlio, kurio dydis yra artimiausias dengiamam paviršiui. Šis metodas naudoja daugiau atminties, nes kiekviena tekstūra yra įrašyta keliais dydžiais, tačiau gaunami geresnės kokybės vaizdai.

Bilinijinis filtravimas redaguoti

Šiame metode nustatant paviršiaus taško spalvą, naudojamas keturių artimiausių tekstūros taškų vidurkis. Vidurkinant taškai padauginami iš svorinių koeficientų, nustatomų pagal jų nuotolį.[4] Šis metodas dažniausiai naudojamas kartu su tekstūrų dydžių žemėlapiu (naudojant tą tekstūros paveikslėlį, kurio dydis yra artimiausias dengiamam paviršiui).

Trilinijinis filtravimas redaguoti

Šis filtravimo metodas ištaiso netolygumus atsirandančius bilinijiniame filtravime su tekstūrų žemėlapiu (kai ant į tolį besitęsiančio paviršiaus aiškiai matoma riba tarp paviršiaus dalių, kurioms buvo naudota skirtingo dydžio tekstūra). Trilinijiniame filtravime viskas vyksta taip pat kaip ir bilinijiniame, tačiau naudojamas ne tas tekstūros paveikslėlis, kurio dydis yra artimiausias, bet yra tiesiškai interpoliuojama iš dviejų gretimų artimiausių paveikslėlių.[5]

Anisotropinis filtravimas redaguoti

Šiame filtravimo metode naudojama trapecija (kituose metoduose imamas kvadratas) ir tada pritaikomas trilinijinis filtravimas. Šis metodas veikia lėčiausiai, tačiau juo gaunami geriausi rezultatai.

Šaltiniai redaguoti

  1. „Chapter 9 - OpenGL Programming Guide“. Glprogramming.com. 2009-02-13. Filtering. Nuoroda tikrinta 2018-01-14.
  2. „Game Engine Design: Texture Mapping“ (PDF). uncc.edu. Texture Magnification. Suarchyvuotas originalas (PDF) 2021-04-17. Nuoroda tikrinta 2020-11-18.
  3. „Game Engine Design: Texture Mapping“ (PDF). uncc.edu. Texture Minification. Suarchyvuotas originalas (PDF) 2021-04-17. Nuoroda tikrinta 2020-11-18.
  4. Markus Hadwiger (2015-03-09). „GPU and GPGPU Programming Lecture 12: GPU Texturing 2“ (PDF). KAUST. Texture Reconstruction: Magnification. Suarchyvuotas originalas (PDF) 2021-01-24. Nuoroda tikrinta 2020-11-18.
  5. Hendrik Lensch (2007-11-29). „Computer Graphics: Texture Filtering & Sampling Theory“ (PDF). Max Planck Society. MipMapping II. Nuoroda tikrinta 2018-01-14.