Dynamic Occlusion Culling

Samankaltaiset tiedostot
Luento 6: Piilopinnat ja Näkyvyys

Tilanhallintatekniikat

Luku 6: Grafiikka. 2D-grafiikka 3D-liukuhihna Epäsuora valaistus Laskostuminen Mobiililaitteet Sisätilat Ulkotilat

Satunnaisalgoritmit. Topi Paavilainen. Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

2.2. Kohteiden konstruktiivinen avaruusgeometrinen esitys

Luento 10: Näkyvyystarkastelut ja varjot. Sisältö

Luento 4: Näkyvyystarkastelut ja varjot

Näkyvyystarkastelut hierarkioita käyttäen

Department of Mathematics, Hypermedia Laboratory Tampere University of Technology. Roolit Verkostoissa: HITS. Idea.

T Vuorovaikutteinen tietokonegrafiikka Tentti

Yleisen PSCR-menetelmän toteutus ohjelmoitavalla näytönoh

CUDA. Moniydinohjelmointi Mikko Honkonen

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

Matematiikan tukikurssi

TEEMU ROOS (KALVOT MUOKATTU PATRIK HOYERIN LUENTOMATERIAALISTA)

Luento 3: 3D katselu. Sisältö

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014

Algoritmit 2. Luento 6 To Timo Männikkö

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Rubikin kuutio ja ryhmät. Johanna Rämö Helsingin yliopisto, Matematiikan ja tilastotieteen laitos

Algoritmit 1. Luento 3 Ti Timo Männikkö


Määrittelydokumentti

etunimi, sukunimi ja opiskelijanumero ja näillä

HELSINKI UNIVERSITY OF TECHNOLOGY Telecommunications Software and Multimedia Laboratory Tik Tietokonegrafiikan seminaari Kevät 2003

Sanaluokkajäsennystä rinnakkaisilla transduktoreilla

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

811120P Diskreetit rakenteet

Integrointialgoritmit molekyylidynamiikassa

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Johdantoa INTEGRAALILASKENTA, MAA9

Matematiikan tukikurssi, kurssikerta 3

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

811120P Diskreetit rakenteet

Puhesynteesin perusteet Luento 5: unit selection -synteesi

Algoritmit 1. Luento 7 Ti Timo Männikkö

75059 Suuri lajittelusarja

Avainsanat: peli, matematiikka, polynomi, yhteen- ja vähennyslasku, kertolasku

Matematiikan tukikurssi

Action Request System

Lineaarialgebra ja matriisilaskenta I, HY Kurssikoe Ratkaisuehdotus. 1. (35 pistettä)

Kenguru Benjamin (6. ja 7. luokka) ratkaisut sivu 1 / 6

1. Otetaan perusjoukoksi X := {0, 1, 2, 3, 4, 5, 6, 7}. Piirrä seuraaville kolmelle joukolle Venn-diagrammi ja asettele alkiot siihen.

Vektoreita GeoGebrassa.

811312A Tietorakenteet ja algoritmit I Johdanto

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

Osakesalkun optimointi. Anni Halkola Turun yliopisto 2016

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

kartiopinta kartio. kartion pohja, suora ympyräkartio vino pyramidiksi

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

Tietorakenteet ja algoritmit

Konsepti EU-lain mukaisten dronelupien myöntämiseen (SORA-menetelmä) Vastuullinen liikenne. Rohkeasti yhdessä.

Cover letter and responses to reviewers

NÄKYMÄNHALLINTATEKNIIKAT 3D- GRAFIIKKAMOOTTOREISSA

1 Reaaliset lukujonot

Algoritmit 1. Luento 4 Ke Timo Männikkö

CEM DT-3353 Pihtimittari

Potentially Visible Set (PVS)

S09 04 Kohteiden tunnistaminen 3D datasta

Smart Board lukion lyhyen matematiikan opetuksessa

4.1 Kaksi pistettä määrää suoran

Tuloperiaate. Oletetaan, että eräs valintaprosessi voidaan jakaa peräkkäisiin vaiheisiin, joita on k kappaletta

EKOLOGISUUS. Ovatko lukiolaiset ekologisia?

Windows Phone 7.5 erilainen ja fiksu älypuhelin. Vesa-Matti Paananen Liiketoimintajohtaja, Windows Phone Microsoft Oy

Ohjelmointi 1 C#, kevät 2013, 2. tentti

Probabilistiset mallit (osa 1) Matemaattisen mallinnuksen kurssi Kevät 2002, luento 10, osa 1 Jorma Merikoski Tampereen yliopisto

Vasteaika. Vasteaikaa koskeva ohje ei ole juuri muuttunut Robert B. Millerin vuonna 1968 pitämästä esityksestä:

Algoritmit 2. Luento 6 Ke Timo Männikkö

Kenguru Student (lukion 2. ja 3. vuosi) sivu 1 / 6

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Paretoratkaisujen visualisointi. Optimointiopin seminaari / Kevät 2000 Esitelmä 11 Petteri Kekäläinen 45305L

Rakenteiset tietotyypit Moniulotteiset taulukot

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Apuja ohjelmointiin» Yleisiä virheitä

T Luonnollisten kielten tilastollinen käsittely

MAB3 - Harjoitustehtävien ratkaisut:

Kenguru Benjamin (6. ja 7. luokka) sivu 1 / 5

Joonas Haapala Ohjaaja: DI Heikki Puustinen Valvoja: Prof. Kai Virtanen

Tietorakenteet ja algoritmit - syksy

58131 Tietorakenteet (kevät 2009) Harjoitus 11, ratkaisuja (Topi Musto)

Ristitulolle saadaan toinen muistisääntö determinantin avulla. Vektoreiden v ja w ristitulo saadaan laskemalla determinantti

POHDIN - projekti. Funktio. Vektoriarvoinen funktio

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

jens 1 matti Etäisyydet 1: 1.1 2: 1.4 3: 1.8 4: 2.0 5: 3.0 6: 3.6 7: 4.0 zetor

Kerro kuvin 3:n uudet ominaisuudet

MAB3 - Harjoitustehtävien ratkaisut:

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Topologia Syksy 2010 Harjoitus 4. (1) Keksi funktio f ja suljetut välit A i R 1, i = 1, 2,... siten, että f : R 1 R 1, f Ai on jatkuva jokaisella i N,

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Kuva 1. Jokaisen tavallisen kuvan tasotyökalussa näkyy vain yksi taso, tässä nimellä tausta.

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:

Vektorien pistetulo on aina reaaliluku. Esimerkiksi vektorien v = (3, 2, 0) ja w = (1, 2, 3) pistetulo on

Verkkoaineistojen linkittäminen

58131 Tietorakenteet ja algoritmit (syksy 2015)

opiskelun suunnittelujärjestelmä, kurki ja ilmo käyttävät kaikki samaa tietokantaa, ja uusi järjestelmä tulee osaksi tätä.

Transkriptio:

HELSINKI UNIVERSITY OF TECHNOLOGY 5.5.2003 Telecommunications Software and Multimedia Laboratory T-111.500 Tietokonegrafiikan Seminaari Spring 2003: mtkorpel@cc.hut.fi Dynamic Occlusion Culling Mikko Korpelainen 46787L

Dynamic Occlusion Culling Mikko Korpelainen HUT, Telecommunications Software and Multimedia Laboratory mtkorpel@cc.hut.fi Abstrakti Dynamic occlusion culling on ala jolla pyritään löytämään isosta ja dynaamisesta objektijoukosta laskennallisesti vain se osajoukko joka todella tulee näkyviin ruudulle. Lähes kaikissa tapauksissa tärkein kriteeri tällaiselle algoritmille on output sensitivity eli että laskenta aikaan ei vaikuta mallin monimutkaisuus vaan se millainen kuva halutaan. Lisäksi jotkut mallit ovat niin suuria, etteivät ne mahdu muistiin sellaisenaan vaan jonkinlaista karsimista on pakko tehdä. Avainsanat Dynamic occlusion culling, dynamic scene, cplp, HZB, TBV 1 JOHDANTO Tämä artikkeli on kirjoitettu Teknillisen Korkeakoulun Tietokonegrafiikan seminaari kurssia varten. Kurssin pääasiallinen tarkoitus on opettaa oppilaat käyttämään lähteitä kirjoittaessaan tieteellisiä julkaisuja. Kurssi kuitenkin pyrkii aiheiden valinnassa painottamaan sen ajan kuumia aiheita, jotta oppilaat saisivat seminaaritapahtumassa hyvän käsityksen alalla tällä hetkellä vaikuttavista tuulista. Tämän paperin aiheena on dynaamisessa mallissa tapahtuva peitettyjen objektien prosessoimatta jättäminen eli dynamic occlusion culling. Paperissa käytetään kautta linjan englanninkielisiä termejä, koska nuorella alalla ei ole vielä vakiintunut näiden suomenkielisiä vastineita. Dynamic occlusion culling on laskennallisesti varsin haastava ala, jolla pyritään parantamaan monimutkaisten dynaamisten mallien reaaliaikaista esitystä. Aihe on siinä määrin hankala, että ilman laitteistotukea on äärimmäisen vaikea tehdä tehokasta algoritmia, joka hallitsisi mallissa tapahtuvat muutokset. Ymmärrettävästi tietokantaratkaisuilla on suuri merkitys. Erityisen tärkeää dynamic occlusion culling on niissä tapauksissa, joissa on todella paljon liikkuvia esineitä. Tai jos esineiden joukko on kerta kaikkiaan niin suuri, ettei se mahdu muistiin sellaisenaan. 1

Paperissa keskitytään kolmen perusalgoritmiin, jotka ovat alan kannalta keskeisiä. Algoritmit ovat Hierarhical Z-Buffer Visibility (HZB), Temporal Bounding Volume (TBV) ja conservative Prioritized Layered Projection (cplp). HZB oli näistä ensimmäinen ja se olikin ensimmäinen algoritmi joka tukee dynaamisuutta malleissa, siksi se esitellään ensimmäisenä. Toisena esitellään TBV, joka on enemmänkin jonkin mielivaltaisen staattisen occlusion culling algoritmin laajennus dynaamiseksi. Viimeisenä keskitytään cplp:hen, joka on tehokas dynamic occlusion culling menetelmä. Yhteistä näille algoritmeille on konservatiivisuus eli ne voivat piirtää sellaisia alkioita joita ei ehkä oikeasti näy, mutta ne eivät koskaan jätä piirtämättä näkyvää alkiota. Ennen algoritmien esittelyä käydään lyhyesti läpi staattinen occlusion culling ja algoritmien jälkeen esitellään hyvin lyhyesti muita menetelmiä. Viimeisenä on yhteenveto. 2 STATIC OCCLUSION CULLING Ensimmäisenä termin occlusion culling mainitsi J.H.Clark [8] vuonna 1976. Hän ehdotti hierarkkista objektiesitystä, jossa jokaiseen noodiin liittyisi bounding sphere ja yksinkertainen bounding volume. Jos yhden noodin bounding volume peittää toisen noodin, ei jälkimmäistä noodia eikä sen alipuita tarvitse prosessoida. Ratkaisussa ei otettu huomioon useamman noodin yhdessä peittämiä alueita. Clark ei paperissaan esitellyt implementaatiota tai empiirisiä tutkimuksia. [1] Meagher [4] esitteli 1982 menetelmän tulostaa ruudulle monimutkaisia, esimerkiksi ihmisen magneettisesta skannauksesta saadun datan perusteella muodostettuja, diskreettejä kolmiulotteisia kuvia. Menetelmä perustui kahdeksankantaiseen puuhun (octree). Kaiken kaikkiaan todella mielenkiintoinen esitystapa jossa avaruutta jaetaan osiin, kunnes jokainen eri osa on joko tyhjä tai täysi. Kuva 1 havainnollistaa tätä avaruutta. Meagherin algoritmi laskee luvussa 3 Hierachical Z-Buffer Visibility esitetyn menetelmän kaltaisesti kaikki ne kuutiot jotka ovat toisten kuutioiden takana katselukulmasta lähtien poistaen ne ja niiden kaikki perilliset pääsemästä piirtoalgoritmille eli suorittaa alkukantaisen occlusion culling algoritmin.[4] Kuva 1 Meagherin [4] käyttämä octree 2

Tämän jälkeen erilaisia occlusion culling tekniikoita on esiintynyt kuin sieniä sateella, mutta suurimmalla osalla on yhteinen vika: ne ovat liian spesifisiä. Seuraavassa luvussa esittelen kuitenkin yhden ensimmäisistä geneerisistä algoritmeista, jota esimerkiksi nvidia:n ja ATI:n uudet näytönohjainkortit osittain tukevat. Yksi hierarkkinen tapa esittää mallia on binary space partitioning(bsp), jota en tässä paperissa sen kummemmin esittele. Sanottakoon vain että se jakaa aina jäljellä olevan avaruuden kahteen osaan tasolla. [1] 3 HIERACHICAL Z-BUFFER VISIBILITY Greene, Kass ja Miller [2] esittelivät ensimmäisenä menetelmän, joka hyödyntää sekä objektiavaruuden, kuva-avaruuden että ajan yhdenmukaisuutta (coherence). Tässä luvussa käsittelen ensin menetelmän ja sitten algoritmin. 3.1 Hierarchical Visibility HZB käyttää hyväkseen objekti avaruuden koherenssia muodostamalla octree:n joka jakaa avaruuden tiloihin kuvan 1 mukaisesti, sillä erotuksella että nyt jos tila on täysi, se tarkoittaa että siinä on polygoni. Koherenssia hyödynnetään käyttämällä octree:tä Z- puskuroimiseen kuten Meagher teki 3D- pikseleilleen.[2] Kuva-avaruutta hyödynnetään käyttämällä Z-pyramidia, jossa tarkimpana tasona käytetään Z-puskuria. Siitä tehdään toiseksi tarkin taso yhdistämällä aina neljä alempaa pikseliä yhdeksi ja ottamalla niistä kauimmaisin, jonka arvon uusi pikseli saa. Näin polygonin voi hylätä kun sitä vertaa tarkimpaan tasoon, jossa se mahtuu yhteen pikseliin, ja sen lähin Z-arvo on kauempana kuin pikselissä oleva arvo. Tätä testiä käytetään HZB:ssä sekä octree tarkistuksiin, että varsinaisiin alkioiden näkyvyyden tarkistuksiin. Kuvassa 2 on esitetty hierarkkinen Z-puskuri. Sylinteri on isoimmassa, eli tarkimmassa, kuvassa kokonaan. Pienemmät kuvat esittävät testiä nopeuttavia ylempiä kerroksia.[2] Aika koherenssia hyödynnetään käyttämällä sitä geometria joukkoa, joka oli näkyvä edellisessä kuvassa, algoritmin alkujoukkona. Tämä alkujoukko sitten tarkastetaan uuden kuvan suhteen Z-puskuri testillä jotta siitä saadaan karsittua kaikki näkymättömissä olevat objektit pois. Saatua objekti joukkoa, joka siis sisältää kaikki ne objektit jotka olivat näkyvissä edellisessä kuvassa ja näkyvät myös tässä kuvassa käytetään sitten Z-pyramidin luomiseen. Aika koherenssin hyödyntäminen nopeuttaa huomattavasti HZB:n suorituskykyä.[2] HZB:ssä siis piirretään edellinen kuva ensin käyttäen Z-pyramidia. Sen jälkeen käydään läpi octree, jonka näkyviksi luokitellut lehdet piirretään. Näin saattaa peitetty alkio tulla piirretyksi. Peitetty tulee piirretyksi jos se kuuluu octree:n näkyväksi luokiteltuun lehteen. 3

Kuva 2 Hierarchical Z-Buffer esittää erään objektin viittä eri Z-puskuri tasoa. Original Courtesy of Hansong Zhang, UNC. [6] 3.2 Algoritmi Octree objekti hierarkia muodostetaan luomalla ensin iso kuutio johon koko malli mahtuu ja rekursiivisesti suorittamalla seuraavaa: Jos alkioita on kuutiossa tarpeeksi vähän, liitetään ne kaikki tähän tilavuuteen ja lopetetaan tämä haara. Muussa tapauksessa liitämme tähän tilavuuteen kaikki ne alkiot jotka leikkaavat jonkun tämän kuution osiin leikkaavista tasoista. Tämän jälkeen jaamme kuution osiin ja kutsumme sitä uudelleen osiin jääneillä alkioilla. Ongelmaksi tässä jää, että jos yksi pienenpieni kolmio on suurimman kuution leikkaustasoilla, sijoitetaan kolmio siihen kuutioon ja piirretään aina noodin piirtämisen yhteydessä. HZB:ssä tämä ongelma on kierretty tarkistamalla onko tasot leikkaava alkio paljon pienempi kuin octree kuutio. Ja jos on, assosioidaan se kaikkiin niihin kuutioihin, joiden rajoja se leikkaa. [2] HZB:n perus piirto (rendering) algoritmi ei koskaan käy samassa noodissa kahdesti, eikä se mene noodeihin joiden vanhemmat ovat piilossa. Nämä ominaisuudet ovat periytyvät suoraan octree hierarkiasta. Aika koherenssi algoritmi yksinkertaisesti piirtää kaikki ne objektit jotka näkyivät edellisessä kuvassa muodostaen samalla hierarkkista Z-pyramidia. Tämän jälkeen se käy aika koherenssi listan läpi ja poistaa piilossa olevat noodit. Tällä tavalla estetään listan kasvaminen hallitsemattomiin mittoihin. Ilman aika koherenssin käyttöä HZB on itse asiassa melko tehoton.[2] Hierarkkista Z-pyramidia käytetään ensin vertaamalla polygonia tai octree kuutiota tarkimpaan tasoon, johon se mahtuu kokonaan. Jos objektin joku kohta on lähempänä kuin Z-arvo, käydään kaikki tarkemman tason pikselit läpi. Näin jatketaan kunnes, joko todistetaan polygoni piilossa olevaksi tai löydetään tarkimmasta Z-puskurista pikseli jota lähempänä objekti on. Z-pyramidi päivitetään aina kun on tarvetta laittamalla uusi kauimmainen arvo kaikkiin tasoihin mihin se vaikuttaa alkaen tarkimmasta. 4

3.3 Yhteenveto HZB on hyvin geneerinen ja edistyksellinen algoritmi joka pyrkii hyödyntämään kuvan eri tekijöiden keskinäisiä suhteita. Siinä on kuitenkin vielä paljon parannettavaa sillä se ei ota kantaa liikkuviin esineisiin ja Z-occlusion kysely vie melko paljon aikaa ainakin ohjelmistolla toteutettuna. Jälkimmäiseen asiaan on kuitenkin luvassa helpotusta, sillä näyttää siltä että suuret laitteisto tuottajat kuten nvidia alkaisivat tukea Z-occlusion kyselyä. nvidia tukee sitä jo GeForce [5] sarjassaan versiosta 3 eteenpäin. HZB:n nerokkain oivallus on myös yksinkertaisin. Edellisessä kuvassa piirrettyjen objektien käyttö uuden kuvan pohjana säästää todella paljon laskenta-aikaa. 4 TEMPORAL BOUNDING VOLUMES Temporal bounding volumes (TBV) tarkoittaa sellaista tilavuutta, johon objekti voi ehtiä tietyn ajan kuluessa kun sen nopeuteen liittyviä määreitä tiedetään. Jos esimerkiksi tiedetään vain objektin kiihtyvyys, saadaan vain objektin tapahtuma horisontin mukainen pallo, johon objekti voi ehtiä tietyssä ajassa. Kuvan 2 tapauksessa TBV olisi se pallo johon auton rata mahtuu. Tuo TBV vanhenee sen ajan kuluessa joka autolla kuluu tuon radan kulkemiseen. [1] (a) (b) Kuva 3 (a) Malli (b) Mallin rata (TBV) Sudarsky ja Gotsman [1] esittivät 1999 menetelmän joka pyrkii ottamaan huomioon mallin dynaamisuuden ja minimoidaan mallin dynaamisuudesta johtuvien viestien määrän. Tämä on erityisen tärkeää server/client sovelluksissa, joissa kommunikoidaan hitaan linkin, kuten internet, yli. Tämä menetelmä perustuu TBV:hin. TBV:tä voidaan käyttää minkä tahansa staattisen occlusion systeemin päällä. 5

4.1 Algoritmi ja laiska laskenta TBV perustuu niin sanottuun laiskaan laskentaan, jonka periaatteena on, ettei tehdä mitään ennen kuin se on aivan välttämätöntä. Tämä tarkoittaa sitä, ettei liikkuvia objekteja päivitetä mallin hierarkiassa uuteen paikkaan ennen kuin ne ovat päässeet TBV:nsä loppuun. Jos jokin objekti on siis dynaaminen, sitä ei sellaisenaan missään vaiheessa laiteta hierarkiaan vaan siitä tehdään aina TBV. TBV yhdistetään sitten objektiin. TBV:hen ei kosketa ennen kuin sen aika kuluu umpeen tai occlusion algoritmi päättää sen olevan näkyvä. [1] TBV algoritmiin käytetään siis jotakin hierarkkista tietorakennetta, sekä sen päällä jotakin staattista occlusion culling algoritmia, joka aluksi rakennetaan pelkästään staattisista objekteista. Dynaamisia objekteja käsitellään erikseen. Niillä on kaksi tilaa: näkyvä ja piilossa. Piilossa olevilla on TBV ja siinä voimassaoloaika. Tuo TBV käyttäytyy alla olevassa hierarkiassa aivan kuin objekti. Mikäli TBV huomataan näkyväksi, se tuhotaan ja objekti siirtyy tilaan näkyvä, jolloin sen ominaisuuksia päivitetään jokaisessa kuvassa. Jos objekti on näkyvässä tilassa, mutta alla oleva algoritmi toteaa sen piilossa olevaksi, tehdään sille uusi TBV. 4.2 Näkymiä TBV:hen Aika jonka jokainen TBV on voimassa (TBV Validity Period), eli bounding volume:n koko, on ongelmallinen. Väärin valittu aika voi huomattavasti vaikuttaa algoritmin suorituskykyyn. Eräs ratkaisu on käyttää melko pitkää aikaa sellaisille maisemille, jossa kamera pysyy paikallaan ja lyhyttä aikaa liikkuville kameroille.[1] Joskus TBV:n laskeminen voi olla liian aikaa vievää, silloin kannattaa käyttää sumeaa TBV:ta (fuzzy TBV), jossa ei taatakaan TBV:n sisältävän objektia teittyyn aikaan asti varmasti vaan jollakin annetulla todennäköisyydellä. [1] Ajatuksena on että monikäyttäjä ratkaisuissa algoritmia ajettaisiin client-puolella. Ja pelkästään toisten käyttäjien aiheuttamat muutokset kysyttäisiin serveriltä. 4.3 Yhteenveto TBV:n vahvuus on ilman muuta se, että se sopii minkä tahansa staattisen occlusion culling algoritmin päälle dynamiikan hallintaan. Lisäksi se ei vaadi raskasta esilaskentaa, mutta pientä säätöä tarvitaan. Esimerkiksi TBV:n luonnissa on monenlaisia tapoja ja validity period täytyy valita järkevästi. TBV:llä saadaan melko lailla tasaista viivaa tuloskäyräksi, eli polygonien määrä ei juuri vaikuta kuvanopeuteen (framerate). Tämä on tietysti positiivinen asia, mutta yhdessäkään annetuista tilastost ei päästä alle 0.3 sekunnin per kuva ja se ei ihan reaaliaikaisuutta muistuta. 6

TBV:stä erityisen mielenkiintoisen tekee fuzzy TBV, jossa objektin bounding volume:a ei lasketakaan niin tarkasti ja aikaa vievästi, vaan annetaan pikemminkin paras arvaus. Tämä arvaus on luultavimmin abstrakti pallo, jonka käsittely on nopeaa tietokoneelle. TBV on maalaisjärjellä ajateltu ratkaisu. Sen ainoa suuri heikkous on tarve muuttaa alla olevaa tilahierarkiaa objektin paikan tai tilan muuttuessa tarpeeksi. Tähän ratkaisu voisi olla jonkinlainen väljä kiinnitys (loose connection), jossa dynaamiset objektit eivät saa omaa uutta noodia, vaan ne sidotaan aina jo olemassa oleviin noodeihin. Näin säästyttäisiin raskailta tietokanta muutoksilta. Sivu seurauksena dynaamisia objekteja tietysti tultaisiin piirtämään useammin. Esimerkiksi octree:n tapauksessa jos pieni dynaaminen objekti menee isoon tyhjään tilaan, assosioitaisiin se tuohon tilaan ja piirrettäisiin aina kun tila piirretään. 5 CPLP Klosowski ja Silva ehdottivat 1999 Prioritized-Layered Projection (PLP) algoritmia, joka arvioi näkyvät objektit tietyllä budjetilla. Eli valitsi objekteja näkyviin kunnes tuo budjetti ylitettiin. Tämä johtaa kuitenkin vääjäämättä joidenkin näkyvien primitiivien hylkäämiseen. PLP jakaa avaruuden soluihin ja antaa solulle jonkun todennäköisyyden jolla se peittää takana olevat objektit. Sitten se käy annetusta katselupisteestä lähtien läpi soluja projisoiden ne puskuriin ja muuttaa projisoidun alueen näkyvyys todennäköisyyttä uuden olion peitolla. Algoritmi jättää viimeiseksi ne objektit joiden näkyminen tulee epätodennäköisimmäksi.[3] Myöhemmin 2001 Klosowski ja Silva [3] ehdottivat konservatiivista PLP:tä joka käyttää PLP:tä pohjanaan, ja käyttää kuva-avaruuden näkyvyys hakuja kehittääkseen annetusta PLP pohjasta konservatiivisen objektijoukon.[3] 5.1 Algoritmi Kun PLP algoritmi ajetaan, sivutuotteena saadaan 1) PLP:n laskeman kuvan Z-puskuri ja 2) PLP:n priorisointi jono (front) niistä objekteista jotka eivät kuvaan mahtuneet. Konservatiivinen lisäys tarkastaa kuva-avaruus haulla ovatko jonossa olevat objektit näkyvissä, ja piirtää näkyvät. Jatkaen kierrosta kunnes jono on tyhjä. Kun jono on tyhjä, on kuva valmis. Algoritmin pseudokoodi on esitetty I APPENDIX:ssa.[3] 5.2 Yhteenveto cplp on melko edistyksellinen algoritmi ja se saa OpenGL:ltä [3] laitteisto tukea. Sen suorituskyky on kuitenkin melko implementaatio ja laitteisto riippuvainen ja tekijät ehdottivatkin OpenGL:ään laajennusta, joka tukisi Z-occlusion kyselyjä. Tämä toiminnallisuus on sama kuin HZB:n tapauksessa ja se on uusimmissa ATI:n ja nvidia:n korteissa. cplp tarvitsee esilaskentaa ja dynaamisten esineiden aiheuttamia muutoksia ei ole otettu huomioon soluja luotaessa. Ehkä soluja voitaisiin hallita dynaamisesti melko pienillä laskutoimituksilla laiskan laskennan tyyliin. Eli jokaiselle liikkuvalle esineelle 7

annettaisiin oma solu, joka voi liikkua ja muovautua ajan mukana. Nämä solut sitten käsitellään erikseen ja ne ovat toisten solujen kanssa limittäin, eli jokaiseen dynaamiseen soluun liitetään osoitin niihin soluihin, joiden päällä se on. Dynaamiset solut piirretään siis vain jos niiden isäntä solut piirretään. cplp:tä voitaisiin kenties kehittää yhdistämällä jokaiseen objektiin tai soluun pallofunktio, jossa funktio antaa katselukulmasta riippuen eri todennäköisyyden peittämiselle. Tämä vaatisi esilaskentaa lisää jonkin verran, mutta voisi parantaa lopputulosta huomattavastikin. Pallofunktioon voi lisätä pallosuunnan lisäksi muuttujaksi myös ajan tai objektin tilaan liitoksissa olevan muuttujan. Esimerkiksi ihmishahmo kyykyssä antaa eri todennäköisyyden kuin sama hahmo seistessä. Tällöin todennäköisyys muuttuu objektin transformoituessa. Ajonaikana tuo funktio vie tietysti aikaa perus-plp algoritmissa, mutta se säästäisi mielestäni aikaa konservatiivisessa osuudessa, koska PLP:n tulos on tarkempi. cplp:ssä PLP osuutta käytetään vain suhteellisen hyvän alkujoukon saamiseksi, joten ehdottamani laajennus lienee turha. 6 MENETELMIEN VERTAILU Esitettyjen algoritmien suorituskykyä on vaikea verrata sillä TBV on vain dynaaminen lisä johonkin muuhun algoritmiin ja HZB:stä ei ole saatavilla tutkimus tuloksia. Kuitenkin mikäli malli on melko staattinen ja sisältää vain joitakin liikkuvia objekteja on TBV:n implementoiminen todennäköisesti kustannustehokkainta, varsinkin jos staattinen occlusion culling menetelmä on jo olemassa. Mikäli malli on todella iso tai sisältää paljon dynaamisia objekteja kannattanee käyttää cplp:tä sillä sen budjetti ominaisuus takaa ratkaisun, joka ei juurikaan riipu mallin kompleksisuudesta. cplp:tä täytyy tietysti laajentaa dynaamisten objektien tapauksessa, mutta TBV algoritmista on varmasti apua siinä. Jos tekee ohjelmistoja GeForcelle, on HZB myös varteen otettava vaihtoehto sen laitteisto tuen takia. Jokaisen polygonin tarkastaminen, onko se jonkin toisen polygonin takana, on aivan liian hidasta ja kasvaa eksponentiaalisesti polygonien määrän mukana. Siksi avaruus on lähes kaikissa tapauksissa jaettu hierarkkisiin osiin. Josta puolestaan johtuu, että dynamiikkaa on niin vaikea ottaa huomioon. [6] Nykyisillä laitteistoilla ja kuluttajien aina kasvavalla graafisten loistokkuuksien himolla, on aina käytettävä muitakin ratkaisuja leikkaukseen kuin vain occlusion culling:ia. Tosin jo muutaman vuoden päästä saattavat koneet ja näytönohjaimet olla niin tehokkaita, että pelkkä level of detail tai active surface definition tyyliset ratkaisut dynaamisille objekteille, yhdistettynä alla oleviin occlusion culling metodeihin saattaa olla tarpeeksi järkevä ratkaisu kaikkien kukkaroille. Täysin erilainen lähestymistapa on niin sanottuihin hyviin peittäjiin perustuva menetelmä, jossa esilaskennassa päätellään jokin joukko, yleensä isoja objekteja, jota sitten vain käytetään occlusion culling:ssa. [7] 8

Erilaisia menetelmiä ovat vertailleet Cohen-Or, Chrysanthou, Silva ja Durand [6] vuonna 2000. Tuossa paperissa on esitelty monia culling:iin liittyviä menetelmiä, jotka eivät tosin läheskään kaikki ole dynaamisia, mutta sieltä saa hyvän pohja käsityksen erilaisista mahdollisuuksista. 7 TULEVAISUUS JA KOMMENTIT Dynamic occlusion culling on hyvin ristiriitainen aihe, sillä siinä on perimmäisenä ongelmana perinteinen muna ja kana ongelma. Eli, kuvan piirtäminen heti sen jälkeen kun se on juuri piirretty, olisi todella nopeaa. HZB yrittää käyttää tätä hyväkseen aika koherenssi algoritmissaan. Kaikissa algoritmeissa on tilanteita, joissa niistä on enemmän haittaa kuin hyötyä. Esimerkiksi jos yksikään objekti ei peity, on occlusion culling algoritmi tullut ajetuksi täysin turhaan, tällaisia tilanteita voi yrittää ottaa huomioon suunniteltaessa uutta algoritmia uuteen ohjelmaan. Reaalimaailmassa valoaallot eivät kulje läpi kiinteiden esineiden, joten ihminen ei näe sellaista mikä on peitettyä. Tietokonemaailmassa ei ole valoaaltoja vaan kaikki on perustaltaan diskreettiä. Siksi vektorien kanssa voitaisiin päästä jonkinlaisiin tuloksiin Ehkäpä näkyvyys tieto voitaisiin laittaa objekteille itselleen, jolloin hyödynnettäisiin tietokantaan sisäänrakennettuja funktioita näkyvyyden laskemisessa. Ja tähän sovellettaisiin laiskaa laskentaa siltä osin, ettei objektin tila voi saada muutoksia ellei se ole lähes varmaa. Tietokannan puolella tapahtuvat näkyvyystarkastelut vapauttavat näytönohjainten resursseja muihin tarpeisiin. Hybrid Graphics, Ltd. on luonut dynaamiseen PVS:n perustuvan menetelmän, joka ainakin demon mukaan näyttää hyvältä. Tästä herääkin kysymys kuinka tärkeää oikeasti on saada täysin geneerinen dynamic occlusion culling mekanismi vai riittäisikö kaikkiin sovelluksiin jokin spesifinen ratkaisu. Varmaa on että akateeminen taho yrittää luoda geneerisen ja tieteellisesti hienoimman ratkaisun jota se voi SIGGRAPH:ssa esitellä. Yhtä varmaa on että peliteollisuus ja muut asian kanssa bisnestä tekevät tahot yrittävät luoda menetelmän jolla tulon ja kustannuksen suhde maksimoidaan, eli mahdollisimman spesifisen tai sitten suoran kopion jostain toisesta ratkaisusta. Dynaamisten objektien käyttäminen occluder:na on vaikeaa tunnetuissakin olosuhteissa, mutta esimerkiksi lintuparven tai viidensadan pelaajan verkkopeleissä se lähestyy mahdottomuutta. Siksi luulen että LOD riittää useimpiin liikkuvien objektien tapauksiin. Uskon kuitenkin että grafiikkakortit tulevat tukemaan tulevaisuudessa enenevässä määrin dynamic occlusion culling:ia. Näytönohjaimiin ei kuitenkaan saa koko objekti tietokantaa koskaan, joten on keksittävä ratkaisu joka minimoi hierarkkisten tilanesitysten tarpeen. Toinen vaihtoehto on hierarkkisten esitysten kehittäminen neuroverkko suuntaan, jossa objektit ovat soluja jotka reagoivat toistensa tilojen ja paikan muutoksiin. Lisäksi apua 9

ongelman ratkaisuun saattaisi saada täysin odottamattomalta suunnalta, esimerkiksi hahmontunnistuksesta. Hahmontunnistuksessahan yritetään saada tietokone nopeasti hahmottamaan 2D kuva kolmiulotteiseksi. Jos tämä onnistuu, luulisi käänteisen operaation luomisen olevan suhteellisen suoraviivaista. REFERENSSIT [1] O. Sudarsky and C. Gotsman: Dynamic Scene Occlusion Culling, IEEE Transactions on Visualization & Computer Graphics, Vol. 5, No. 1, January-March 1999 [2] N. Greene, M. Kass and G. Miller, Hierarchical Z-Buffer Visibility, Computer Graphics Proc., Ann. Conf. Series, pp.231-244, 1993. [3] J. T. Klosowski and C. T. Silva, Efficient Conservative Visibility Culling Using the Prioritized-Layered Projection Algorithm, IEEE Transactions on Visualization & Computer Graphics, Vol. 7, No. 4, October-December 2001 [4] D. J. Meagher, Efficient Synthetic Image Generation of Arbitrary 3-D objects, Proc. Conf. Pattern Recognition and Image Processing, pp. 473-478, IEEE Computer Society, June 1982 [5] NVIDIA Corporation, GeForce4 Ti Product Overview 09.02v03, http://www.nvidia.com/docs/lo/1467/supp/po_geforce4_ti_92502.pdf, accessed on 4 th of April 2003 [6] D. Cohen-Or, Y. Chrysanthou, C. Silva and F. Durand, A Survey of Visibility for Walkthrough Applications, Proceedings of EUROGRAPHICS '00, Course Notes, 2000 [7] F. Durand, 3D Visibility: Analytical Study and Applications, PhD thesis, Université Joseph Fourier, Grenoble, France, July 1999. [8] J.H.Clark, Hierarchical Geometric Models for Visible Surface Algorithms, Comm. ACM, vol. 19, pp. 547-554, Oct 1976 10

I APPENDIX init(){ split universe into cells; for(i = ncells) determine probability of occlusion for i; put first cell into front; addtofront(cell){ get probability from projision map; put to front with probability; runplp(){ while(underbudget){ check front for cell that is most likely not occluded; project it; remove it from the front; add it to rendering queue; addtofront( its neighbours); AdvanceFrame(){ runplp(); while(front is not empty){ while(i = ncellsinfront){ // use image-space visibility // queries if(i is occluded){ removecellfromfront(); nextcell; while(i = ncellsinfront){ project i; remove i from front; // these will not be a part of this iteration round add the neighbours of i into front; Koodi 1 cplp algoritmi [3] 11