Teknillinen korkeakoulu 16.4.00 Tietoliikenneohjelmistojen ja multimediatekniikan laboratorio T-111.500 Tietokonegrafiikan seminaari Korkeatasoisen 3D-grafiikan renderöinti Kevät 00 Tekstuurien sovellukset Matti Sillanpää 49933B
Tekstuurien sovellukset Matti Sillanpää TKK, Tietoliikenneohjelmistojen ja multimediatekniikan laboratorio Matti.Sillanpaa@hut.fi Tiivistelmä Termiin tekstuuri eli pintakuvio kytkeytyy tietokonegrafiikassa hyvin monenlaisia tekniikoita. Englanninkielinen termi Texture Mapping on vakiintunut tarkoittamaan menetelmää, jossa kolmiulotteisen mallin pintoihin kuvataan bittikarttakuva. Teksturointia voidaan kuitenkin soveltaa hyvin monenlaisten vaikutelmien luontiin, joiden tekeminen ilman teksturointia olisi laskennallisesti raskaampaa tai jopa mahdotonta. Niin ympäristön heijastuksia, kuin varjojakin voidaan piirtää tekstuureja hyväksi käyttäen. Myös läpikuultavuuden ja pinnan muotojen modulointi tekstuurien avulla ovat laajalti käytössä olevia tekniikoita. 1 Esittely Käsittelen teksturoinnin käyttöä erilaisten vaikutelmien luomiseksi. Käyn läpi keskenään hyvin erilaisia sovelluksia teksturoinnille ja pyrin havainnollistamaan niitä esimerkein. Otsikoihin olen sisällyttänyt menetelmien alkuperäiskielisiä nimiä, koska niistä ei ole käytössä yleisiä suomennoksia. Olen kuitenkin pyrkinyt myös suomentamaan termit. Olen käyttänyt seuraavanlaista termistöä. Pikselillä tarkoitan kuvaruudun pistettä, ja tekselillä tekstuurikuvan pistettä. Viittaan kirjaimilla ja parametreihin, joilla pinta kuvataan. Termillä tarkoitan tekstuuria, jota näytteistetään jollakin tapaa suhteessa pinnan koordinaatteihin. Tekstuurikuvan parametrit ovat ja. Valon heijastuskomponentteja moduloiva teksturointi Tässä osiossa käsittelen teksturointitapoja, joiden tavoitteena on muuttaa esineen heijastusominaisuuksia tietyn valon heijastuskomponentin suhteen. Näissä tekstuurikuva parametrisoidaan esineen koordinaatiston suhteen. Tällöin kuva liikkuu esineen mukana ja syntyy vaikutelma, että se olisi kiinnitetty pintaan. Menetelmien ymmärtämiseksi on syytä tuntea yleinen tietokonegrafiikassa käytetty heijastusmalli, Phongin(Phong, 1975) malli. Reaaliaikaisessa grafiikassa käytetään 1
usein Phongin edeltäjää, Gouraud-mallia. Siinä varjostusarvot lasketaan kunkin pinnan vertekseille ja interpoloidaan niiden välille. Phongin malli tuottaa paremmat peilimäisen kiillon aiheuttamat valopisteet kuin Gouraud, koska siinä interpoloidaan pinnan normaaleja joka pikselille valoisuuden sijaan. Gouraud-valaistujen pintojen välille muodostuu helposti niin suuri valoisuusero, että syntyy Machin nauhojen ilmiö. Tämä johtuu valaistusarvon lineaarisesta interpolaatiosta kulmapisteiden välillä. Phong-mallissa valaistusarvo muuttuu todenmukaisemmin, eikä ilmiötä synny niin helposti. Normaalien interpolointi tekee varjostusmallista huomattavasti raskaamman kuin Gouraud, mutta toisaalta myös huomattavasti vakuuttavamman näköisen suhteessa laskennan vaativuuteen. Phongin heijastusmalli, jossa diffuusi- ja peilimäisen heijastuksen tekijät on jaettu erikseen, onkin käytetyin heijastusmalli tietokonegrafiikassa. Sen yhtälö on esitetty Foleyn ja Van Damin teoksessa (Foley et al., 1990) kohdassa 16.15 seuraavanlaisessa muodossa muuten, paitsi tässä on huomioitu useampi valonlähde kuin yksi: &(' *)+ ', +%-.0/ 1!#"%$ 3 4 5-6 / 7 ;=< kuvaa valon väriä ; i indeksoi eri valot ;?> on vakioarvo kaikkialla tasaisesti vallitsevalle taustavalolle ;?> )+ ' on pistemäisen valonlähteen värikohtaisen voimakkuuden kerroin ;A@ on pinnan taustavalon heijastuksen voimakkuuden kerroin ;A@ on pinnan diffuusiheijastuksen voimakkuuden kerroin ;A@ on pinnan peilimäisen kiillon voimakkuuden kerroin ;=B on pinnan värikohtainen diffuusiheijastuksen voimakkuuden kerroin ;=B on pinnan värikohtainen peilimäisen heijastuksen voimakkuuden kerroin ;AC &(' on valon heikkenemisfunktio etäisyyden suhteen ; D on yksikkövektori pinnasta valonlähteeseen ; E on pinnan normaali tutkittavassa pisteessä ; F on yksikköheijastusvektori ; G on yksikkövektori pinnan pisteestä katsojaan päin ; n on indeksi, jolla hallitaan peilimäisen kiillon valopisteen laajuutta ; m on valojen määrä Tällainen esitys saadaan, jos katsomissuunnan 7 ja heijastussuunnan 6 vektorit ovat normalisoitu ja peilimäiselle heijastukselle on valittu empiirisesti miellyttävä vakio- -JI, mutta tähän ei kerroin. Alunperin Phongin mallissa :n sijaan oli funktio H ole yleisesti tunnettua ratkaisumallia, ja käytännössä tämä korvataan tavallisesti sopivasti valitulla vakiolla. Tässä esitystavassa on myös huomattavaa, että esineellä on erikseen peilimäisen heijastuksen värikohtainen kerroin. Phongin mallia voitaisiin soveltaa myös ilman tuota komponenttia, jolloin vain valaistuksen väri määräisi heijastuksen värin. Syynä peilimäisen heijastuksen värin erotteluun diffuusiväristä on se, että tosimaailmassa on yleistä, että nämä värit ovat erilaisia samassa materiaalissa. Yhtälössä 1 käytetyt vektorit on esitetty kuvassa 1. 8:9 (1)
$ Koska tässä paperissa käsitellään useita tekniikoita, joilla on merkitystä nimenomaan reaaliaikagrafiikassa, esitellään tässä myös OpenGL:ssä käytetty valaistusmalli (yhtälö ) hieman yksinkertaistettuna. Verrattuna yhtälöön 1 huomataan, että OpenGL:n valaistusmalli on joltain osin yksinkertaisempi (k-termit on jätetty pois, eli eri heijastusten voimakkuutta säädellään vain suoraan väreihin liittyen), mutta se on myös jossain määrin yleisempi. Siinä nimittäin taustavalon voimakkuus lasketaan valokohtaisesti ja mukana on spottimainen käyttäytyminen sekä hohtavuuden komponentti. Termit on nimetty samoin kuin yhtälössä 1, jonka termit on selitetty aiemmin. Lisäksi yhtälössä on käytössä muutama uusi tekijä, jotka on selitetty alla. OpenGL:n malliin liittyvät vektorit on esitetty kuvassa. 8 9, 1 W L ; Y KLMNOP:NQ &(' )+S (' *)+ %-.T/ U O %-.V/ 3!#"R$ ;=B pinnan värikohtainen hohtavuuden kerroin ;AC )XS (' spottikartion valon peiton rajausfunktio katsomissuunnan ja valonlähteen suunnan puolessa välissä oleva vektori () L N R (peiliheijastuksen suunta) L N H R V Pinta Pinta Kuva 1: Phongin valaistusyhtälössä käytetyt vektorit Kuva : OpenGL:n valaistusyhtälössä käytetyt vektorit Peilimäisen heijastuksen laskentaan käytetään vektoria W, joka on katsontasuunnan ja valonlähteen suunnan puolessa välissä. Tämä on peilimäisen heijastuksen maksimivoimakkuuden suunta, sillä jos pinnan normaali osoittaisi W :n suuntaan, 6 ja 7 osoittaisivat myös samaan suuntaan. Tähän liittyy se laskennallinen etu, että jos valonlähteen ja katsojan etäisyys oletetaan äärettömäksi, W on vakio. Myös Phongin mallia voidaan käyttää puolivälivektorin W avulla, jolloin 6 / 7 korvataan tekijällä W /.. Huomattakoon, että sama n:n arvo antaa eri tulokset yhtälöiden 1 ja peilimäisille heijastuksille..1 Diffuusiheijastus Kun halutaan saada aikaan vaikutelma esineen pintaan maalatusta kuvasta, voidaan moduloida esineen heijastaman valon väriä tekselitasolla tekstuurikuvan avulla. Tällöin esineen värin määräävät tekijät ja yhtälöissä 1 ja korvataan tekijöillä ja. Vastaavasti yhtälön tekijä LJ korvataan LJ :llä. Varsinaisesta pintakuvioinnista ei synny vakuuttavaa vaikutelmaa, koska menetelmä tuottaa 3
kaksiulotteisen kuvan pinnalle eikä muuta mallin muotoa lainkaan: näin ollen tekstuuri eli pintakuvio on hieman harhaanjohtava termi. Tämä on kuitenkin perustapaus teksturoinnista (engl. Texture Mapping). Koska kuitenkin spekulaariväri on usein riippumaton diffuusiväristä, on syytä voida tehdä heijastuneen värin modulointi vain diffuusikomponentille (tai diffuusi- ja emissiokomponentille jos sellainen on mukana). Usein piirretäänkin diffuusivalaistuksen (ja mahdollisen emission) tuottama kuva tekstuurilla moduloituna erikseen ensimmäisellä piirtokerralla siten että [Z, ja spekulaariväri erikseen kumulatiivisesti toisella piirtokerralla siten että N\Z ja L]\Z.. Peilimäinen kiiltävyys (Specularity) Kiiltävyysominaisuuden moduloinnilla voidaan luoda vaikutelma vaikkapa tiiliseinästä, jonka heijastavuusominaisuudet vaihtelevat laastin ja tiilen välillä. Toisaalta voidaan tehdä mistä tahansa useammasta eri tavalla kiiltävästä materaalista koostuva esine, esim. muovin ja metallin sekoitus. Tämä voidaan toteuttaa käyttämällä omaa tekstuuria peilimäiselle kiiltävyydelle. Näin peilimäinen kiiltävyys voi muuttua tekstuurin avulla tekselin tarkkuudella suhteessa pinnan koordinaatteihin vastaavasti kuin kappaleessa.1 kuvailtiin diffuusivärin muuttuminen. Tällä tapaa piirrettäessä yhtälöiden 1 ja komponentti korvattaisiin termillä..3 Hohtavuus (Emission) Hohtavuuskomponentti on OpenGL:ssä sellainen, että hohtava materiaali on valaistu ilman valojen vaikutustakin, mutta se ei kuitenkaan valaise ympäröiviä materiaaleja. Jotta myös objektien toisiinsa heijastama valo voitaisiin ottaa huomioon, täytyisi käyttää globaalia valaistusmallia. Tämä ei ole nykyään reaaliaikagrafiikassa mahdollista. Hohtavuutta voitaisiin määritellä tekstuurin avulla esimerkiksi jos tehdään taulu, jossa on LED-valoja tms. pienille alueille rajattuja itsevalaisevia kohtia. Tällöin moduloidaan yhtälön komponenttia L. Jos kaikkia komponentteja moduloidaan omalla tekstuurillaan, ei yhtälössä tarvita enää välttämättä -tekijöitä, koska tekstuureilla voidaan kuvata värityksen erot eri heijastuskomponenttien suhteen täysin. 3 Katsontasuunnasta riippuvat teksturointitekniikat Näitä menetelmiä voidaan pitää joko teksturointimenetelminä tai ns. first-hit raytracingina. Kuitenkin nämä luetaan yleensä teksturoinnin piiriin, ja on siksi käsitelty tässä. 4
v w - v w v x $ $ 3.1 Ympäristön heijastuksen kuvaus (Environment Mapping / Specular and Diffuse Reflection) Ympäristön kuvaaminen esineen pinnalle Environment Mapping -tekniikalla on ollut suosittu väline elokuvien erikoistehosteissa. Tekniikka voitaisiin suomentaa vaikkapa heijastuskuvaukseksi. Siinä missä tavallisessa teksturoinnissa tekstuurin koordinaatit ovat vain esineestä riippuvia, tätä menetelmää sovellettaessa ne riippuvat kunkin pinnan normaalin asennosta kameraan nähden. Säteitä jäljitetään silmästä esineeseen, ja siitä kimmottuaan kaksiulotteiseen kuvaan. Tässä tekniikassa ympäristö kuvataan kaksiulotteiseksi kuvaksi pallolle, lieriölle tai kuutiolle. Alkuperäinen menetelmä(blinn & Newell, 1976) on perustunut pallokuvaukseen. Siinä kamerasta esineeseen ammutun säteen heijastunut suunta ratkaistaan ja muunnetaan napakoordinaateiksi. Näiden koordinaattien avulla haetaan palloprojektiokuvasta oikea väriarvo kuvaamaan diffuusi- ja peilimäistä heijastusta, ja moduloidaan sillä esineen pintaa joka saattaa olla teksturoitu ensin kappaleessa kuvatuilla menetelmillä. Tavalliseen teksturointiin nähden siis ero on siinä, että heijastuman suunta määrää pinnan värin parametrien - _^ sijaan. Menetelmää on havainnollistettu kuvassa 3. Reaaliaikagrafiikassa riittää, että kimmonneen säteen suunta ratkaistaan pintojen kulmapisteille: grafiikkakiihdytin hoitaa teksturoinnin näiden koordinaattien perusteella. Myös yhdistely esineen pintaan mahdollisesti liittyvän tekstuurikuvan kanssa käy nykyään rautatuen avulla. Diffuusiheijastuksia kuvatessa tämä tapahtuu yleensä sumentamalla. Heijastuskuvalla modulointi lisää valaistusyhtälöihin ja 1 termin a` LMb+cdLMe f U hg irj&kml n jokrl, jossa a` LpbqcdLMe (rp on pinnan peilimäisyyden voimakkuus (ei spekulaarikomponentin vaan sen, kuinka selvästi ympäristö näkyy pinnasta) ja hg irj&kml n jokrl on tekstuurikartta, jota indeksoidaan kimmoneen säteen suunnan avulla. Jos käytetään tavallista teksturointia ja lisäksi ympäristön heijastusta, voidaan teksturointi suorittaa yhtälöllä: Xs t L -U ] -!#" $ a` LMb+cdLMe f U hg &(' )+S (' u ' -.T/ 1!#" $ U 8 &(' )+S (' u ' -.T/ W irj&kml n jokrl Heijastuneen säteen R suunnan perusteella ratkaistaan tekstuurikoordinaatit pallokuvasta seuraavilla yhtälöillä, jotka on esitetty teoksessa (Watt & Watt, 199) yhtälöinä 6.: 6 ˆ vyx:z {g} " -~6 5 6 P ^h z ƒ {g} " - U (3) ƒ z (4)
Kuva 3: Environment Mapping -tekniikka pallokuvauksen avulla Menetelmä on uskottavan näköinen silloin, kun esine on pallon keskellä ja kaukana ympäristökuvassa olevista esineistä. Muuten geometriset vääristymät kasvavat, sillä kuva on luotu valmiiksi ja projisoitu oikein vain tietystä pisteestä katsottuna. Vääristymiä voidaan lieventää käytännössä laskemalla ympäristökuva useasta eri pisteestä, ja valitsemalla käytetty kuva esineen sijainnin mukaan. Jos esine on niin monimutkainen, että se aiheuttaa heijastumia itseensä, nämä heijastukset voidaan ratkaista vain varsinaisen ray-tracingin avulla. Menetelmästä on tehty monipuolisempi versio siten, että lähellä olevat esineet käsitellään erikseen. Hallin(Hall, 1986) menetelmässä lähellä olevat esineet lasketaan ray-tracingin avulla. Valinta kuvakartan ja ray-tracingin välillä tehdään sen mukaan, kuinka suuren avaruuskulman heijastunut esine muodostaa heijastavaan esineeseen nähden. Palloon kuvaamisesta johtuen Blinnin ja Newellin menetelmässä on joitain huonoja puolia. Koska indeksointi ympäristökuvassa riippuu vain heijastuneen säteen R suunnasta, esineissä, joilla on suuria tasaisia pintoja, pyrkii syntymään heijastuksia paljon samaan kohtaan kuvassa. Lisäksi kuvassa on singulariteetti navoilla eli silloin kun 6 v tai 6 v. Silloin heijastusvektorin komponentit 6 \Z ja 6 ŠZ, joten s-koordinaatti ei ole enää hyvin määritelty kuten yhtälöstä 4 nähdään, vaan se vaihtelee liian herkästi. Ilmiötä voidaan kompensoida vääristämällä kuvaa napa-alueilta, mutta vääristymä laskee heijastusvaikutelman laatua. Greene(Greene, 1986) on parantanut menetelmää siten, että heijastettu maailma kuvataan kuution pinnoille. Koska singulariteetteja ei ole, ovat vääristymät myös lievempiä. Kuution kuviin saadaan myös sisällytettyä enemmän informaatiota kuin yhteen pallopintaan, joten heijastuneesta kuvasta saadaan terävämpi. Tätä tekniikkaa on sovellettu elokuvissa, kun tietokoneella luotu kiiltäväpintainen hahmo on haluttu istuttaa kuvaan, jossa tausta on aitoa. Esimerkiksi filmeissä The Abyss ja Terminator on kohtauksia, joissa näin on tehty. 6
3. Kromipinnan kuvaus (Chrome / Reflection Mapping) Environment mappingia edullisempi tapa luoda vaikutelma siitä, että ympäristö heijastuu esineestä. Vaikutelma heijastavasta kromimaisesta pinnasta voidaan tehdä melko ylimalkaisesti siksi, että sen tyyppiset pinnat heijastavat ympäristön sumeana pinnan epätasaisuuksista johtuen. Näin ollen tarkkoja kuvia ympäröivästä maailmasta ei tarvita, vaan vain summittainen kuva siitä, millaiset valaistuksen voimakkuus ja värit ovat eri suunnissa. Toteutus on sama kuin jos environment mapping -tekniikka toteutettaisiin palloprojektion avulla. Kromikuvauksessa pallon navoissa olevien singulariteettien aiheuttamat häiriöt voidaan kuitenkin lieventää sillä, että etenkin kromikartan ylä- ja alaosaa summenetaan etukäteen. Tässä tapauksessa palloprojektion puutteet eivät siis haittaa niin paljon, koska krominen heijastuskuvio saa olla melko sumea. 3.3 Taittumisen kuvaus (Refraction Mapping) Taittumista voidaan mallintaa melko samaan tapaan kuin heijastumista. Heijastuneen säteen sijaan lasketaan taittunut säde, jota seurataan kaksiulotteiseen kuvaan. Tuo kuva on tasaisella pinnalla. Taittumisen aiheuttavan materiaalin takana olevaa kuvaa ei siis kuvata joka puolelle ympärille niinkuin heijastumisen kuvauksessa. Näin ollen tämä tekniikka toimii vain silloin, kun taataan, että taittunut säde osuu lopulta kohdekuvaan, eikä mene siitä ohi. Ympäristön heijastumisen ja taittumisen kuvauksia voidaan myös yhdistää. T so:n ja Barskyn (T so & Barsky, 1987) menetelmässä näin on tehty veden pinnan kuvaamiseksi. He ovat yhdistelleet lineaarisesti heijastumisen ja taittumisen kuvausten tuottamia arvoja. Elokuvassa The Abyss nähty vesiolento on myös esimerkkitapaus heijastus- ja taittumiskuvausten yhdistelystä. 4 Pinnan muotoa muuttavat kuvaukset Tässä osiossa käsiteltyjen aiheiden kohdalla tekstuurilla tarkoitetaan tavallisen merkityksen, kaksiulotteisen kuvan, sijaan korkeusmatriisia, jonka mukaan pinnan muotoa moduloidaan näennäisesti tai varsinaisesti. 4.1 Pinnan normaalien suunnan kuvaus (Bump Mapping) Kun halutaan tuottaa vaikutelma epätasaisesta pinnasta, pelkkä pintakuvion kuva ei riitä. Tavallisella tekstuurikuvalla ei nimittäin saada aikaan varjoja, jotka pinnan epätasaisuudet aiheuttavat. Pinnanmuotojen kuvaamiseen onkin kehitetty menetelmä, joka muuttaa myös pinnan heijastamissuuntaa lokaalissa valaistusmallissa. Bump Mapping -tekniikan kehitti James Blinn (Blinn, 1978) vuonna 1978. Suomeksi menetelmän nimi tarkoittaa suunnilleen töyssyjen kuvausta. 7
Kyseessä on väline, joka ei vaikuta pinnan geometriaan, vaan ainoastaan sen heijastuksiin. Siinä muutetaan pinnan normaalien suuntaa korkeusmallin avulla. Syntyneen vaikutelman puutteena onkin se, että esineen siluetti tai varjokuva eivät muutu. Tällainen teksturointi tuottaa kuitenkin vaikutelman pintakuvioinnista niinkuin se yleensä ymmärretään. Näin olleen kyseessä on merkittävä menetelmä. Sen avulla on mallinnettu puunkuoria, nahan ryppyjä yms. tarkkoja pintakuvioita. Tekniikan toteutuksessa täytyy muuttaa normaalivektoreiden suuntaa tavalla, joka ei riipu pinnan asennosta tai paikasta. Toisin sanoen tietyn pinnan pisteen normaalivektori tulee aina kääntää samalla tavalla. Muuten pintakuvio muuttuisi suhteessa esineeseen, kun esinettä liikutetaan. Menetelmän vaikutusta on havainnollistettu kuvassa 4. korkeutta korkeuskartan avulla normaalin Moduloidaan siis pinnan pisteen - }^ suuntaan: Œf- _^ Ž- _^ - ^ (a) Alkuperäinen pinta (b) š* Korkeuskartta (Bump Map) (c) œ ( ( :n pidentäminen ja lyhentäminen žšÿ :lla (d) œ ( Uuden näennäispinnan normaalivektorit Kuva 4: Yksiulotteinen esimerkki Bump Mapping -tekniikasta Jotta tällainen ilmiö saadaan aikaan, täytyy pinnan joka pisteessä laskea pisteen paikkavektorin osittaisderivaatat s ja t, jotka määrittelevät pinnan normaalin. Määritellään myös kaksi muuta vektoria, jotka ovat tangenttitasossa.. s t.[ t.[ s on normaalia kääntävä vektori, joka johdetaan vektoreista 8 ja. Blinn on
osoittanut, että tällä tavoin saadaan hyvä approksimaatio uudelle normaalille:. Œ. Vektorit, ja. muodostavat koordinaattijärjestelmän, jossa on määritelty niin, että se on riippumaton esineen sijainnista ja asennosta maailmankoordinaatistossa. Vektorit on esitetty kuvassa 5. Tekstuuriin tallennetaan siis kuvan 4(b) esittämään tapaan korkeustietoa, ja varsinaista pinnan normaalin modulaatiota varten ratkaistaan osittaisderivaatat uuden pinnan kussakin pisteessä. N N N N N Ov O Ou Bs D -Bt F E F E (a) Pinnan normaali pisteessä (b) Vektorit ja (c) Vektori ªT«] Kuva 5: Bump Mapping -tekniikan geometria Menetelmä on ollut sikäli käytännöllinen, että samaa mallia voidaan käyttää ilman bump mappingia ja sen kanssa. Ennenkaikkea etu on siinä, että se on laskennallisesti huomattavasti kevyempi tapa luoda vaikutelma pienistä pinnanmuodon muutoksista, kuin laskea varjostus mallille, jossa nämä muodot olisi mallinnettu. 4. Pinnan alueen suunnan kuvaus (Frame Mapping) James Kajiya(Kajiya, 1978) laajensi vuonna 1985 Cook-Torrance -valaistusmallia, jotta olisi mahdollista simuloida pintoja, joidan valaistus ei ole symmetrinen normaalin suhteen. Jotta tällä tavalla varjostettuja pintoja olisi mahdollista mallintaa, hän julkaisi myös menetelmän, joka laajentaa Bump Mappingia. Siinä hämmennetään pinnan normaalin lisäksi paikallista koordinaatistoa. Tästä koordinatistosta Kajiya käytti termiä frame eli suomennettuna jotakuinkin raami tai alue. Paikallisen koordinaatiston riittävät määräämään pinnan normaali, tangentti ja sivunormaali, jotka ovat kuvassa 5(a) vektorit., s ja t. Menetelmän avulla voidaan mallintaa anisotrooppisia pintoja, kun tangentti asetetaan pinnan rakeiden suuntaisesti. Esimerkkejä pinnoista, joiden kuvauksessa menetelmää voitaisiin hyödyntää ovat ristikkäisten lankojen aiheuttamat kuviot kankaassa, tai hiukset.. 9
4.3 Pinnan muodon kuvaus (Displacement Mapping) Robert L. Cook esitteli pinnan muotoa muuttavan kuvauksen(cook, 1984) vuonna 1984. Siinä pinnan muotoja syrjäytetään normaalin suuntaan, eli muutetaan mallin muotoa. Tätä menetelmää on raskas hyödyntää reaaliaikaisesti, eikä sitä olekaan käytetty peleissä. Sen sijaan sitä hyödynnetään mallinnusohjelmissa, kun halutaan luoda vakuuttavan näköisiä, vaikkakin monimutkaisia malleja. Yleensä ottaen sitä tarvitaan Bump Mappingin sijaan vain, jos pinnanmuotojen täytyy näkyä mallin siluetistakin. 5 Varjot Nykyään pelien maailmoihin tuodaan lisää vakuuttavuutta myös varjojen avulla. Käyttämällä nykyaikaisten grafiikkakiihdyttimien tarjoamia teksturointimahdollisuuksia hyväksi varjot voidaan toteuttaa tehokkaasti. 5.1 Varjojen syvyyskartat (Shadow Maps) Williamsin esittelemä menetelmä(williams, 1978) varjojen tekemistä varten on kaksivaiheinen. Ensin lasketaan syvyyskuva valon kannalta, eli kuva, jossa on kussakin pisteessä talletettuna valoa lähimpänä olevan pisteen etäisyys. Seuraavaksi lasketaan näkymä silmästä katsottuna. Jokaiselle piirretylle osalle ratkaistaan etäisyys valosta. Verrataan syvyyskuvassa tallessa olevaa arvoa nyt ratkaistuun syvyysarvoon. Jos syvyyskuvassa oli selvästi pienempi arvo, piirrettävä osa on jonkin toisen osan varjossa. Menetelmän heikkous on se, että varjot ratkaistaan vain syvyyskuvan tarkkuudella, eikä katsojan kulmasta lasketun kuvan pikseleiden tarkkuudella. Tämä saattaa aiheuttaa värinää varjojen reunoille. Parannuksena tekniikkaan Reeves(Reeves et al., 1987) esitti menetelmän reunojen pehmentämiseksi. Siinä varjon tilaa tutkitaan alueittain, ja lasketaan osamäärä siitä, kuinka suuri osa tutkituista osista oli lähempänä kuin syvyyskuvan arvo. 5. Varjotekstuurit (Shadow Textures) Varjoja on laskettu useimmissa peleissä seuraavalla tavalla. Jaetaan maailma liikkumattomiin ja liikkuviin osiin, ja lasketaan liikkumattomalle maastolle varjot etukäteen. Maaston heittämät varjot liikkuvien esineiden päälle ratkaistaan karkeasti laittamalla esine joko kokonaan varjoon tai valoon. Esineiden toistensa päälle heittämät varjot jätetään huomiotta. Täytyy siis ratkaista vielä esineiden taustaa vasten heittämät varjot. Yksi toteutustapa on se, että kukin esine projisoidaan maatasoa vasten ja projisoitu kuva piirretään mustana. Tasoprojektio ei kuitenkaan anna kovin hyvää vaikutelmaa, jos maasto on kovin monimutkaista. Toinen vaihtoehto on, että varjokuva talletetaan tekstuuriksi, jota projisoidaan eri pinnoille. Tällöin varjo voidaan tallettaa joko vain kerran jolloin se voi olla ympyrä 10
tms. ylimalkainen kuva ja käyttää aina samaa kuvaa, tai laskea reaaliaikaisesti valon suunnasta. Paperissa(Segal et al., 199) on kuvattu, miten tekstuurien projisointi malliin voidaan toteuttaa. Siinä on myös huomioitu, että tekstuureja projisoimalla voidaan yhtälailla simuloida spottivaloa tai diaprojektoria. 6 Läpikuultavuus (Textured Opacity / Transparency) Sen lisäksi, että tekstuureilla voidaan kuvata väriarvoja, niihin voidaan sisällyttää neljäs komponentti, jota kutsutaan alfa-komponentiksi. Sillä voidaan säädellä, miten renderöity pinta yhdistetään kuvamuistiin. Yleinen tapa hyödyntää tuota komponenttia on se, että piirrettävän pinnan taakse jäävät pinnat jäävät myös näkyviin ja pinnan peittämän alueen väriarvoja vain moduloidaan. Näin syntyy vaikutelma läpikuultavuudesta. Kun kuva piirretään monessa vaiheessa, täytyy ottaa huomioon, että useamman piirtokerran aikana täytyy yhdistää läpikuultavuusefektit. Normaalisti alfa-arvon perusteella tapahtuvan yhdistelyn (engl. alpha-blending) yhtälö on seuraavanlainen: 7 Diffuusivalaistus s+s Š t 8 /%- v ²± ² sxc³s / ± (5) Nykyään tekstuureita voidaan käyttää reaaliaikagrafiikassa tehokkaasti rautatuen avulla. Niihin voidaan myös sisällyttää laskennallisesti vaativien kaksiulotteisten (tai kolmiulotteisten, jos tälle on tuki) funktioiden tuloksia, joita ei voitaisi laskea reaaliajassa. Jos mallin valaistus ja geometria ovat staattisia, on myös pinnoista heijastuva diffuusivalo staattista, sillä sen voimakkuus ei riipu katsomissuunnasta. Jos tekstuurimuistia olisi tarpeeksi, voitaisiin jokaiselle pinnalle laskea ja tallettaa oma, valaistuksen vaikutuksen sisältävä pintakuvionsa. Tämä veisi kuitenkin yleensä ottaen liikaa muistia varsinkin tarkkojen tekstuurien kohdalla. Laajalle pinnalle voidaan asettaa toistuva tekstuurikuvio, mutta valaistus ei toistu vastaavalla tavalla. Myös saman tekstuurikuvan käyttö eri kohdassa vaatisi uuden, eri tavalla valaistun version tallettamista tekstuurikuvasta. Toinen lähestymistapa onkin näytteistää valaistus karkeammalla erottelulla kuin varsinainen pintakuva, ja rekonstruoida valaistu pinta reaaliajassa. Tämä voidaan tehdä nykyaikaisilla grafiikkakiihdyttimillä esim. bilineaarista filtteröintiä käyttäen. Diffuusipintakuvio renderöidään ensin näyttömuistiin ja sen jälkeen diffuusivalaistuskuvio sen päälle siten, että sillä moduloidaan pintakuviota. Nykyaikaiset näytönohjaimet pystyvät tekemään tämän multiteksturointiominaisuuksiensa avulla tehokkaasti. 11
LÄHDELUETTELO Blinn J. F. 1978. Simulation of Wrinkled Surfaces. Proceedings of SIGGRAPH 78. Blinn J. F., & Newell M. 1976. Texture and Reflection in Computer Generated Images. Association for Computing Machinery inc. Pages 54 547. Cook R. L. 1984. Shade Trees. Proceedings of SIGGRAPH 84. Foley J. D., Dam A. Van, Feiner S. K., & Hughes J. F. 1990. Computer Graphics: Principles and Practice. Addison-Wesley Publishing Company. Greene N. 1986. Environment Mapping and Other Applications of World Projections. IEEE Computer Graphics and Applications. Hall R. 1986. Hybrid Techniques for Rapid Image Synthesis. SIGGRAPH Course Notes. Kajiya J. 1978. Anisotropic Reflection Models. Proceedings of SIGGRAPH 78. Phong B. T. 1975. Illumination for Computer Generated Pictures. Association for Computing Machinery inc. Reeves W. T., Salesin D. H., & Cook R. L. 1987. Rendering Antialiased Shadows with Depth Maps. Proceedings of SIGGRAPH 87. Segal M., Korobkin C., van Widenfelt R., Foram J., & Haeberli P. 199. Fast Shadows and Lighting Effects Using Texture Mapping. Association for Computing Machinery inc. T so P. Y., & Barsky B. 1987. Modeling and Rendering Waves: Wave Tracing using Beta splines and Reflective and Refractive Texture Mapping. Association for Computing Machinery, inc. Watt A., & Watt M. 199. Advanced Animation and Rendering Techniques. Addison- Wesley Publishing Company. Williams L. 1978. Casting Curved Shadows on Curved Surfaces. Proceedings of SIGGRAPH 78. 1