Teksturointi

Wikipediasta
Siirry navigaatioon Siirry hakuun
Tämä artikkeli käsittelee tietokonegrafiikkaa. Teksturointi on myös kasviproteiinin valmistusmenetelmä (ks. Soijarouhe).
Kaksi M1A2 Abrams -taistelupanssarivaunua esittävää kolmiulotteista mallia, joista alempi teksturoitu.

Teksturoinnilla eli pintakuvioinnilla tai tekstuurimappauksella tarkoitetaan tietokonegrafiikassa geometrisen perusmuodon pinnoittamista useimmiten bittikarttakuvalla eli tekstuurilla. Teksturointia käytetään etenkin 3D-grafiikassa tuomaan kuvaan lisää todenmukaisuutta ja näyttävyyttä ilman että kuvan polygonimallin rakennetta tarvitsee monimutkaistaa.[1] 3D-grafiikassa kappaleen muotoa kuvataan polygoneilla eli monikulmioilla ja sen pintarakennetta tekstuureilla.

Teksturointia käytetään nykyisissä peleissä hyvin paljon, ja nykyaikaiset näytönohjaimet ja pelikonsolit pystyvätkin reaaliaikaiseen teksturointiin laitteistotasolla.

Teksturoinnin perusajatuksen esitti Edwin Catmull väitöstyössään A Subdivision Algorithm for Computer Display of Curved Surfaces (1974) ja sitä paransivat myöhemmin James F. Blinn & Martin E. Newell vuonna 1976 (Texture and Reflection in Computer Generated Images).[2][3]

Teksturointi jakautuu teknisesti kahteen vaiheeseen, geometriseen kuvaukseen eli tekstuurin kuvaamiseen kappaleen pinnalle ja suodatukseen, eli tapaan jolla pikselit esitetään ruudulla. Tekstuuri kuvataan geometriselle muodolle yleensä siten, että kolmion (polygoni voidaan aina jakaa kolmioiksi) jokaiselle kulmalle on määritelty tekstuurikoordinaatit ja teksturointi kolmion sisäosiin interpoloidaan kulmien koordinaattien perusteella käyttämällä Bresenhamin algoritmin laajennusta. Muilla kuin ortogonaalisilla koordinaatistoilla yksinkertainen lineaarinen interpolointi johtaa kuitenkin perspektiivivääristymään, jonka korjaamiseksi tarvitaan perspektiivikorjausta. Se kuluttaa enemmän tehoa, mutta useimmat nykyiset näytönohjaimet pystyvät laitteistotasoiseen perspektiivikorjaukseen.

Koska teksturoitava pinta voi olla missä asennossa ja millä etäisyydellä katsojaan nähden tahansa, tekstuurin pikselit (eli tekselit) ja kuvan pikselit eivät yleensä vastaa toisiaan. Esimerkiksi jos kappale on kaukana ja siten kuvataan ruudulle pienenä, voi jokaista kuvan pikseliä kohden olla useampia tekstuurin pikseleitä. Vastaavasti, jos pinta on lähellä, yksi tekstuuripikseli voi kuvautua useaksi kuvan pikseliksi. Suodatus eli filtteröinti tarkoittaa kuvan pikselien päättelemistä tekstuurin pikseleistä.

Yksinkertaisin ja nopein suodatustapa on lähimmän naapurin menetelmä, jossa haetaan lähimmän tekstuuripikselin väriarvo. Näin yksinkertainen suodatus aiheuttaa kuitenkin ongelmia silloin, kun kappaleet ovat erityisen kaukana, jolloin tekstuurit muuttuvat pikselimössöksi, eli signaalinkäsittelyn termein kuva laskostuu, ja silloin, kun kappaleet ovat erityisen lähellä, jolloin tekstuurit palikoituvat. Kaukana olevien tekstuurien laskostumisongelmaa voi korjata mipmap-tekniikalla, jossa tekstuuri vaihdetaan esimuodostettuun pienempään versioon kappaleen siirtyessä kauemmas. Tämä parantaa myös etenkin monimutkaisempien suodatusalgoritmien tehoa, koska niiden ei tarvitse laskea kaukana olevien kappaleiden pikseleitä lukuisten tekstuuripikseleiden keskiarvona. Mipmapping ei kuitenkaan auta palikoitumiseen tekstuurien ollessa lähellä.

Kehittyneempi mutta myös hieman enemmän tehoa vievä on bilineaarinen suodatus, jossa pikseli lasketaan neljän lähimmän tekstuuripikselin etäisyyksillä painotettuna keskiarvona. Tämä parantaa lähellä olevien tekstuurien ulkonäköä (tosin myös sumentaa niitä). Laskostumisongelmaa bilineaarinen suodatus sen sijaan ei korjaa, joten siihen yhdistetään lähes aina mipmapping.

Trilineaarinen suodatus huomioi bilineaariseen interpolointiin lisäksi lähimmän toisen mipmapping-tason pikselit, mikä korjaa häiriötä mipmappien vaihtumiskohdassa. Kehittynein nykyisten yksityiskäyttäjätasoisten näytönohjainten tukema suodatusmenetelmä on anisotrooppinen suodatus, joka interpoloi pikseleitä katselukulman mukaan muodostetun puolisuunnikkaan mukaan trilineaarisen ja bilineaarisen suodatuksen käyttämän neliön sijaan. Tämä parantaa tulosta epäsuorissa kulmissa ja kaukaisuudessa.

Käytettävä tekstuuri on yleensä kaksiulotteinen bittikarttakuva, mutta se voi olla myös yksi- tai kolmiulotteinen. Se voidaan ottaa valokuvasta, piirtää tai konstruoida matemaattisena funktiona, ja esittää normaalina bittikarttataulukkona tai esimerkiksi fourier-sarjoina. Tekstuuri voi olla myös muu kuin kuva: esimerkiksi bump mapping-tekniikassa vaikutetaan valaistuksessa käytettäviin parametreihin.

Koska tekstuurien käyttökohteet vaativat monimutkaisempaa taidetta tekstuurit vaativat enemmän yksityiskohtia ja siten vaativat enemmän muistikapasiteettia. Suuremmat ja enemmän tilaa vievät tekstuurit vaativat myös enemmän kaistaa laitteistolta tekstuurien siirtämiseen grafiikkaliukuhihnassa. Tästä johtuen on kehitetty useita pakkausmenetelmiä tekstuureita varten, jotka toimivat vaihtelevasti eri tarkoituksiin kuten normaalikartoitukseen ja dekaaleihin.[4]

  1. Texture Mapping (PDF) web.cse.ohio-state.edu. Arkistoitu 11.7.2019. Viitattu 12.1.2021. (englanniksi)
  2. Brian Curless: Texture Mapping (PDF) courses.cs.washington.edu. syksy 2017. Viitattu 31.12.2020. (englanniksi)
  3. James F. Blinn & Martin E. Newell: Texture and Reflection in Computer Generated Images dl.acm.org. lokakuu 1976. doi:10.1145/360349.360353 Viitattu 25.9.2022. (englanniksi)
  4. Allen Sherrod: Texture Compression Techniques and Tips gamedeveloper.com. 28.12.2005. Viitattu 23.9.2022. (englanniksi)

Aiheesta muualla

[muokkaa | muokkaa wikitekstiä]