TEKNILLINEN KORKEAKOULU 30.4.2003 Tietoliikenneohjelmistojen ja multimedian laboratorio Tik-111.500 Tietokonegrafiikan seminaari Kevät 2003: Reaaliaikainen 3D grafiikka Yksinkertaistaminen normaalitekstuureiksi Jarkko Luoma 45329S
Yksinkertaistaminen normaalitekstuureiksi Jarkko Luoma TKK, Tietoliikenneohjelmistojen ja multimedian laboratorio Jarkko.Luoma@hut.fi Tiivistelmä Tämä tutkielma esittää miten paljon polygoneja sisältävien objektien yksityiskohdat voidaan siirtää normaalitekstuureihin ja näin tehdä mahdolliseksi yksinkertaistaa objektin rakennetta. Ensin esitellään normaalitekstuurin käsite. Sitten käydään läpi menetelmän edut ja ongelmakohdat. Sen jälkeen selvitetään miten normaalitekstuuri muodostetaan yksityiskohtaisesta objektista. Sitten kerrotaan vielä miten normaalitekstuuria voidaan käyttää reaaliaikaisessa valaistuslaskennassa. Lopuksi perehdytään vielä menetelmän nykysovelluksiin ja pohditaan menetelmän tulevaisuutta. 1 JOHDANTO Yksinkertaistaminen normaalitekstuurien avulla on menetelmä, jolla objektin polygonien määrää voidaan vähentää huomattavasti ilman, että kappaleen visuaalinen ilme olennaisesti muuttuu (Kuva 1). Menetelmän ideana on, että vähän polygoneja sisältävän kappaleen valaistus voidaan laskea siten kuin kyseessä olisi yksityiskohtainen kappale. Normaalitekstuurit lasketaan alkuperäisen paljon polygoneja sisältävän kappaleen avulla. Koska yksityiskohtaista versiota objektista käytetään vain normaalitekstuurien laskemiseen, voi alkuperäisessä kappaleessa olla periaatteessa rajattomasti polygoneja. Se kuinka paljon alkuperäisen kappaleen yksityiskohdista pystytään siirtämään normaalitekstuuriin riippuu kuitenkin käytetyn normaalitekstuurin koosta. Itse normaalitekstuuri on tavallinen kuvatiedosto. Normaalitekstuurin yhden pikselin värin R-, G- ja B-komponentit vastaavat normeeratun normaalivektorin x-, y- ja z-komponentteja. Normaalitekstuurin käyttäminen on siis yksi teksturilla pinnoittamisen muoto. Väriarvojen sijaan tekstuurista vain löytyy pinnan normaalivektoreita. Tekstuureilla pinnoittamista ei kuitenkaan käsitellä tässä tarkemmin. Normaalitekstuuria hyödynnetään valaistuksen laskennassa siten, että laskennassa käytetään normaalitekstuurin normaaleja objektin pinnan normaalien interpoloinnin sijaan. Objektien polygonien vähentäminen siten, että kappaleen muoto säilyy mahdollisimman lähellä alkuperäistä on normaalitekstuurien soveltamiseen läheisesti liittyvä aihe, sitä ei kuitenkaan käsitellä tässä tutkielmassa tarkemmin. Englannin kielisiä termejä "bump map" ja "normal map" käytetään usein sekaisin. Termi "bump map" tarkoittaa kuitenkin tekstuuria, jolla poikkeutettaan pinnan omaa normaalia. 2
Tällä saadaan alunperin tasaiseen pintaan kumpuja, ja näin pinnasta tulee elävämmän ja yksityiskohtaisemman näköinen (Kuva 2). Termi "normal map" puolestaan tarkoittaa normaalitekstuuria, joka on laskettu paljon polygoneja sisältävän kappaleen pohjalta, ja sisältää näin ollen alkuperäisen objektin pinnan aitoja normaalivektoreita. Kuva 1: Armadillo objekti neljällä eri polygonimäärllä esitettynä. Yllä valaistuksen laskennassa on käytetty normaalitekstuurin normaaleja, alla polygonien kärkipisteiden normaaleja. ("Appearance-preserving simplification", Cohen et al., 1998) 3
Kuva 2: "Bump mapping"-tekniikalla saadaan tasaiset pinnat näyttämään kumpuilevilta. ("Gouraud bump mapping", Ernst et al., 1998) 2 MENETELMÄN EDUT JA ONGELMAKOHDAT Nykyaikaisessa 3D-grafiikassa käytettävät objektit voivat sisältää kymmeniä- tai satojatuhansia polygoneja, etenkin jos ne on tuotettu kolmiulotteisella laserskannauksella aidosta esineestä. Tällaisen kappaleen kierto sekä valaistuslaskenta on hyvin raskasta. Tarve objektin yksinkertaistamiseen on suuri. Kun objektin polygonien määrää vähennetään, menetetään samalla kuitenkin jatkuvasti yksityiskohtia. Normaalitekstuureita käytettäessa nämä yksityiskohdat, ainakin osittain, voidaan siirtää normaalitekstuuriin ja näin totetuksessa voidaan käyttää yksinkertaistettua versiota objektista. Objektin polygonien määrää voidaan vähentää sadasosaan tai jopa vieläkin pienemmäksi, ilman että objektin ulkoasu kärsisi liikaa (Kuva 1). Normaalitekstuurin käyttö ei ole laskennallisesti täysin ilmaista, sillä valaistuksen selvittämiseksi joudutaan suorittamaan vektoreiden kiertoja, interpoloimaan vektoreita, sekä laskemaan vektoreiden välisien kulmien kosineita. Koska reaaliaikaisessa valaistuslaskennassa käytetään huomattavasti yksinkertaistettua kappaletta niin kappaleen reunat voivat näyttää varsin kulmikkailta (Kuva 3). Tämä on ehkäpä menetelmän suurin heikkous. Myös objektin animointi (so. reaaliaikainen muokkaus) aiheuttaa ongelman, joka täytyy ratkaista joko laskemalla normaalitekstuuri erikseen jokaiselle mahdolliselle objektin muodolle tai sitten kiertämällä valon suuntavektoreita sopivasti objektin valaistusta laskettaessa. 4
Kuva 3: Yksinkertaistetun objektin reunat voivat näyttää varsin kulmikkailta. ("Appearance-preserving simplification", Cohen et al., 1998) 3 NORMAALITEKSTUURIN MUODOSTAMINEN Seuraavaksi selvitetään miten alkuperäisestä yksinkertaistamattomasta objektista voidaan muodostaa normaalitekstuuri. Sitten esitetään myös miten voidaan laskea mielekäs maksimikoko normaalitekstuurille. Sen jälkeen tarkastellaan kappaleen muodon yksinkertaistamisen vaikutusta tekstuurikoordinaatteihin.lopuksi tarkastellaan vielä lyhyesti normaalikartan tallettamiseen liittyviä asioita. 3.1 Normaalitekstuurin laskeminen Normaalitekstuurin laskemisessa on välttämätöntä löytää ensin 3-ulotteisen kappaleen 2-ulotteinen parametrisointi. Objektin 2-ulotteinen parametrisointi tarkoittaa että löydetään kuvaus 3-ulotteisen objektin pisteistä 2-ulotteiselle pinnalle. Parametrisoinnin muodostamista (Hoppe, 1996) ei kuitenkaan käsitellä tässä tutkielmassa tarkemmin. Jos on annettuna 3D-kappaleen kuvaava polygonijoukko M 0 ja sen 2D-parametrisointi F voidaan normaalitekstuuri muodostaa helposti. Polygonijoukon M 0 jokaisen polygonin jokaisen kärkipisteen koordinaatista V j lasketaan koordinaatti F(V j ) eli polygonin kärkipisteen tekstuurikoordinaatti. Nämä tekstuurikoordinaatit esittävät 3D-polygonin kuvaa normaalitekstuurissa. Nyt polygonin kärkipisteiden normaaleja interpoloidaan polygonin kuvan yli ja talletetaan tästä saatavat normaalit normaalitekstuuriin. 3.2 Normaalitekstuurin maksimikoko Normaalitekstuurin mielekkäänä maksimikokona voidaan pitää sellaista kokoa, jossa kaikki alkuperaisen polygonijoukon normaali-informaatio tallentuu normaalitekstuuriin. Toisin sanoen jokaisen polygonin kärkipisteen normaalivektori tulee talletettua omaan pisteeseensä normaalitekstuurissa. Tämä voidaan taata, jos normaalitekstuuriin kooksi valitaan 1/d x 1/d, missä d on pienin etäisyys kahden tekstuurikoordinaatin välillä: 5
(1) 3.3 Polygonien määrän vähentämisen vaikutus tekstuurikoordinaatteihin Kun objektin muotoa yksinkertaistetaan, luhistuu osa objektin reunoista. Tällöin kahden objektin pisteen tilalle sijotetaan yksi 3D-piste. Tämän seurauksena täytyy myös hylätä aikaisempien 3D-pisteiden tekstuurikoordinaatit. Uuden 3Dpisteen koordinaatti saadan objektin muodon yksinkeraistamiseen käytettävältä algoritmilta, sitä vastaava tekstuurikoordinaatti täytyy laskea (Kuva 4). Kuva 4: Kun objektin reuna yksinkertaistamisen seurauksena luhistuu, täytyy uudelle 3D-pisteelle löytää myös uusi tekstuurikoordinaatti. ("Appearancepreserving simplification", Cohen et al., 1998) Uuden tekstuurikoordinaatin tulee sijaita konveksin alueen sisällä kuvan 5 osoittamalla tavalla. Tämä varmistaa sen, että kolmiot reunan luhistumisen jälkeen peittävät tekstuurista täställeen saman alueen kuin ennen reunan luhistumista käytössä olleet kolmiot. Ehdokaspisteen kelpoisuus voidaan testata sarjalla pistetuloja, joiden avulla nähdään sijaitseeko ehdokaspiste konveksin alueen kaikkien kärkien sisäpuolella. Ehdokaspistettä etsitään aluksi kokeilemalla muutamia heuristisesti valittuja pisteitä, kuten luhistuneen reunan keskipistettä, sekä reunan päätepisteitä. Jos osoittautuu, että nämä heuristisesti valitut pisteet eivät kelpaa, lasketaan piste konveksin alueen sisältä kolmen alueen kulmapisteen keskiarvona. 6
Kuva 5: (a) Väärä valinta uudeksi tekstuurikoordinaatiksi aiheuttaa kolmioiden ulottumisen alkuperäisen alueen ulkopuolelle. (b) Kelvollisten tekstuurikoordinaattien tulee sijaita varjostetun konveksin alueen sisällä. ("Appearance-preserving simplification", Cohen et al., 1998) 3.4 Normaalitekstuurin tallettaminen Normaalitekstuuri talletetaan tyypillisesti RGB-kuvatiedostona. Koska normaalitekstuuri on tavallinen kuvatiedosto täytyy normeerattujen vektoreiden x-, y-, ja z-komponentit, jotka ovat liukulukuja välillä -1 1, kuvata normaalitekstuurissa kokonaisluvuilla, joiden esittämiseen käytetään vain esim. 8 bittiä per luku. Tämä aiheuttaa normaaleihin jonkin verran pyöristysvirhettä. Lopputulos on kuvan 6 kaltainen. Kuva 6: Vasemmalla alkuperäinen objekti. Oikealla objektista laskettu normaalitekstuuri. ("Object Space Normal Mapping with Skeletal Animation Tutorial", Kreuzer) 7
4 NORMAALITEKSTUURIN KÄYTTÖ VARJOSTUKSEN LASKENNASSA Normaalitekstuuria käytettäessa kappaleen valaistus lasketaan erikseen jokaiselle polygonin pisteelle. Valaistuksen intensiteetti voidaan laskea suorittamalla pistetulo normeeratun valon suuntavektorin ja pinnan normaalivektorin kesken kyseisessä pisteessä. Asiaa on selvennetty yhtälöissä (2) ja (3). Valon normeerattu suuntavektori saadaan interpoloimalla vektoreita, jotka on laskettu polygonin kärkipisteistä valon paikkaan ja sitten normeerattu. Valon suuntavektorit tarvitsee laskea vain kertaalleen, jos ne talletetaan myöhempää käyttöä varten. Pinnan normaalivektori puolestaan saadaan interpoloimalla normaalitekstuurista saatuja normaalivektoreita, jotka ovat objektin lokaalissa avaruudessa (Kuva 7). Interpolointi aiheuttaa virhettä vektoreiden pituuksiin, mutta sen vaikus lopputulokseen on yleensä niin pieni, että se voidaan jättää huomiotta. Jos kappaletta kierretään origonsa ympäri, niin ei ole järkevää laskea samaa kiertoa myös kaikille normaalivektoreille, sillä samaan lopputulokseen päästään suorittamalla käänteinen kierto valon suuntavektoreille. Lopputulos on kuvan 8 kaltainen. Pistetulo kahden vektorin välilä määritellään missä a ja b ovat vektoreita, ja cos(a,b) tarkoittaa kosinia vektoreiden välisestä kulmasta. Jos a ja b vektoreiden pituuksiksi on normeerattu 1, voidaan yhtälöä yksinkertaistaa: Nyt pistetulon arvoa voidaan käyttää kuvaamaan suoraan valaistuksen intensiteettiä. (2) (3) 8
v1 K1 n v v3 K3 V v2 K2 Kuva 7: Valon intensiteetin laskeminen normaalikartan avulla. V on valon paikka, K1, K2 ja K3 ovat polygonin kärkipisteet, v1, v2 ja v3 ovat normeerattuja valon suuntavektoreita, n on normaalikartasta interpoloimalla saatu pinnan normaalivektori ja v on interpoloitu valon suuntavektori. Huomionarvoista on, että tällöin cos( ) = n v. Kuva 8: Vasemmalla yksinkertaistettu objekti. Oikealla sama objekti varjostettuna normaalitekstuurin avulla. ("Object Space Normal Mapping with Skeletal Animation Tutorial", Kreuzer) 5 NORMAALITEKSTUURIEN KÄYTTÖ NYKYÄÄN JA TULEVAISUUDESSA Tähän asti vain harvat 3D-sovellukset ovat hyödyntäneet normaalitekstuureita. Niitä on käytetty vasta muutamissa peleissä. Normaalitekstuurien soveltamisen suhteellinen helppous ja se että uusimmista grafiikkakorteista jo löytyy tuki niiden käytölle, ennustavat kuitenkin normaalitekstuurien käytön lisääntymistä reaaliaikaisissa 3D-sovelluksissa, ennen kaikkea peleissä. Myös 9
normaalitekstuurien luominen on suhteellisen helppoa, sillä se onnistuu tavanomaisilla 3D-mallinnusohjelmilla kuten Lightwave, 3D Studio Max tai Maya. 3D-sovellusten grafiikan taso on noussut viimevuosina nopeasti. Tämän seurauksena myös objektien yksityiskohtaisuutta halutaan entisestään kasvattaa. Normaalikarttojen käyttö tarjoaa tähän mahdollisuuden, ilman että reaaliaikainen laskenta muodostuu liian raskaaksi. Mahdollisesti marraskuussa 2003 julkaitavassa id Softwaren pelissä "Doom 3" on hyödynnetty tehokkaasti normaalikarttoja. Pelin hahmojen alkuperäisissä versioissa, joista normalikartat on laskettu on jopa yli 500,000 polygonia (Kuva 9). Kuva 9: Tietokonepeli nimeltä "Doom 3" (id Sofware), jonka hahmojen yksinkertaistamisessa on käytetty normaalitekstuureita. (DOOM-3.net) Suosiota on kasvattanut myös objektien tuottaminen aidoista esineistä tai pienoismalleista kolmiulotteisella laser-skannauksella (Kuva 10). Tällaiselle tekniikalle on käyttöä viihteessä, teollisessa muotoilussa ja valmistuksessa. Tallätavoin tuotetuissa objektissa voi olla miljoonia polygoneja. Jotta tällaisia objekteja voidaan esittää reaaliaikaisesti, täytyy niitä ensin muokata. Tämä on myös luonteva normaalitekstuurien käyttökohde. Vaihtoehtoisena menetelmänä laser-skannauksella tuotettujen objektien esittämiseen on esitetty ns. "splat 10
rendering"-menetelmä (Rusinkiewicz et al., 2000), jossa polygonien sijaan käsitellään kappaleen yksittäisiä pisteitä. Tämä poikkeaa kuitenkin niin merkittävästi nykyisestä tavasta piirtää 3D-grafiikkaa tietokoneella, että menetelmän nopea yleistyminen, on epätodennäköistä. Todennäköistä kuitenkin on, että tulevaisuudessa tullaan näkemään 3D-sovelluksia, joissa normaalitekstuureita käytetään yhdessä muiden objektin pinnan ominaisuuksia määrittävien tekstuurien kanssa. Kuva 10: Michelangelon David patsasta skannataan laser-skannerilla. Tuloksena on erittäin hienojakoinen polygonipinta. ("The Digital Michelangelo Project", Levoy et al.) 11
6 YHTEENVETO Normaalitekstuurit tuotetaan tyypillisesti paljon polygoneja sisältävän objektin pohjalta. Itse normaalitekstuuri on tavallinen kuvatiedosto, jonka väriarvoihin on koodattu objektin normaalivektoreiden komponentit. Normaalitekstuurit lasketaan valmiiksi etukäteen. Koska alkuperäisen objektin pinnan muoto koodataan normaalitekstuuriin, voidaan objektin polygonien määrä vähentää jopa alle sadasosaan alkuperäisestä, ilman että objektin visuaalinen ilme olennaisesti muuttuu. Tämä keventää huomattavasti reaaliaikaista valaistuslaskentaa. Pahin ongelma normaalitekstuurien käytössä on se, että objektin reunoista voi tulla kulmikkaan näköisiä. Normaalitekstuurien tuottaminen ja käyttäminen on itsessään varsin yksinkertainen menetelmä. Siihen liittyvät kuitenkin hyvin läheisesti matemaatisesti vaativammat menetelmät: objektin 2D-parametrisoinnin määrittäminen ja objektin polygonien määrän vähentäminen. Ensimmäiset normaalitekstuureja hyödyntävät tietokonepelit ovat ilmestyneet. Uusimmat grafiikkakortit tukevat normaalitekstuurien käyttöä. Myös sovellusohjelmissa on alettu tarjoamaan tukea normaalitekstuurien käsittelyyn Normaalitekstuurien käyttö tulee todennäköisesti lisääntymään reaaliaikaisissa 3D-sovelluksissa, etenkin peleissä. 7 VIITTEET Becker B. G.; Max N. L. 1993. Smooth transitions between bump rendering algorithms. Proceedings of the 20th annual conference on Computer graphics and interactive techniques. ACM Press. pp. 183 190. Cohen J.; Olano M.; Manocha D. 1998. Appearance-preserving simplification. Proceedings of the 25th annual conference on Computer graphics and interactive techniques. ACM Press. pp. 115 122. DOOM-3.net. Viitattu: 9.4.2003. http://www.doom-3.net. Ernst I.; Rüsseler H.; Schulz H.; Wittig O. 1998. Gouraud bump mapping. Proceedings of the 1998 EUROGRAPHICS/SIGGRAPH workshop on Graphics hardware. ACM Press. pp. 47 - ff. Hoppe H. 1996. Progressive meshes. Proceedings of the 23rd annual conference on Computer graphics and interactive techniques. ACM Press. pp. 99-108. Kreuzer J. Object Space Normal Mapping with Skeletal Animation Tutorial. Viitattu: 9.4. 2003. http://www.3dkingdoms.com/web/tutorial.htm. Levoy M.; Pulli K.; Curless B.; Rusinkiewicz S.; Koller D.; Pereira L.; Ginzton M.; Anderson S.; Davis J.; Ginsberg J.; Shade J.; Fulk D. 2000. The Digital Michelangelo Project: 3D Scanning of Large Statues. Proc. SIGGRAPH 2000. ACM Press. 12
Rusinkiewicz S.; Levoy M. 2000. QSplat: A Multiresolution Point Rendering System for Large Meshes Proc. SIGGRAPH 2000. ACM Press. 13