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.

Teksturoinnillaelipintakuvioinnillataitekstuurimappauksellatarkoitetaantietokonegrafiikassageometrisenperusmuodon pinnoittamista useimmitenbittikarttakuvallaeli tekstuurilla. Teksturointia käytetään etenkin3D-grafiikassatuomaan kuvaan lisää todenmukaisuutta ja näyttävyyttä ilman että kuvanpolygonimallinrakennetta tarvitsee monimutkaistaa.[1]3D-grafiikassa kappaleen muotoa kuvataanpolygoneillaeli 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 esittiEdwin CatmullväitöstyössäänA Subdivision Algorithm for Computer Display of Curved Surfaces(1974) ja sitä paransivat myöhemminJames F. Blinn&Martin E. Newellvuonna 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 algoritminlaajennusta. 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 onlä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 kuvalaskostuu,ja silloin, kun kappaleet ovat erityisen lähellä, jolloin tekstuurit palikoituvat. Kaukana olevien tekstuurien laskostumisongelmaa voi korjatamipmap-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ä onbilineaarinen 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 suodatushuomioi 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ä onanisotrooppinen 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: esimerkiksibump 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ämiseengrafiikkaliukuhihnassa.Tästä johtuen on kehitetty useitapakkausmenetelmiätekstuureita varten, jotka toimivat vaihtelevasti eri tarkoituksiin kutennormaalikartoitukseenja dekaaleihin.[4]

  1. Texture Mapping(PDF)web.cse.ohio-state.edu.Arkistoitu11.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 Imagesdl.acm.org.lokakuu 1976.doi:10.1145/360349.360353.Viitattu 25.9.2022.(englanniksi)
  4. Allen Sherrod:Texture Compression Techniques and Tipsgamedeveloper.com.28.12.2005. Viitattu 23.9.2022.(englanniksi)

Aiheesta muualla

[muokkaa|muokkaa wikitekstiä]