HELSINKI UNIVERSITY OF TECHNOLOGY 12.5.2003 Telecommunications Software and Multimedia Laboratory Tik-111.500 Tietokonegrafiikan seminaari Kevät 2003 Cloud rendering Juho Karppinen 49480E
Cloud rendering Juho Karppinen Juho.Karppinen@hut.fi Tiivistelmä Tämä artikkeli käsittelee reaaliaikaisten ja realistisien kolmiulotteisten pilvien renderöintiä ja mallintamista. 3D-pilvien esittäminen tietokoneella on nykypäivänä vielä vaativaa. Aiheesta on olemassa paljon eri mallinnus sekä renderöintimenetelmiä, mutta realistiset toteutukset ovat silti harvassa. Tämä johtuu luonnonilmiöiden monimutkaisuudesta, jotka ovat laskennallisesti nykyajan tietokoneiden ulottumattomissa. Tässä artikkelissa esitellään eri näkökulmia ja tekniikoita näiden ongelmien ratkaisemiseen. 1 ESITTELY Kuten muidenkin luonnonilmiöiden, myös pilvien esittäminen tietokoneella on vaativaa ja laskennallisesti raskasta. Pilvet koostuvat vaihtelevan tiheyksisestä vesihöyrystä, mikä läpäisee, heijastaa ja taittaa valoa monesta eri suunnasta. Pilvien olomuotoon vaikuttavat lisäksi suunnattomat määrät erilaisia muuttuvia tekijöitä, kuten tuuli ja sen aiheuttamat pyörteet. Lopputuloksena on kaaoksenomaisesti eläviä pilvilauttoja, jotka kuitenkin noudattavat monimutkaisia fysiikan lakeja liikkeissään. Pilvien esittäminen realistisesti onkin vaativaa jopa ei-reaaliaikaisesti ja nykyajan 3Dlaitteistoilla täysin reaaliaikaisesti mahdotonta. Kuitenkin peleissä, varsinkin lentosimulaattoreissa, halutaan pilviä taivaalle. Nämä onkin toteutettu erilaisilla huijaustekniikoilla, jotka eivät ole toteutettu oikeiden fysiikan lakien mukaan vaan suunniteltu vain näyttämään hyvältä. Suurin osa peleistä käyttävät joko pelkkiä staattisia tai animoituja tekstuureja äärettömän kaukana olevalla pinnalla. Nämä luovat usein riittävän illuusion taivaasta olevista pilvistä peleihin, joissa pilvet eivät ole oleellisia pelin kannalta. Tämä tekniikka onkin täysin käyttökelvoton esimerkiksi lentosimulaattoreihin, joissa halutaan liikkua kolmiulotteisesti taivaalla sekä pilvien välissä että niiden yläpuolella. Tätä varten on olemassa algoritmejä, joilla pilvien esittäminen on mahdollista täysin reaaliaikaisesti kolmiulotteisessa maailmassa. Nämä perustuvat vielä laskentatehon puutteen takia staattisiin, etukäteen laskettaviin pilvin. Pilvet mallinnetaan etukäteen, ja lasketaan valojen heijastumat usein jopa monesta eri suunnasta, jonka jälkeen lopputulos renderöidään ruudulle katsojan sijainnin mukaan. Vauhdikkaaseen lopputulokseen vaaditaan vielä suuria yksinkertaistamisia kuten kaukaisten pilvien 1
esittäminen kaksiulotteisina projektiona, jotta nykyajan näytönohjaimet pystyvät näyttämään tarpeeksi laajoja pilvilauttoja. Tämä paperi on jaettu kolmeen osioon. Ensimmäisessä osassa kerrotaan yleistä pilvien esittämisestä tietokonegraafiikalla. Tämän jälkeen esitellään pilvien mallintamisen eri tekniikoita ja viimeisessä osiossa käsitellään tarkemmin paria valmista toteutusta ja esitellään miten ne toimivat pintaa syvemmältä. 2 YLEISTÄ PILVISTÄ Pilvien esittäminen tietokoneella voidaan jakaa kahteen toisistaan melko riippumattomaan aihepiiriin, mallintamiseen sekä renderöintiin. Mallintamisessa luodaan ja organisoidaan dataa, jolla pilvien muodot ja liikkeet voidaan esittää tietokoneella. Renderöinnissä puolestaan tämä data visualisoidaan ja piirretään, jolloin lopputuloksena pitäisi olla aidolta näyttäviä pilviä tietokoneen monitorilla. 2.1 Mallintaminen Mallintaminen voidaan jakaa edelleen kolmeen eri lähtökohtaan, fysikaaliseen, heuristiseen ja kuvapohjaiseen mallintamiseen. Fysikaalisessa lähtökohdassa yritetään mallintaa pilviä samoilla perusteilla kuin ne luonnossa esiintyvät. Pilvien muoto riippuu monesta eri tekijästä kuten lämpötilasta, erilaisista ilmavirtauksista ja kosteudesta. Näiden eri tekijöiden mallintamisessa käytetään usein nesteiden dynamiikkaa. Myös pelkällä valon sironnalla voidaan mallintaa pilvien ulkonäköä. Heuristisessa mallintamisessa käytetään usein fraktaaleja, kohinaa tai satunnaisuuksia. Nämä ovat laskennallisesti paljon kevyempiä ja yksinkertaisempia kuin fysikaalisesti oikeat tavat. Menetelmät sisältävät kuitenkin paljon erilaisia säädettäviä parametrejä ja paras lopputulos löytyy usein vain kokeilemalla eri vaihtoehtoja yrityksen ja erehdyksen menetelmällä. Kuvapohjainen mallintaminen perustuu usein satelliittikuviin erilaisista pilvistä. Lopputuloksena on hyvin realistisen näköisiä pilviä, mutta ne rajoittuvat vain tietyn tyylisiin pilviin. 2.2 Renderöinti Kolmiulotteisten pilvien renderöinti on laskennallisesti erittäin vaativaa, melkein jopa mahdotonta. Normaalien 3D-mallien avulla on kyllä mahdollista tuottaa pilviä, mutta polygonimäärät nousevat nopeasti satoihin tuhansiin. Nykyiset näytönohjainsukupolvet eivät vielä kykene selviytymään näistä polygonimääristä vaadittavalla nopeudella. Tämän takia kaikki reaaliaikaiset tekniikat lähtevät liikkeelle katsojan huijaamisesta. Useimmat huijausalgoritmit perustuvat kolmiulotteisten mallien muuttamiseen kaksiulotteisiksi, usein tekstuureiksi. Näin piirrettävien polygonien lukumäärä tippuu murto-osaan, jolloin pilvien lukumäärää voidaan kasvattaa. Koska maailma on edelleen kolmiulotteinen, joudutaan kaksiulotteisten pilvien takia 2
ongelmiin lähellä olevien pilvien kanssa. Myös pilvien sisällä olevat esineet ja pilvien läpi kulkeminen saattavat joillakin toteutuksilla muodostua ylitsepääsemättömiksi ongelmiksi. Nämä kaikki rajoitukset ovat kuitenkin kierrettävissä. Aidot 3D-pilvet perustuvat usein partikkeleihin tai voxeleihin, harvemmin käytetään varsinaisia 3D-malleja. Partikkeli (particle) tarkoittaa kaksiulotteista hiukkasta, jolla on yksilöllisiä ominaisuuksia kuten nopeus ja sijainti. Vokseli (voxel) puolestaan tarkoittaa kolmiulotteista pikseliä, joka voidaan mieltää pieneksi kuutioksi. Renderöintiin on olemassa monia eri tekniikoita. Valitettavasti vain harvat niistä soveltuvat reaaliaikaisiin sovelluksiin. Esimerkiksi ray-tracing tekniikalla saadaan loistavia lopputuloksia, mutta jokaisen kuvan laskemiseen menee minuutteja. Myös suurin osa muista numeerisista mallinnustavoista vaativat useita kymmeniä sekunteja yhden kuvan piirtämiseen. 3 MALLINNUSTEKNIIKOITA Tässä kappeleessa käsitellään muutamaa mallinnustekniikkaa tarkemmin. Tekniikoita on useampiakin, mutta tässä keskitytään vain malleihin joista löytyy reaaliaikaisia implementaatioita. Tämän takia ei mukana ole kovinkaan tarkkoja fysikaalisia mallinnustapoja. 3.1 Perlin noise Kohina, varsinkin Perlin-kohina [Perlin] soveltuu varsin hyvin luonnonilmiöiden mallintamiseen yhdistelemällä eri aallonpituuksisia ja -taajuuksisia aaltoja [Kuva 1]. Lopputuloksena saadaan säännöllisiä näköisiä kuvioita aina savusta marmoriin ja puun syihin. Kuva 1: Aallonpituuksien yhdistäminen perlin-kohinalla [Pallister, 2000]. Tätä kohinaa voidaan käyttää hyödyksi pilvien animointiin käyttäen tekstuurikarttoja [Pallister, 2000]. Toteutuksessa käytetään pitkiä aallonpituuksia kuvaamaan isoja pilvilauttoja ja lyhyempiä aallonpituuksia yksittäisiin pilvihaituviin. Nämä eri kohinakartat yhdistellään reaaliaikaisesti yhdeksi tekstuuriksi käyttäen eri 3
päivitysnopeuksia. Pisimpiä aallonpituuksia muutetaan vain noin viiden sekunnin välein, mutta mitä lyhyempi aallonpituus, sitä useammin sitä päivitetään. Lopputuloksessa isot pilvilautat muuttuvat hitaammin, aivan kuten oikeastikin, mutta pienet pyörteet elävät kiivaammin. Erilaisia kohinakarttoja voi olla esimerkiksi neljä kappaletta ja hyvänä lähtökohtana on taajuuksien kaksinkertaistaminen seuraavaan karttaan. Nämä kaksiulotteiset kohinakartat luodaan yksitellen ja niille suoritetaan hieman esikäsittelyä ennen niiden yhdistämistä keskenään. Näin lopputulos on muutakin kuin pelkkää kohinaa. Tämä tarkoittaa ensiksi yksittäisten pikselien erojen pehmennystä (bilinear filtering) ja karttojen skaalaamista ylöspäin samankokoisiksi. Tämän jälkeen kartat interpoloidaan edellisen päivityskerran kohinakarttaan, jotta pilvien liikkeet pysyvät jatkuvana ilman hyppäyksiä. Vasta tämän jälkeen kartat yhdistellään käyttäen eri painoarvoja. Hitaimman aallonpituuden painoarvo voi olla esimerkiksi puolet lopputuloksen arvosta, seuraavalla neljännes ja aina puolittaen intensiteetin mitä pienemmäksi kohina tulee. Näin lopputuloksessa isot pilvilautat ovat tiheämpiä kuin pienemmät haituvat. Yhdistämisien välitulokset moduloidaan jotta kokonaisintensiteetti pysyisi keskiarvoisena. Nyt lopputulos on vieläkin pelkkää kohinaa. Pilvien muodot saadaan esiin yksinkertaisella vähennyslaskulla, jolla pienet intensiteetit poistetaan kuvasta [Kuva 2]. Parempaan lopputulokseen päästäisiin käyttämällä eksponentiaalista funktiota, mutta vähennyslasku on helpompi toteuttaa ja tuottaa silti hyvän lopputuloksen. Kuva 2: Pilvien erotteleminen kohinakartasta [Pallister, 2000]. Tällä tekniikalla saadaan mallinnettua pilviä ja niiden turbulensseja. Prosessin eri parametrejä voidaan säätää reaaliaikaisesti ja saavuttaa eri muotoisia ja tiheyksisiä pilviä. Perusimplementaatio ei mallinna pilven paksuutta, jolloin valon taittumista eri kohdista pilveä ei myöskään voida mallintaa. Tekstuurit ovat myös kaksiulotteisia, joten tällä tekniikalla saavutetaan illuusio pilvistä vain kaukaa katsoessa. Kolmiulotteisten pilvien mallintaminen jää siis muille tekniikoille. 3.2 Valon sironta Valon sironta (light scattering) on valon ominaisuuksiin perustuva tekniikka. Sillä saadaan erittäin aidon näköisiä pilviä, kuitenkin huomattavasti pienemmällä laskentateholla kuin muilla tarkemmin fysiikan lakeja noudattavilla malleilla. 4
On olemassa sekä yksin- että moninkertaista sirontaa. Yksinkertainen sironta tarkoittaa valon taittumista vain yhden pisteen kautta [Kuva 3]. Tämä vastaa luonnossa erittäin ohuen tai läpinäkyvän pinnan kautta tapahtuvaa valon hajontaa. Puhdas ja kuiva ilma voidaan approksimoida käyttäen yksinkertaista sirontaa, mutta pilviä ei voi, koska lopputuloksesta tulisi lattea ja tumma. Kuva 3: Yksinkertainen sironta [Harris, 2001]. Moninkertainen sironta tarkoittaa puolestaan valon taittumista monen pisteen kautta [Kuva 4] jolloin se soveltuu paksumpien materiaalien mallintamiseen. Pilvet ovat yksi esimerkki tälläisestä materiaalista. Suurin osa pilvistä ulos tulevasta valosta on moneen kertaan taittunutta, jolloin pilven partikkeleihin on kerääntynyt valon intensiteettiä monesta eri suunnasta. Lopputuloksena pilvet ovatkin kirkkaampia kuin taivas keskimäärin. Lopputuloksesta tuleekin paljon parempi kuin yksinkertaisella sironnalla. Kuva 4: Moninkertainen sironta [Harris, 2001]. Sironnan mallinnus voidaan suorittaa käyttäen apuna esimerkiksi partikkeleja. Jokaisella partikkelilla on yksilöllisinä ominaisuuksina sijainti, säde, tiheys ja väri. Itse pilvet saadaan muodostettua täyttämällä jokin tila satunnaisesti sijoitetuilla partikkeleilla. Pelit voivat käyttää myös satunnaisuuden lisäksi ennalta määritettyjä parametrejä, jolloin pelin tekijät voivat luoda haluamansa ulkonäön etukäteen. Partikkelit soveltuvat hyvin mallinnuksen apuvälineeksi, koska ne voidaan renderöidä lähes suoraan näytönohjaimelle [4.2] tai käyttäen hienostuneempia menetelmiä [4.3]. Itse mallintaminen ei ole fysikaalisesti ajatellen helppoa. Kaikille pisteille tarvitsisi laskea kaikista mahdollisista suunnista tulevat monen eri asteen sironnat. Onneksi ensimmäisen ja toisen asteen sironnat vaikuttavat eniten lopputulokseen, joten loput voidaan jättää laskuista pois. Mallia voidaan yksinkertaistaa vielä lisää laskemalla monen asteen sironnat vain valonlähteestä päin, ja yksinkertaiset sironnat katsojan suunnasta [Harris, 2001]. 5
Mallinnus alkaa esilaskemalla jokaiselle partikkelille saapuvan ja lähtevän valon intensiteetit. Saapuva valo on valonlähteestä edellisten partikkelien läpi jäljelle jääneiden ja muista partikkeleista kyseiseen partikkeliin heijastuneiden valon intensiteettien summa. Erinäisten yksinkertaistuksien jälkeen saadaan rekursiivinen yhtälö intensiteeteille n heijastumisen jälkeen. Tässä nollas aste on pilven ulkoreunalta tulevan auringonvalon intensiteetti, josta seuraavan partikkelin intensiteettiin on aina lisätty edellisen partikkelin intensiteetin ja läpinäkyvyyden tulo. Tämä esilaskettu rekursio lasketaan vain kertaalleen käyttäen apuna 3D-laitteiston näyttöpuskuria (framebuffer), joka aluksi tyhjennetään ja partikkelit järjestetään niiden etäisyyden perusteella valonlähteestä katsoen. Tämän jälkeen rekursiota aletaan käydä läpi tallentaen partikkeleiden läpäisemien valosäteiden väliarvoja puskuriin. Seuraavalla rekursion kierroksella arvo luetaan näyttöpuskurista, lisätään uudet sironnat ja ylikirjoitetaan pikselin arvot takaisin puskuriin. Ajon aikana käytetään melkein samaa algoritmia mutta partikkelit järjestetään katsojan paikan mukaan ja käytetään esilaskettujen partikkelien intensiteettejä laskettaessa yksinkertaisten siroutumien arvoja katsojaa kohti. Laskuissa käytettävällä vaihefunktiolla (phase funktion) on suuri merkitys lopputulokseen. Tämä tarkoittaa sisään- ja ulostulevan valon välistä kulmaeroa. Ohuessa ilmamassassa voidaan käyttää yksinkertaista Rayleigh -hajontaa, mutta parempaan lopputulokseen päästään käyttämällä epäsymmetristä hajontaa (anisotropic scattering), jolloin katsoessa pilviä aurinkoa vasten tulevat pilville ominaiset hopeareunat näkyviin. Näiden esilaskettujen ja ajonaikaisien arvojen perusteella määräytyy partikkelin lopullinen väri. Tämän jälkeen partikkelit voidaan renderöidä ruudulle käyttäen useita erilaisia vaihtoehtoja. Seuraavassa luvussa on esitelty kaksi eri implementaatiota. Mallinnuksessa voidaan ottaa myös huomioon auringonlaskun aiheuttama pilvien värjäytyminen. Jokaiselle partikkelille lasketaan esilaskut käyttäen esimerkiksi kahta eriväristä ja eri paikoissa olevaa valolähdettä. Ajon aikana lasketaan myös kaikkien valolähteiden heijastumiset erikseen. Näin auringonlaskun valo on suunnattua ja pilvet jättävät toisiinsa varjoja. Vaikka tämä toteututus ei olekaan fysikaalisesti täysin oikein suoritettu, on lopputulos paljon parempi kuin pelkällä ympäristön valolla laskettuna. Oikeassa auringonlaskussa pilvet eivät värjäydy juuri lainkaan suoraan auringosta tulevasta vaan heijastuneesta valosta. Algoritmi vaatii vain vähän laskentatehoa verrattuna muihin fysikaalisesti tarkempiin algoritmeihin. Lopputulos on silti erittäin realistisen näköinen. Pilvien sijainnit ja auringon paikka sen sijaan on kiinteitä eikä niitä voi muutaa esilaskujen jälkeen. Tekijät ovatkin lupailleet uutta algoritmia jonka pitäisi mahdollistaa reaaliaikaiseesti animoidut pilvet. 4 IMPLEMENTAATIOTA Tässä kappaleessa esitellään muutamissa implementaatioissa käytettyjä renderöintitekniikoita. Näiden implementatioiden käyttämät mallinnustekniikat on jo 6
esitelty luvussa 3. 4.1 2D-Pilvikerros Yleisin ja helpoin tapa renderöidä taivas on piirtää tekstuurikartta suoraan taivaalla olevalle pinnalle [Hugo]. Pinta voi olla pelkkä suora taso tai realistisemmin pallo, jolloin taivas myös näyttää pyöreältä [Kuva 5]. Tekstuuria juoksutetaan pinnalla, jolloin pilvet näyttävät liikkuvan tuulen mukana. Lopputulos näyttää kaukaa katsoen aidolta, riippuen pilvien mallinnuksesta [3.1]. Pinnalla voidaan suoraan käyttää myös sateliittikuvista peräisin olevia pilvilauttoja. Kuva 5: Tekstuurin sijoittaminen pallolle [Hugo]. Haittapuolena tässä tekniikassa on rajoittuminen maan pinnalle tai alailmakerroksiin. Pilvien yläpuolelle ei voi mennä, koska pilvet näyttävät läheltä katsottaessa kaksiulotteisilta ja illuusio aidoista pilvistä häipyy. Tätä rajoitusta voidaan hiukan lieventää pinoamalla useampia kerroksia päällekkäin eri korkeuksille maanpinnasta. Näitä kerroksia voidaan vielä liikuttaa eri nopeudella, jolloin lopputulos näyttää huomattavasti aidommalta. Hienosäätöä voidaan tehdä edelleen käyttämällä läpinäkyvyyttä ja tekstuurien yhdistämistä (blending). Lopputuloksen näyttävyydelle voidaan tehdä paljon myös pienillä lisillä. Taivaalle voidaan lisätä auringosta johtuvia linssin heijastumia, sekä tietenkin myös itse aurinko. Kupoliin voidaan lisätä tasaisesti muuttuva väri, jolloin auringonlaskun punottava taivaanrantakin saadaan mukaan horisonttiin. Pilvitekstuureista on hyötyä myös muualla kuin taivaalla. Samoja tekstuureja voidaan käyttää melkein suoraan pilvien varjojen esittämiseen maan pinnalla. Käyttämällä monenpyyhinnän tekstuureja ei varjojen lisääminen hidasta kuvanpäivitystä nykyajan tietokoneilla juuri lainkaan. 7
4.2 3D -pilvet Tekstuureilla tuotettu pinta ei mahdollista täysin kolmiulotteisia pilviä, joita tarvitaan lentosimulaattoreissa. Normaaleilla 3D-objekteilla tämä kyllä onnistuu, mutta varsin hitaasti. Ongelmaksi tulee polygonien suuri määrä, mikä jo pienilläkin pilvimäärillä nousee helposti satoihin tuhansiin. Tällöin ei uusillakaan näytönohjaimilla päästä edes siedettäviin nopeuslukemiin. Pienimuotoisten kolmiulotteisten pilvien renderöinnissä voidaan käyttää suoraan samoja partikkeleja, joita käytetään myös pilvien mallinnuksessa [3.2]. Partikkelien renderöinti on kaksivaiheinen. Ensimmäinen pyyhkäisy tehdään vain kerran, jolloin lasketaan auringon aiheuttamat heijastumat partikkelien välillä. Ajon aikana lasketaan jokaisella renderöintikerralla katsojaan suoraan kohdistuvan valon määrä. Nämä arvot yhdistetään toisiinsa, jolloin lopputuloksena on partikkelin väri. Aina, kun katsoja liikkuu, joudutaan kaikkien pilvien arvot laskemaan uudestaan. Koska näissä laskuissa käytetään yksinkertaista sirontaa, ei operaatio ole laskennallisesti vaativaa. Laskutoimitus on suoraan verrannollinen partikkelien lukumäärään. Mallintamisen lisäksi partikkelit joudutaan vielä uudelleenpiirtämään jokaiselle ruudunpäivitykselle. Isoilla pilvimäärillä nämä muodostuvat selvästi ongelmiksi, joten tekniikka ei sovellu suurille maailmoille. 4.3 Impostorit Koska 3D-pilvien renderöiminen on hidasta, joudutaan ratkaisua hakemaan hienostuneemmilla menetelmillä. Eräs tekniikka polygonimäärien pienentämiseen on impostorit (impostor). Tämä tarkoittaa 3D-objektien esittämistä teksturoituina polygoneina. Kolmiulotteinen esine projisoidaan kaksiulotteiseksi ja sijoitetaan 3Dmaailmassa oikeaan paikkaan katsojaa kohtisuorassa olevalle läpinäkyvälle tekstuuripinnalle [Kuva 6]. Huonona puolena tällä tekniikalla on lähellä olevien esineiden huonontunut resoluutio, jolloin joudutaan palaamaan normaaliin 3D-malliin. Pilvissä ei sen sijaan ole teräviä reunoja, joissa heikompilaatuiset tekstuurit erottuisivat häiritsevästi. Tekniikkaa voidaankin käyttää myös lähellä oleviin pilviin. 8
Kuva 6: Impostorit, kuvassa ympäröitynä neliöillä [Harris, 2001]. Tekniikan toimivuus on esitetty Mark Harrisin [Harris, 2001] implementaatiossa, jossa satojen tuhansien partikkeleiden maailma päivittyy satoja kertoja sekunnissa vanhemmillakin GeForce-näytönohjaimilla. Raskaimpana testinä 34 isoa pilveä (yhteensä yli 3 miljoonaa partikkelia) lisättynä 60 000 polygonin maailmaan pyörivät 2 GHz Pentium 4-prosessorilla ja GeForce 3-näytönohjaimella 30 kertaa sekunnissa 1600x1200 tarkkuudella. Nopeus on siis riittävä pelien taustalle, jossa pilvet eivät saa hidastaa muuta grafiikkaa liikaa. Implementaatiossa impostorit lasketaan käyttäen apuna samoja partikkeleita kuin edellisen kappaleen 3D-pilvissä. Pilvien partikkelit renderöidään yksi kerrallaan tekstuureihin käyttäen splatting-tekniikkaa [Westover, 1990]. Nämä valmiit pilvitekstuurit piirretään oikeassa paikassa olevalle polygonin pinnalle. Lopputulos näyttää aivan normaalilta 3D-mallilta, varsinkin kauempaa katsottuna. Impostoreita ei tarvitse laskea uudestaan jokaiselle ruudunpäivitykselle. Sen sijaan käytetään virhemittareita ja päivitys tehdään dynaamisesti vain pilville, jotka ovat likkuneet liikaa joko sivu- tai etäisyyssuunnassa. Näin yhden objektin renderöiminen hyödyttää useamman ruudun ajan. Sopiva toleranssi on suunnilleen välillä 0.15-1, jolloin hyötysuhde kasvaa, mutta häiritsevää tekstuurien liian isoa hyppimistä ei huomaa. Impostorit toimivat hyvin vaikka kamera olisikin pilven sisällä. Tällöin impostorit luodaan hiukan eri tavalla kuin kaukana oleville pilville. Valmista tekstuuria ei myöskään sijoiteta 3D-maailmaan, vaan se piirretään suoraan näyttöön kiinni (screenspace). Tällöin tekstuuri toimii katsojan edessä eräänlaisena sumuverhona. Myös 9
tekstuurin resoluutiota voidaan huoletta pudottaa, koska pilven sisällä on sumuista eikä tarkkoja yksityiskohtia tarvitse näkyä. Kamera ei siis ikinä saavuta tekstuuria, vaan paikallaan olevaa tekstuuria päivitetään luoden illuusion kameran liikkeestä pilven sisällä. Myös pilvien sisällä olevat esineet saadaan impostoreilla hyvin hoidettua, vaikka impostorit ovatkin kaksiulotteisia ja kolmiulotteinen objekti saattaa leikkautua niin, että puolet siitä on sumun sisällä ja puolet sumun edessä. Tämän estämiseksi tutkitaan, onko pilvien sisällä joitain esineitä ja jaetaan pilvi useampaan eri kerrokseen siten, että objekti jää kahden tason väliin. Tällöin ei ongelmia esiinny ja esine näyttää olevan oikeasti osittain pilven sisällä [Kuva 7]. Kuva 7: Lentokone osittain pilven sisällä [Harris, 2001]. VIITTEET Virtual Terrain Project, hyvä referenssisivusto virtuaalisiin maailmoihin. http://vterrain.org/atmosphere/clouds/index.html Dobashi Y.; Miyazaki, R.; Yoshida, S.; Nishita, T. 2001. A Method for Modeling Clouds based on Atmospheric Fluid Dynamics. http://nis-lab.is.s.u-tokyo.ac.jp/~nis/abs_cgi.html#pg01 Dobashi, Y.; Kaneda, K.; Yamashita, H.; Okita, T. Nishita, T. Siggraph 2000. A Simple, Efficient Method for Realistic Animation of Clouds. http://nis-lab.is.s.u-tokyo.ac.jp/~nis/abs_sig.html Harris, M. and Lastra, A. 2001. Real-Time Cloud Rendering. Computer Graphics Forum (Eurographics 2001 Proceedings), 20(3):76-84 http://www.cs.unc.edu/~harrism/clouds/rtcrpubs.html Hugo, E. Cloud cover tutorial. http://freespace.virgin.net/hugo.elias/models/m_clouds.htm Pallister, K. 2000. Generating Procedural Clouds in Real Time on 3D Hardware. http://cedar.intel.com/software/idap/media/pdf/games/procedural_clouds.pdf Perlin, K. Noise Machine website. http://www.noisemachine.com Westover, L. 1990. Footprint evaluation for volume rendering. Siggraph 1990, sivut 367-376. 10