7TEKNILLINEN KORKEAKOULU 5.5.2003 Tietoliikenneohjelmistojen ja multimedian laboratorio Tik-111.550 Tietokonegrafiikan seminaari Kevät 2003 Näkyvyystarkastelut hierarkioita käyttäen Jukka Savolainen 48033B
Näkyvyystarkastelut hierarkioita käyttäen Jukka Savolainen HUT, Tietoliikenneohjelmistojen ja multimedian laboratorio jukka.savolainen@hut.fi Abstract Tässä seminaaripaperissa kerrotaan, kuinka hierarkioita voidaan käyttää näkyvyystarkasteluissa nopeuttamaan 3D-grafiikan piirtämistä. Eri metodeja ja algoritmeja hierarkian rakentamiseksi ja hyödyntämiseksi käydään läpi ja vertaillaan niiden sopivuutta erilaisiin tilanteisiin. 3Dmallit voivat sisältää paljon tai vähän polygoneja ja ympäristö voi olla staattinen tai dynaaminen. 1 JOHDATUS Reaaliaikainen 3D-grafiikka vaatii hyvin paljon laskentatehoa. Vaikka tekniikka kehittyy nopeasti, niin silti erittäin monimutkaisia 3D-malleja ei voida renderöidä reaaliaikaisesti. Laskemalla, mitä kulloinkin näkyy ja jättämällä näkymättömät polygonit renderöimättä saadaan renderöintiä tehostettua useimmiten hyvin paljon. Hierarkioita käyttämällä voidaan leikata kerralla suuria alueita 3D-maailmasta pois, mikäli todetaan, että korkealla hierarkiassa oleva alue ei ole näkyvissä. Tällöin vältytään useiden pienien alueiden erilliseltä tarkastelulta. Laskettaessa mitä täytyy piirtää ja mitä voidaan jättää piirtämättä voidaan käyttää hyväksi erilaisia 3D-maailman ominaisuuksia. Lähekkäin olevat objektit ovat usein kaikki joko näkyvissä tai poissa näkyvistä (object-space coherence). Jos joku objekti peittää jonkun pikselin ruudulla, niin todennäköisesti sama objekti peittää myös läheisiä pikseleitä (image space coherence). Ajallisesti lähekkäin olevat animaation ruudut (frame) ovat yleensä samankaltaisia. Eli tämänhetkisessä ruudussa piilossa oleva objekti on piilossa myös seuraavassa ruudussa (temporal coherence). (Greene et al., 1993) 2 HIERARKIAT NÄKYVYYSTARKASTELUISSA Toteuttamalla 3D-maailman näkyvyystarkastelu hierarkisesti voidaan näkyvyystarkastelua tehostaa, sillä tällöin jokaisen objektin näkyvyyttä ei tarvitse erikseen tarkastella, jos todetaan, että objekti kuuluu sellaiseen hierarkian alatasoon, jonka on jo todettu olevan näkymättömissä korkeamman hierarkiatason tarkastelussa. Hierarkisen näkyvyystarkatelun 1
toteuttamiseen liittyy läheisesti monia termejä kuten tilan jakaminen (spatial subdivision) (luku 3), bounding volume hierarchies (luku 4), hierarkinen Z-puskuri (hierarchical Z- buffer) (luku 5) ja hierarchical occlusion maps (HOM) (luku 6). 3 TILAN JAKAMINEN Jakamalla 3D-maailma pienemmiksi alueiksi voidaan renderöintiä nopeuttaa, sillä tällöin ei aina tarvitse tarkastella koko 3D-maailmaa kerralla. Usein jako tehdään käyttäen jotakin hierarkista rakennetta, jolloin suuria alueita 3D-maailmasta voidaan leikata kerralla pois. Yleisimmät tavat toteuttaa jako ovat tasajako (regular grid), octree, BSPpuu (binary space partitioning) ja kd-puu. (Pantazopoulos et al., 2002) Tasajako (Kuva 1) on kaikkein yksinkertaisin tapa jakaa maailma osiin. Maailma jaetaan soluihin, jotka kaikki ovat saman kokoisia. Käytännön sovelluksissa solut ovat joko neliöitä tai kuutioita. Jokaisessa solussa on lista sen sisältämistä objekteista. Tasajako on helppo toteuttaa, mutta se ei ole kovin tehokas, sillä siinä ei oteta millään tavalla huomioon ympäristössä olevien objektien kokoa, muotoa tai sijaintia. (Pantazopoulos et al., 2002) Kuva 1: Tasajaossa jää paljon tyhjiä soluja. (Pantazopoulos et al., 2002) Octree (Kuva 2) on kehittyneempi versio tasajaosta. Koko 3D-maailman ympäröivä kuutio laitetaan puurakenteen juureen ja tämä kuutio jaetaan kahdeksaan yhtä suureen osaan akselien mukaisesti. Jokaisen uuden kuution kohdalla jakoa jatketaan hierarkisesti kunnes saavutetaan määrätty hierarkian maksimisyvyys tai kunnes kuution sisällä ei ole yhtään objektia. Jokainen puun lehti ja mahdollisesti myös solmu sisältää tiedon siihen kuuluvista objekteista. Octree on tasajakoa tehokkaampi, sillä eri alueet voivat olla eri 2
kokoisia riippuen objektien sijainnista. Alueita ei turhaan jaeta liian pieneen osiin, mikäli alueella on vain vähän tai ei ollenkaan objekteja. (Pantazopoulos et al., 2002) Kuva 2: Octreessa tyhjiä soluja on vähemmän kuin tasajaossa. (Pantazopoulos et al., 2002) Loose octree on octree, jossa samassa hierarkian tasossa olevat solut menevät osittain toistensa päälle siten, että solussa olevan objektin geometria saa mennä viereisen solun alueelle. Solun sivun pituus on kaksi kertaa suurempi kuin tavallisessa octreessa. Tämän ansiosta liikuvien objektien paikka hierarkiessa voidaan määrittää nopeammin objektin keskipisteen ja säteen avulla. Loose octreessa hierarkien syvyys on sama koko 3Dmaailman alueella. Tällöin syntyy paljon tyhjiä soluja, mutta toisaalta liikkuvien objektien uudelleen sijoittaminen hierarkiaan nopeutuu, kun soluja ei tarvitse pilkkoa tai poistaa dynaamisesti. (Ulrich, 2001) BSP-puu (Kuva 3) muodostetaan jakamalla 3D-maailma osiin tasojen avulla. Tasot voivat sijaita missä asennossa tahansa eivätkä siis ole sidottuja koordinaattiakseleihin. Tasot muodostavat solmuja puuhun ja objektit määritellään kuuluvaksi joko tason eteen tai taakse. Käymällä puuta läpi saadaan selville onko jokin objekti lähempänä katselupistettä kuin jokin toinen objekti. BSP-puun yhdeksi ongelmaksi muodostuu se, että 3D-maailmaa ei käytännössä koskaan voida jakaa tasoihin ilman, että tasot leikkaisivat objekteja. Objekteja siis joudutaan pilkkomaan, jotta voidaan määritellä kuuluuko se tason etu- vai takapuolelle. (Durand, 1999; Pantazopoulos et al., 2002) 3
Kuva 3: BSP-puu. (Pantazopoulos et al., 2002) KD-puu (Kuva 4) on BSP-puun erikoistapaus, jossa tasot valitaan siten, että ne ovat yhdensuuntaisia jonkun koordinaattiakselin kanssa. Tämän yhdensuuntaisuuden ansiosta tieto puun rakenteesta voidaan esittää pienemmällä määrällä bittejä kuin BSP-puussa. KD-puu sopii myös paremmin dynaamisille ympäristöille, sillä yksinkertaisempi rakenne on luonnollisesti helpommin päivitettävissä. (Pantazopoulos et al., 2002) Kuva 4: KD-puu. (Pantazopoulos et al., 2002) Octree-algoritmi lähtee jakamaan yhtä isoa kuutiota pienemmiksi kuutioiksi ja toimii siten parhaiten 3D-ympäristöissä, jotka ovat muodoltaan lähellä kuutiota. Tällaisia voivat olla esim. mekaanisten koneiden tai avaruussatelliittien 3D-mallit. Kaupunkien 3D-mallit ja tietokonepeleissä käytettävät 3D-ympäristöt puolestaan eivät ole lähelläkään kuutiota, sillä niissä korkeus ei ole läheskään samaa luokkaa kuin pituus ja leveys. BSP-puu ja kd-puu toimivat myös kaupunkiympäristössä, mutta etenkin BSP-puu vaatii paljon esilaskentaa ja muistia, jos kyseessä on hyvin monimutkainen malli (Zhang, 1997). 4
4 BOUNDING VOLUME HIERARCHIES 3D-maailmasta löytyvät monimutkaiset ja paljon polygoneja sisältävät objektit voidaan määritellä kuuluvaksi yksinkertaisen 3D-alueen, kuten kuution, sisälle siten, että ohjekti juuri ja juuri mahtuu alueen sisälle. Tarkastelemalla näiden 3D-alueiden näkyvyyttä saadaan näkyvyystarkastelua huomattavasti yksinkertaistettua. Nämä alueet voidaan määritellä kuuluvaksi hierarkioihin. Esimerkiksi talo sisältää useita huoneita ja jokainen huone sisältää useita huonekaluja. (Pantazopoulos et al., 2002) Objekteja ympäröivät alueet voivat olla myös muun muotoisia kuin kuutioita, kuten palloja tai monikulmioita (Kuva 5). Käyttämällä yksinkertaisia kuutioita tai palloja saadaan objektin näkyvyyttä tarkasteltua nopeammin kuin käytettäessä monimutkaisempia 3D-alueita. Tällöin kuitenkin objektia ympäröivä alue ei vastaa kovin tarkasti objektin todellista geometriaa, mikä voi johtaa piilossa olevien objektien turhaan renderöintiin. Objekteja ympäröivät laatikot ovat usein koordinaattiakselien suuntaisia, jolloin niiden määrittäminen on yksinkertaisempaa kuin käytettäessä laatikoita, joiden asento voidaan määrittää paremmin objektin ympärille sopivaksi. Näistä alueista muodostetaan hierarkia määrittelemällä lähekkäin olevat alueet kuuluvaksi samaan isompaan alueeseen. Näitä isompia alueita yhdistellään edellen vielä isommilla alueilla, kunnes hierarkian juuressa on vain yksi iso alue, joka kattaa koko 3D-maailman. (Klosowski et al., 1998) Hierarkiaa voidaan hyödyntää myös määrittelemällä objektille useita 3D-alueita, jotka ympäröivät sitä. Korkeimman tason hierarkiassa oleva 3D-alue on hyvin yksinkertainen, jolloin voidaan nopeasti todeta objektin näkymättömyys. Hierarkiassa alemmilla tasoilla olevat 3D-alueet ovat monimutkaisempia ja lähempänä objektin todellista geometriaa. Alemman tason hierarkiassa olevia 3D-alueita käytetään varmistamaan, että objekti todella on näkyvissä sen jälkeen, kun on todettu, että ylemmän tason 3D-alue on näkyvissä. (Klosowski et al., 1998) Kuva 5: Objekteja ympäröivät alueet (bounding volumes) voivat olla eri muotoisia. 5
5 HIERARKINEN Z-PUSKURI Hierarkinen Z-puskuri (hierarchical Z-buffer) (Kuva 6) käyttää hyväkseen kolmea eri 3Dgrafiikan ominaisuutta (object-space coherence, image-space coherence ja temporal coherence) nopeuttamaan piirtämistä. Normaali Z-puskuri ei hyödynnä objektien lähekkäisyyttä (object-space coherence) eikä peräkkäisten ruutujen samankaltaisuutta (temporal coherence) vaan jokainen polygoni käsitellään erikseen eikä edellisen ruudun tilannetta tallenneta muistiin. Toisaalta normaalia ray-casting metodia käytettäessä hyödynnetään objektien lähekkäisyyttä jakamalla alueet pienempiin osiin (spatial subdivision), jolloin takana olevia objekteja ei tarvitse käsitellä kunhan ensin löydetään edestä objekti, joka on näkyvissä ja peittää takana olevat objektit. Ray-casting metodi ei kuitenkaan käytä hyväkseen peräkkäisten ruutujen samankaltaisuutta. (Greene et al., 1993) Hierarkinen Z-puskuri yhdistää tavallisen Z-puskurin ja ray-tracingin hyvät ominaisuudet (object-space coherence ja image-space coherence) ja lisää siihen vielä edellisen ruudun tarkastelun nopeuttamaan näkyvien objektien löytämistä. Hierarkisessa Z-puskurissa 3Dmaailma jaetaan pienempiin alueisiin octree-algoritmia käyttäen. Image-space Z- pyramidin avulla saadaan poistettua piilossa olevia geometrioita hyvin tehokkaasti ja edellisessä ruudussa näkyvissä olevasta geometriasta lasketaan aloitusarvot algoritmille seuraavaa ruutua varten. (Greene et al., 1993) Tarkasteltaessa octree-algoritmilla kuutioihin jaettua 3D-maailmaa usein havaitaan, että vain hyvin pieni osa kuutioista on näkyvissä. Seuraavassa piirrettävässä ruudussa nämä näkyvissä olevat kuutiot ovat melkein samat kuin edellisessä ruudussa, mikäli animaatio on sulavaa. Normaaleissa sovelluksissa animaatio on muutoin sulavaa paitsi kohtauksen vaihtuessa tai kameran äkillisesti vaihtaessa paikkaa. Hierarkisessa Z-puskurissa käytetään listaa, joka huomioi tämän aikatasossa olevan samankaltaisuuden (temporal coherence list). Tässä listassa on tallennettuna ne kuutiot, jotka olivat näkyvissä edellisen ruudun kohdalla. Uuden ruudun kohdalla piirretään kaikki ne objektit, jotka ovat niiden kuutioiden sisällä, jotka olivat näkyvillä edellisessä ruudussa. Näkyvyystarkastelu tehdään muuten normaalisti, mutta jo piirretyt kuutiot merkitään renderöidyiksi. Tällä saadaan aikaiseksi selkeää nopeutumista, sillä käytäessä läpi Z-pyramidia aikaa kuluu erityisesti silloin, kun tarkastelun kohde on näkyvissä. Kohtauksen vaihtuessa piirretään hyvin paljon paljon turhaa geometriaa, mikäli suurin osa tai kaikki näkyvissä olevista kuutioista vaihtuvat. (Greene et al., 1993) Greene et al. (1993) testasivat kehittämänsä hierarkisen Z-puskurin tehokkuutta eri polygonimääriä sisältävissä 3D-ympäristöissä. Mallissa, jossa oli 15 000 polygonia 512x512 kokoisen kuvan renderöinti oli 17% hitaampaa hierarkisella Z-puskurilla kuin tavallisella Z-puskurilla. Polygonien määrän ollessa 45 000 renderöinti oli molemmilla menetelmillä yhtä nopeaa ja 105 000 polygonilla hierarkinen Z-puskuri oli 28% nopeampi. Greene et al. (1993) sanovat Z-puskurin olevan erittäin tehokas algoritmi näkyvyystarkasteluihin etenkin, kun kyseessä on monimutkainen ja paljon polygoneja sisältävä 3D-maailma. Durand (1999) toteaa kuitenkin, että hierarkista Z-puskuria ei voida toteuttaa tehokkaasti nykyisillä (vuoden 1999) laitteilla johtuen monista Z-arvon kyselyistä, joita tarvitaan mm. Z-pyramidin päivittämiseen. Durandin arvio hierarkisen Z- puskurin käytettävyydestä on todennäköisesti lähempänä totuutta kuin Greene et al.:n 6
arvio, sillä Green et al. ovat olleet itse kehittämättä hierarkista Z-puskuria eivätkä siten ole parhaita henkilöitä arvioimaan sen käyttökelpoisuutta puolueettomasti. Kuva 6: Hierarkinen Z-puskuri. (Durand., 1999) 6 HIERARCHICAL OCCLUSION MAPS Hierarchical occlusion maps (HOM) on tarkoitettu käytettäväksi näkyvyystarkasteluissa erityisesti monimutkaisten mallien kanssa, jotka sisältävät monimutkaisuutta etenkin syvyyssuunnassa. Esilaskentana HOM-algoritmi vaatii peittävien objektien (occluder database) etsimisen kaikkien objektien (model database) joukosta. HOM-algoritmin kaksi päävaihetta jokaisen ruudun piirtämisen kohdalla ovat peittävyyskarttahierarkian luominen (Kuva 7) ja näkyvän geometrian etsiminen tämän hierarkian avulla. Esilaskennassa löydettyjen peittäjien (occluders) joukosta valitaan piirrettävään ruutuun sopivat peittäjät käymällä occluder database läpi view-frustum cullingia käyttäen ja valitsemalla osa näkökentän sisällä olevista peittäjistä. Valinta tehdään käyttäen hyväksi tietoa edellisessä ruudussa käytetyistä peittäjistä. Valitut peittäjät renderöidään puskuriin valkoisina ilman valaistusta tai teksturointia. Näiden peittäjien perusteella lasketaan syvyyspuskuri (depth estimation buffer, DEB). (Zhang et al., 1997) DEB:n avulla ei saada tarkkaa syvyysarvoa jokaiselle pikselille, kuten Z-puskurissa, vaan usealle lähekkäiselle pikselille määritetään sama syvyysarvo. Tämän ansiosta muistia kuluu vähemmän ja syvyysarvojen käsittely onnistuu suhteellisen nopeasti ilman rautatukea. (Zhang et al., 1997) Lopuksi näkyvä geometria etsitään kaikkien objektien joukosta. Tavallisella view-frustum cullingilla tiputetaan pois objektit, jotka eivät ole näkökentän suunnassa. Syvyystarkastelussa selvitetään, onko objekti peittäjien takana. Peittäjäkarttahierarkia 7
käydään vielä läpi ja tarkastetaan jääkö objektin screen space -projektio kokonaan peittäjäkarttojen läpinäkymättömille alueille. (Zhang et al., 1997) Zhang et al.:n (1997) mukaan HOM:ia käyttämällä 3D-renderöinti saadaan suoritettua 2-5 kertaa nopeammin kuin normaalisti. He käyttivät testeissään kaupunkimallia, dinosauruksista ja teepannuista koostuvaa dynaamista mallia ja sukellusveneen konehuoneen mallia. Kaikissa malleissa oli erittäin paljon polygoneja (300 000 900 000). Zhang et al. (1997) vertailevat HOM-algortimia ja hierarkista Z-puskuria listaten molempien vahvuuksia ja heikkouksia toistensa suhteen. HOM-algoritmi ei vaadi Z- puskuria, mistä on apua mikäli käytetty rauta ei tue Z-puskuria. (Tosin nykyisin kaikissa järjestelmissä lienee tuki Z-puskurille.) HOM-algoritmin vaatimille operaatiolle löytyy valmis rautatuki useimmista järjestelmistä. HOM-algoritmissa ei välttämätä tarvitse käydä läpi hierarkiaa hirvittävän syvälle. Toisaalta hierarkista Z-puskuria käytettäessä näkyvyystarkastelu on siinä mielessä tehokaampaa, että piilossa olevia objekteja renderöidään vähemmän kuin HOM-algoritmia käytettäessä. Lisäksi hierarkisessa Z- puskurissa saadaan peräkkäisten ruutujen samankaltaisuutta hyödynnettyä tehokkaammin. Kuva 7: HOM:n hierarkian eri tasoja. (Zhang et al., 2002) 7 DYNAAMISET 3D-YMPÄRISTÖT Hierarkiat eivät sovi erityisen hyvin dynaamisten 3D-ympäristöjen näkyvyystarkasteluihin johtuen menetelmien monimutkaisuudesta. Kun objekti liikkuu tai muuttaa kokoaan, sen paikka hierarkiassa täytyy laskea uudelleen, mikä vie aikaa. Myös ympäristöön ilmestyvät uudet objektit ja sieltä poistuvat objektit täytyy huomioida. Tyypillisesti dynaamisessa 3D-maailmassa vain osa objekteista on dynaamisia, joten objektit voidaan jakaa staattisiin ja dynaamisiin objekteihin, jolloin kaikkien objektien liikettä ei tarvitse tarkastella. Laskemista voi vähentää myös säilyttämällä hierarkian rakenteen vakiona ja 8
ainoastaan päivittää objektien paikkaa hierarkiassa. Tällöin tietenkin hierarkiaan voi muodostua soluja, jotka ovat tyhjiä tai soluja, joissa on liikan paljon objekteja. (Batagelo et al., 2002) Jos dynaamisten objektien liike on rajoitettua, voidaan objekti määritellä kuuluvaksi tietylle alueelle ja tarkastella objektin näkyvyyttä tarkemmin vasta, kun objektin alue todetaan olevan näkyvissä. Jos objektin liikettä ei ole rajoitettu, voidaan objekti määritellä kuuluvaksi tietylle alueelle rajoitetuksi ajaksi, kun tiedetään objektin suurin mahdollinen liikkumisnopeus. Kun tämä aika kuluu umpeen, joudutaan objektin aluetta päivittämään. (Sudarsky et al., 1999) Monimutkaisia hierarkista Z-puskuria ja HOM-algoritmia paremmin dynaamisten ympäristöjen näkyvyystarkasteluihin sopivat usein loose octree, tasajako tai jokin muu menetelmä, joka ei sisällä monimutkaisia hierarkisia rakenteita. (Batagelo et al., 2002) 8 YHTEENVETO Hierarkioiden vahvuus näkyvyystarkasteluissa on se, että suuria ja paljon geometriaa sisältäviä alueita voidaan parhaassa tapauksessa leikata pois hyvin vähäisellä laskemisella. Näin usein käykin, sillä yleensä vain pieni osa koko geometriasta on kerrallaan näkyvissä ja hierarkiaa ei tarvitse käydä läpi kovin syvälle ennen kuin löytyy peitossa olevia alueita. Hierarkiat vaativat kuitenkin paljon esilaskentaa ja muistia tietorakenteille. Tämän seurauksena yksinkertaisten mallien renderöinnissä hierarkiat voivat aiheuttaa turhaa laskemista. Suurten tietorakenteiden päivittäminen on luonnollisesti hidasta, mikä vaikeuttaa dynaamisten ympäristöjen mallintamista käyttäen hierarkisia näkyvyystarkasteluja. VIITTEET Batagelo, H.; Shin-Ting, W. 2002. Dynamic Scene Occlusion Culling using a Regular Grid. Sibgrapi 2002 conference proceedings. pp. 43-50. Durand, F. 1999. 3D Visibility: Analytical Study and Applications. 305 p. Greene, N.; Kass, M.; Miller, G. 1993. Hierarchical Z-Buffer Visibility. Proceedings of the 20 th annual conference on Computer graphics and interactive techniques. New York, NY, USA. ACM Press. pp. 231-238. Klosowski, J.; Held, M.; Mitchell, J.; Sowizral, H.; Zikan, K. 1998. Efficient Collision Detection Using Bounding Volume Hierarchies of k-dops. IEEE Transactions on Visualization and Computer Graphics. Vol. 4. Issue 1. pp. 21-36. Pantazopoulos, I.; Tzafestas, S. 2002. Occlusion Culling Algorithms: A Comprehensive Survey. Journal of Intelligent and Robotic Systems. Vol. 36. Issue 2. pp. 123-156. Sudarsky, O.; Gotsman, C. 1999. Dynamic Scene Occlusion Culling. IEEE Transactions on Visualization & Computer Graphics. Vol. 5. Issue 1. pp. 217-223. Ulrich. T. (artikkelin kirjoittaja); Deloura, M. (kirjan kirjoittaja) 2001. Game Programming Gems. Charles River Media. 550 p. Zhang, H.; Manocha, D.; Hudson, T.; Hoff, K.E. 1997. Visibility Culling using Hierarchical Occlusion Maps. Proceedings of the 24 th annual conference on 9
Computer graphics and interactive techniques. New York, NY, USA. ACM Press/Addison-Wesley Publishing Co. pp. 77-88. 10