TEKNILLINEN KORKEAKOULU, HELSINKI 29.4.2003 Tietoliikenneohjelmistojen ja multimedian laboratorio Tik-111.500 Tietokonegrafiikan seminaari Kevät 2003: Reaaliaikaisen 3D grafiikan laadun ja nopeuden parantaminen Geometrian yksinkertaistaminen: Progressive Meshes Markus Eräpolku 49438A
Geometrian yksinkertaistaminen: Progressive Meshes Markus Eräpolku Teknillinen Korkeakoulu, Helsinki merapolk@cc.hut.fi Tiivistelmä Tässä paperissa käsitellään Hugues Hoppen kehittämää, kolmiulotteisten polygonimallien yksinkertaistamiseen tarkoitettua dynaamista ja jatkuvaaikaista tekniikkaa nimeltä "Progressive Meshes" (lyhennetty jatkossa PM). Tekniikkaan läheisesti liittyviin mekanismeihin ja käsitteisiin tutustutaan. Lisäksi esitellään PM:ään tehty parannus, näkymäriippuvaisuuden huomioonottaminen. Paperissa käsitellään joitain seikkoja hieman syvällisemmin, mutta toteutuksien varsinaisiin yksityiskohtiin ei mennä. Tämä paperi pohjautuu pitkälti Hoppen julkaisuihin [4] ja [5]. 1 JOHDANTO Nykypäivänä tietokonegrafiikassa monimutkaiset mallit esitetään pääsääntöisesti polygoneilla. Tämä johtuu siitä, että niiden käsittely on yksinkertaista ja hyvin tuettu laitteiston alimmilla tasoilla [9]. Kasvanut laskentateho ja tarve saada yhä aidompaa jälkeä on nostanut polygonimäärän malleissa hyvin suureksi sen jopa ylittäen laskentakapasiteetin. Tilanteen tasapainottamiseksi malleja pyritään yksinkertaistamaan vähentämällä polygoneja alueilta, joissa niiden merkitys on vähäinen. Käytettävien algoritmien luonne riippuu tarkoitusperistä sekä kohteena olevien mallien tyypistä. Tarkoitus on useimmiten päästä mahdollisimman vähäiseen polygonimäärään, mutta kuitenkin asetetuissa rajoissa säilyttää malli riittävän hyvänä likiarvoistuksena alkuperäisestä [9]. Ennen näihin kriteereihin menemistä käydään lävitse muutama aihealueen kannalta oleellinen käsite. Tämän jälkeen käsitellään muutamia tekniikoita. Luvussa 3 päästään itse PM-tekniikkaan, jonka toteutukseen tutustutaan pääpiirteittäin ja optimointitarkastelulle annetaan hiukan suurempi painoarvo. Lopuksi ennen tehokkuustarkastelua ja yhteenvetoa käydään lävitse tekniikkaan tehty parannus, näkymäriippuvuuden huomioon ottaminen mallin tarkkuudessa. 1.1 Peruskäsitteitä Polygoni tarkoittaa suorin viivoin rajattua, suljettua tasoa ja sen määrittelevät tavallisesti kolmiulotteisen avaruuden paikkakoordinaatilliset kontrollipisteet (verteksit). [8] Polygonia rajaavia viivoja kutsutaan reunoiksi (edge). Kolmiulotteisen grafiikan esityksessä käytetyt polygonit ovat miltei poikkeuksetta alimmalla tasolla kolmioita [9]. Tämä johtu siitä, että niiden käsittely on matemaattisesti yksinkertaista: 1
kolmion kaikki pisteet sijaitsevat samassa tasossa. Puhuttaessa sävytysfunktioista tarkoitetaan sitä tapaa, funktiota tai algoritmia, joka täyttää polygonipinnan tason väriarvoilla renderöitäessä [8]. Yhtä kokonaisuutta mallintavaa polygonirakennelmaa kutsutaan nimellä mesh. Meshissä polygonin rajaamaa kaksiulotteista pintaa kutsutaan tässä paperissa tasopinnaksi (face). Geometrian yksinkertaistamisen yhteydessä topologialla tarkoitetaan meshin polygonirakennetta; sen luonnetta ja ominaisuuksia. Tähän kuuluu genus, joka on yhtä kuin meshin pinnalta löytyvien aukkojen lukumäärä. Tason, kulman tai verteksin paikallisella topologialla tarkoitetaan kyseisen osan liitännäisyyttä sen välittömään naapurustoon. Jos jokaiselle meshin osan naapurostolle pätee, että ne muodostavat yhteneväisen polygonirenkaan, jossa ei ole aukkoja, sanotaan että mesh muodostaa 2D manifoldin (katso kuva 1). Tässä esityksessä käsitellyt meshit täyttävät edellä kuvatut vaatimukset jos toisin ei ole mainittu [9]. Kuva 1: Vasemmalla 2D manifoldi mesh, oikealla kolme tapausta ei-manifoldeista mesheistä. (D.P. Luebke 2001, lähteestä [9], sivu 27) 1.2 Yksinkertaistuksen tarve Lähestymistapa yksinkertaistamisessa riippuu paljolti siitä, mitä sillä halutaan saavuttaa. Yhtä ylivoimaista algoritmia ei ole. Erilaisia tekniikoita on kehitetty pitäen mielessä tietty käyttötarkoitus: halutaanko poistaa mallin tarkkuuden kannalta turha geometria, joita esimerkiksi taitamaton 3d-mallinnusohjelmiston käyttö saatta synnyttää, pyritäänkö minimoimaan mallin viemää tilaa, halutaanko mallin ajonaikainen suorituskyky nopeaksi vai onko ehkä tärkeintä korkeatasoinen ulkonäkö? Sopivimman lähestymistavan valintaan vaikuttaa myös millaisesta mallista on kysymys. Jotkut lähestymistavat sopivat parhaiten orgaanisille ja pyöreitä muotoja sisältäville malleille, kuten eläimille, ja jotkut taas kulmikkaille malleille. Jotkut algoritmit hyväksyvät syötteekseen vain manifoldeja objekteja, ja jotkut taas saattavat lopputuloksena rikkoa manifoldin topologian esimerkiksi sulkemalla alkuperäisen meshin pinalla olevia aukkoja. Tällaiset algoritmit eivät ole kovin tarkkoja, mutta sen sijaan kykenevät suurempaan yksinkertaistukseen [9]. 1.3 Asteittainen yksinkertaistus Yksi lähestymistapa on esittää mallit asteittaisesti. Tällöin puhutaan level-of-detail esityksestä, joka tarkoittaa että samasta mallista on useita, eritarkkuuksisia esityksiä. Näitä voidaan käyttää katsojan ollessa eri etäisyyksillä mallista, koska esimerkiksi kauempana ei tarvita niin yksityiskohtaista esitystä. Myös käytössä olevan laitteiston mukaan esitystarkkuutta voidaan mukauttaa [9]. 2
1.4 Yksinkertaistuksen staattisuus ja dynaamisuus Yksikertaistukseen käytettäviä algoritmeja erottaa myös, ovatko ne luonteeltaan staattisia vai dynaamisia. Dynaamisissa tekniikkoissa käytetty LoD lasketaan ajonaikaisesti jolloin päästään hienojakoisempiin tuloksiin. Asteittainen yksityiskohtaistaminen voidaan tehdä myös staattisesti kokonaan esikäsittelyvaiheessa, jolloin ongelma on yksinkertaisempi, mutta mallien skaalautuvuus eri tilanteisiin on rajallisen LoD-määrän takia huonompi. Dynaaminen lähestyminen mahdollistaa luontevasti myös mallin asteittaisen lähettämisen ja renderöinnin ilman, että kaistaa tuhlaantuu samojen yksityiskohtien uudelleenlähettämiseen [9]. 1.5 Käytettävät tekniikat Näytteistys (sampling), mukautuva uudelleenjako (adaptive subdivision), desimaatio (decimation) ja verteksien yhdistäminen (vertex merging) ovat neljä perusmekanismia, mitä miltei jokainen geometrian yksinkertaistamiseen tehty tekniikka käyttää hyväkseen. Useasti käyttössä on näiden yhdistelmä tai jonkinlainen muunnelma. Näytteistyksessä alkuperäisen mallin geometriasta otetaan halutulla tarkkuudella näytteitä joko sen pinnalta tai mallin päälle asetetun kolmiulotteisen hilan avulla. Tätä käyttävät tekniikat toimivat parhaiten ei-kulmikkaiden, orgaanisten mallien kanssa. Mukautuvassa jaossa aluksi etsitään yksinkertainen perus-mesh, joka mallintaa erittäin karkeasti alkuperäistä mallia. Tämän perus-meshin osia voidaan rekursiivisesti jakaa pienempiin osiin ja saada tarkempi likiarvoistus. Desimaatiolla tarkoitetaan verteksien tai tasopintojen iteratiivista poistamista meshistä. Tätä käyttävät algoritmit täyttävät iteraatiokierroksella syntyneet aukot kolmioilla. Desimaatio on yleensä yksinkertaista toteuttaa ja sitä käyttävät algoritmit voivat olla erittäin nopeita. Verteksien yhdistämisessä sen nimen mukaisesti tesseloidusta mallista kaksi tai useampi verteksi yhdistetään toisiinsa, jolloin verteksien ja sitä myötä polygonien lukumäärä mallissa vähenee [9]. 2 AIKAISEMMAT ALGORITMIT Tässä luvussa käydään lävitse valikoidusti muutamia algoritmeja, jotka liittyvät edellä esille tuotuihin mekanismeihin ja jotka liittyvät läheisesti paperin varsinaiseen aiheeseen (PM), lukuunottamatta ehkä viimeisenä esitelty algoritmi, joka on pikemminkin vaihtoehtona ei-manifoldin syötteen tapauksessa. 2.1 Kolmiollisten meshien desimaatio (triangle mesh decimation) Kolmikon Schroeder, Zarge ja Lorenson kehittämä algoritmi [10] on yksi ensimmäisistä yleisiä polygonimalleja yksinkertaistavista tekniikoista [9]. Algoritmi on alun perin suunniteltu käytettäväksi poistamaan turhia pintoja, joita marching cubes niminen algoritmi usein polygonitarkkuuden suhteen synnyttää. Marching cubes (kehittäjinä William Lorensen ja Harvey Cline) algoritmi luo syötteenä saamastaan pistejoukosta renderöintiä varten suuren joukon kuutiollisia elementtejä, jotka likiarvoistavat lähtöjoukon kuvaamaa mallia mahdollistaen nopean ja yleisen, sekä myös tarkan renderöinnin [11]. Desimaatio-tekniikka suorittaa useita kertoja testikierroksen jokaiselle mallin verteksille, jonka mahdollisena tuloksena verteksi ja sitä myöten kaikki sitä käyttävät kolmiot poistetaan. Näin tapahtuessa malliin syntyvä aukko täytetään kolmioilla käyttäen jäljelle jääneitä ympäröiviä verteksejä. Kierrosten suoritus lopetetaan kun jokin ehto, tavallisesti tapahtunut prosenttimääräinen vähennys 3
verteksien suhteen alkuperäiseen malliin verrattaessa, on käynyt toteen. Testikierroksilla käytetty desimaatio-kriteeri, joka voi vaihdella erilaisille vertekseille, mittaa tavallisesti verteksin etäisyyttä johonkin keskiarvoistaen approksimoivaan tasopintaan [10]. Algoritmi säilyttää mallin topologian, vaikkakin hyväksyy syötteekseen myös eimanifoldeja malleja ja ulostulona saatu verteksien joukko on osajoukko alkuperäisestä verteksien joukosta [9]. Tekniikka sopii hyvin monenlaisille malleille ja on nopea, mutta se ei ole kovin tarkka ja käyttää paljon muistia [2]. 2.2 Polygonipintojen uudelleen rakennus (Re-Tiling polygonal surfaces) Tämä Greg Turkin kehittämä algoritmi [12] luo alkuperäisestä mallista LoD esityksen, joka säilyttää alkuperäisen topologian. Algoritmilla on rajoituksensa ja se sopii parhaiten kaarevien pintojen kuten orgaanisten muotojen, ihmisten ja eläimien, yksinkertaistamiseen [2]. Algoritmi aloittaa sirottelemalla satunnaisesti käyttäjävalinnaisen, ja siten LoD-tarkkuuden sanelevan, määrän pisteitä syötteenä saadun mallin pinnalle. Tämän jälkeen algoritmi pyrkii iteratiivisesti levittämään nämä pisteet pinnalle tasavälisesti, joka tapahtuu laskemalla pisteelle ns. nettotyöntövoima, jonka muut pisteet siihen etäisyytensä mukaan aiheuttavat. Tämän voiman aiheuttamana piste työntyy pitkin alkuperäistä tasopintaa etsiytyen tasapainotilaan. Kun tämä on jollakin tarkkuudella saavutettu, pisteet liitetään malliin tesseloimalla koko malli uudelleen. Viimeisenä vaiheena alkuperäiset verteksit tuhotaan mallista yksitellen ja syntyvät aukot täytetään kolmioilla uusia pisteitä käyttäen [12]. Useat laskentaintensiiviset vaiheet tekevät Turkin algoritmista monimutkaisen. Lisäksi sellaisenaan se tuottaa epätarkempia tuloksia kuin esimerkiksi Schroederin ja kumppanien edellä esitetty algoritmi [2]. Sillä kuitenkin periaattessa saavutetaan jatkuva LoD. 2.3 Meshien optimointi (Mesh optimization) Tämä ryhmän Hoppe, DeRose, Duchamp, McDonald ja Stuetzle kehittämä algoritmi [3] toimi pohjana tässä esityksessä varsinaisena aiheena olevalle PM algoritmille [4]. Syötteenä algoritmille toimii pistejoukko, josta aluksi kolmioidaan tarkka approksimaatio. Tämän jälkeen algoritmi optimoi globaalin energiafunktion turvin tapaa, jolla aloitusmallin yksinkertaistaminen etenee. Yksinkertaistus tapahtuu kolmen toimenpiteen avulla; yksi niistä vähentää reunan mallista, toinen on edelliselle käänteinen jakaen reunan kahtia ja kolmas vaihtaa reunan paikkaa kiinnittyen kyseessä olevien kahden kolmion niihin vertekseihin, joissa reuna ei aikaisemmin ollut kiinni (kahteen näistä palataan tarkemmin PM:n yhteydessä luvussa 3). Algoritmi etenee valitsemalla tiettyjen heuristiikkojen ja osin satunnaisuuden perusteella reunan mallista ja suorittaen sille jonkin edellä mainituista operaatioista sen mukaan, minimoituuko globaali energiafunktio ja onko toimenpide ylipäätään laillinen [3]. Ulostulona saatu verteksijoukko ei ole välttämättä osajoukko syötteestä ja muutenkin algoritmi sietää hyvin kohinaa. Algoritmi tuottaa hyvin korkeatasoisia yksinkertaistuksia, mutta on hidas. 2.4 Monitarkkuuksinen 3D likiarvoistus (multi-resolution 3D approximations for rendering complex scenes) Toisin kuin edellä tarkastellut algoritmit, tutkijoiden Rossignac ja Borrel kehittämä tekniikka ei vaadi manifoldia topologiaa syötteeltä. Se ei myöskään mallin topologiaa 4
välttämättä säilytä. Algoritmi pystyy siten operoimaan sellaisten mallien kanssa mihin edellä esitetyt ratkaisut eivät pure [2]. Algoritmi etenee jakaen mallia rajoittavan tilavuuden valinnaistarkkuuksiseen 3D-hilaan. Tämän jälkeen mallin kaikkien verteksien tärkeys arvioidaan. Suurissa tasopinnoissa kiinni olevat ja suuren kaarevuuden omaavat verteksit saavat suurimman painon. Tämän jälkeen kaikki hilan yhden alkion sisälle jäävät verteksit yhdistetään siihen verteksiin, jonka painoarvo alkion sisällä on suurin. Hilan resoluutio siis määrää syntyvän yksinkertaistuksen tarkkuuden. Algoritmi on hyvin nopea ja sitä voidaan soveltaa miltei mihin tahansa syötteeseen, mutta se säilyttää yksityiskohtia hyvin huonosti [9]. 3 PROGRESSIVE MESHES Hoppen kehittämässä PM-tekniikassa mesh esitetään rakenteena, joka sisältää pitkälle yksinkertaistetun perus-meshin, sekä sitä hienontavan operaatiosarjan. Tämä sarja lisää meshiin yksityiskohtia asteittain ja suurimmalla hienonnuksen asteella saavutetaan alkuperäinen meshi. Tekniikka on siten häviötön. PM esityksen rakennus tapahtuu esiprosessointivaiheessa ja on kolmivaiheinen. Ensin luodaan alkuperäisestä mallista perus-mesh. Tämän jälkeen edellisen vaiheen pohjalta luodaan perus-meshiä hienontava operaatiosarja. Lopuksi esityksen muoto yhdenmukaistetaan. Tuloksena on kuvakulmariippumaton, jatkuvatarkkuuksinen LoD - rakenne, josta haluttu LoD voidaan hakea ajonaikaisesti. Tekniikka perustuu monelta osin Hoppen ja kumppaneiden aikaisempaan työhön [3]. Ennen PM tekniikan vaiheiden tarkempaa käsittelyä käydään lävitse mesheille käytetty esitystapa. Koko tämä luku nojautuu vahvasti lähteeseen [4], eikä viitteitä siihen täten erikseen mainita (muun lähteen ollessa kyseessä tämä mainitaan). 3.1 Meshien esitys K V tuppeleina. Tuppeleilla tarkoitetaan matemaattisesti V = v v on meshin muodon määrittävä verteksisijaintien joukko R 3 avaruudessa. K (ns. simplicial complex) määrittää meshin verteksien, reunojen ja tasopintojen liitännäisyydet (l. suorat keskinäiset yhteydet). K koostuu verteksien joukosta { 1,...,m }, jotka on numeroitu V :n mukaan, sekä kolmenlaisista sen ei-tyhjistä osajoukoista (simplekseistä). 0-simpleksit { i} K ovat triviaalisti nimeltään verteksejä (vertex), 1-simpleksit { i, j} K reunoja i, jk, K tasopintoja (faces) [3]. Yleensä meshit esitetään (, ) määritettyä esitystä joukosta ja sen suhteista. Esityksessä {,..., 1 m} (edge) ja 2-simpleksit { } Geometrian lisäksi meshin esitykseen sisällytetään usein myös muita, ulkonäköä määrittäviä attribuutteja jotka voidaan jakaa diskreetteihin ja skalaareihin. Diskreetit attribuutit liittyvät meshin tasopintoihin ja niitä ovat mm. materiaalitunniste, joka määrää millä sävytysfunktiolla, kuten tekstuuripinnoitteella, pinta renderöidään. Näillä attribuuteilla saadaan aikaan mm. taitekohtia ja varjojen rajoja eri tasopintojen välille. Skalaareja attribuutteja ovat tavallisimmin diffuusi väri ( r, gb, ), normaalivektori,, u, v. On tavallista liittää skalaarit attribuutit ( x y z) n n n sekä tekstuurikoordinaatit ( ) meshin kulmiin eli verteksi-tasopinta, ( v, f ), tuppeleihin, jolloin saadaan esitettyä epäjatkuvuutta paremmin tapauksissa, joissa vierekkäisillä tasopinnoilla on eri sävytysfunktiot. Koska PM-esityksessä otetaan huomioon myös ei-geometriset attribuutit, esitetään mesh M = KV,, DS,, jossa K ja V ovat kuten edellä kuvattu, D on diskreettien tuppelina ( ) 5
attribuuttien joukko tasopinnoille {,, } joukko meshin kulmille ( v, f ). 3.2 Algoritmin pääpiirteet f = j k l K, ja S on skalaarien attribuuttien Alkuperäistä, yksinkertaistettavaa meshiä merkitään symbolilla ˆM. Syötteen on oltava kohdassa 1.1 esiintyneen keskustelun mukaista. PM esitys tästä muodostuu tuppelista 0 ( M,{ vsplit0,..., vsplitn 1} ), jossa M 0 on pitkälle yksinkertaistettu perus-mesh ja jälkimmäinen osa meshiä alkuperäiseen suuntaan hienontava operaatiosarja. M 0 muodostetaan soveltamalla useita kertoja peräkkäin meshin reunoja vähentävää edge collapse (ecol) muunnosta. Siihen nähden käänteinen operaatio on edge split (vsplit), jota käytetään hienonnuksessa. Muunnoksia havainnollistaa kuva 2. Kuva 2: Ecol ja vsplit ovat toisiinsa nähden käänteisiä muunnoksia, joiden avulla meshistä muodostetaan yksinkertaisempi/yksityiskohtaisempi. (H. Hoppe 1996, lähteestä [4], sivu 100) Muunnokset ottavat syötteenään neljä verteksiä ja näiden rajaamat tasopinnat. Ecol on parametrisessa muodossaan (,,,,, ) ecol vs vl vr vs fl f r. Ecol muunnos yhdistää meshistä kaksi verteksiä, jolloin verteksien lukumäärä vähenee yhdellä ja tasopintojen lukumäärä kahdella. Tuloksena saadun yhdistetyn verteksin parametrit (mm. sijainti) määrätään interpoloimalla lineaarisesti lähtöverteksien parametriarvoista. Tällä tapaa pystytään lähtö-meshin ja yksinkertaistetun meshin välille luomaan tarvittaessa visuaalisesti sulava muunnos, ns. geomorfi. Suoritettava ecol muunnos on laillinen ja siten tapahtuu vain mikäli meshin topologia säilyy. Suorittamalla sarja ecol operaatioita päädytään perus-meshiin. Valinnat siitä, kuinka monta kertaa, mihin verteksipareihin ja missä järjestyksessä muunnosta sovelletaan, vaikuttavat suuresti syntyvän likiarvoistuksen laatuun. Yksinkertainen ja nopea tapa on valita verteksit satunnaisesti, mutta korkeatasoisiin tuloksiin päästään vain jos pyritään optimoimaan jotain meshin ulkonäöstä kertovaa metriikkaa. Seuraavassa tutustutaan lähteessä [4] esitettyyn vaihtoehtoon. 3.3 Suoritusjärjestys ja energiafunktio algoritmissa Meshin yksinkertaistusta optimoidessa tässä tapauksessa minimoimaan energiafunktiota, joka kertoo kuinka tarkka likiarvoistus yksinkertaistettu mesh M on alkuperäisestä meshistä ˆM. Nopeammissa ja epätarkemmissa malleissa funktiot ovat yksinkertaisempia, mutta koska hyväksyttävän tarkkuuden arvioiminen on keskeistä korkeatasoisten mallien luomisessa, käydään seuraavassa lävitse tarkemmin paperissa [4] esitetty energiafunktio 6
E( M) = E ( M) + E ( M) + E ( M) + E ( M), (1) dist spring scalar disc M ja yhtälöä vakauttava jousienergiatermi M skalaariattribuuttien disc M meshin epäjatkuvuuskohtien geometrista tarkkuutta. Näihin palataan kohta tarkemmin. Jotta kaavalle (1) voidaan laskea arvoja, täytyy aluksi ˆM :n geometriasta sekä attribuuteista ottaa näytteitä vähintään jokaisen verteksin kohdalta, jotta saadaan vertailukohta energiafunktion arvon laskemiselle. missä etäisyyden energiatermi Edist ( ) Espring ( M ) mittaavat meshin geometrian tarkkuutta, Escalar ( ) tarkkuutta ja E ( ) Meshiä yksinkertaistettaessa seuraava kohde ecol muunnokselle valitaan siten, että kaikki lailliset verteksipari-ehdokkaat laitetaan prioriteettijonoon, jossa prioriteetti on muunnoksen arvioitu energiakustannus E = E E, (2) K ' K missä E K on energiafunktion (1) arvo ennen muunnosta ja E K ' sen jälkeen. Pienimmän prioriteetin omaava muunnos toteutetaan, jonka jälkeen muunnosympäristön reunojen prioriteetit lasketaan uudelleen kaavasta (2). Tätä iteraatiota jatketaan kunnes esityksessä on saavutettu haluttu syvyys (l. tarpeeksi yksinkertainen M 0 ). Koska energiaa pyritään minimoimaan, lasketaan E K ' edelleen kaavalla ( ) ( ) ( ) ( ) E = min E V + E V + E V, S + E V, (3) K ' dist spring scalar disc V, S missä luvun 3.1 mukaisesti V on meshin M verteksipaikkojen ja S skalaariattribuuttien joukko. Seuraavaksi kaavan (3) termit käsitellään yksityiskohtaisemmin, jotta syntyy käsitys, mitä ja miten ominaisuuksia on otettu huomioon. 3.3.1 Geometrian säilyvyyden tarkastelu Tarkemmin eriteltynä E ( ) dist V mittaa yhteenlaskettua meshin M pisteiden neliöityä etäisyyttä ˆM :stä ja se lasketaan kaavalla x ( b ) 2, (4) b E ( V) = min φ dist i v i i K i missä x i on meshin M piste ja b i tuntematon parametrisointi x i :n projektiolle meshissä ˆM. Parametrisointi lasketaan projisoimalla M :n pisteet meshin ˆM tasoon, jolloin φv ( b i ) on saavutetun parametrisoinnin avulla saatu ns. geometrinen realisaatio, eli piste joukosta V. Yhtälö minimoidaan ratkaisemalla ns. sparse linear least-squares 2 ongelma (yleistä muotoaan: min Ax b ). Tämän ongelman ratkaisemiseen on useita algoritmeja, mm. tietokoneohjelma Matlabin SLS laajennus [1]. Termin E ( ) spring V tarkoitus on vakiinnuttaa optimointiongelma ja se on yhtä kuin 2 spring ( ) = v j v k, (5) K E V κ { jk, } 7
missä v j ja v k ovat keskinäisen yhteyden omaavien verteksien paikkavektoreita meshissä M ja κ paino, joka määräytyy uudelleen jokaisen ecol operaation yhteydessä tarkasteltavan alueen verteksien ja tasopintojen lukumäärien välisen suhteen mukaan. Termi siis jarruttaa pitkien reunojen poistoa meshistä. Yhdessä Edist ( V ) ja Espring ( V ) mittaavat meshin geometrian säilyvyyden tarkkuutta ja laskettaessa kaavaa (3) unohdetaan aluksi komponentit Escalar ( V, S ) ja Edisc ( V ). Näin saadaan lausekkeen tälle osalle minimiratkaisun tuottavat verteksipaikka v s ja sen tuottava parametrisaatio b. i 3.3.2 Skalaariattribuuttien säilyvyyden tarkastelu Edellisessä kappaleessa kuvatun vaiheen jälkeen arvoja v s ja b i käyttäen minimoidaan E V, S, joka auki kirjoitettuna on muotoa termiä ( ) scalar 2 E ( V, S) = ( c ) x φ ( b ) 2, (6) scalar scalar i V i i missä vakiolla c scalar annetaan suhteellinen painoarvo skalaariattribuuttivirheen ( E scalar ) ja geometriavirheen ( E dist ) välille. Kaavassa (6) x i on ˆM :n pisteen x i kohdalta näytteistetty skalaariattribuutin arvo ja b i on siis aikaisemmin geometriavirheen minimoinnista saatu parametrisaatio. Minimoimalla kaavaa (6) samaan tapaan kuin kaavaa (4) saadaan verteksin v i skalaariattribuutille v s kaavaa (3) minimoiva arvo. Tämä termi saa aikaan sen, että verteksit joilla on suuri eroavaisuus skalaariattribuuteissa, saavat suuremman arvon tälle termille ja sitä myöten huonomman prioriteetin poistoa ajatellen. 3.3.3 Epäjatkuvuuskohtien säilyvyyden tarkastelu Koska meshin skalaari- ja diskreettiattribuutit aiheuttavat epäjatkuvuutta meshin pinnalla ja siten saattavat näkyä huomattavina piirteinä, on nämä epäjatkuvuudet hyödyllistä pyrkiä säilyttämään geometrisesti ja topologisesti. Kaavan (3) viimeisellä E V otetaan huomioon ensin mainittu. Tämä tapahtuu näytteistämällä ˆM :n terävistä kulmista pistejoukko E V kaavalla termillä ( ) disc X ja laskemalla ( ) disc disc x { }( b ) 2, (7) b v, v E ( V) = min φ disc disc i s t i i K i missä lasketaan summa jokaisen joukkoon X disc näytteistetyn pisteen φ b josta se on näytteistetty. etäisyydestä epäjatkuvuuskäyrään { }( ) vs, vt i x disc i neliöidystä Topologian muuntuminen ecol muunnoksen yhteydessä pystytään päättelemään tutkimalla muunnosympäristössä olevien terävien kulmien lukumäärää. Tarkka tapa tälle päättelemiselle esitetään paperissa [4] ja mikäli topologian todetaan muuttuvan, kaavan (2) mukaiseen energiakustannukseen lisätään vielä termi,{, } disc vs vt s t 2 X v v, (8) 8
missä X disc, { v, v } on niiden disc s t X :n pisteiden lukumäärä jotka projisoituvat { v, v } s t :hen. 3.4 Algoritmi ecol muunnosten jälkeen Kun ecol muunnoksien sarjalla ollaan saatu riittävästi yksinkertaistettu versio alkuperäisestä meshistä, talletetaan suoritetun ecol n-1 ecol 0 jonon perusteella muunnosjonolle käänteinen vsplit n-1 vsplit 0 sarja tiedostoon. Tämän sarjan avulla muodostettua yksinkertaistusta pystytään tarvittaessa hienontamaan. Myös muodostettu 0 perus-mesh M talletetaan tiedostoon. Lisäksi vsplit sarjan järjestys käännetään, jotta jatkossa muunnoksia suoritettaisiin loogisesti oikeassa järjestyksessä. Koska yksinkertaistettaessa esityksen verteksien ja tasopintojen indeksoinnit muuttuivat, muutetaan ne vielä vastaamaan alkuperäistä kuvausta jolloin saadaan yhdenmukainen, muokattava rakenne. Näin ollaan luotu meshistä PM esitys, jonka tehokkuuteen palataan luvussa 5. 4 NÄKYMÄRIIPPUVAISUUS Suurien kappaleiden, kuten maaston, yhteydessä toimii edellä esitetty PM tekniikka huonosti. Tämä siksi, että yhdelle meshille PM esityksessä on renderöitynä vain yksi LoD kerrallaan. Paperissa [5] esitetty parannus ottaa huomioon käytetyn näkymän (kuvakulma ja etäisyys). Monet osat mallista saattavat sijaita kokonaan näkymäikkunan ulkopuolella tai jotkut sen sisäpuolisista tasoista saattavat osoittaa poispäin katsomissuunnasta, jolloin niitä ei tarvitse renderöidä ollenkaan tai yhtä suurella tarkkuudella. Jotkut tasot taas voivat sijaita paljon lähempänä kuin toiset, jolloin eri osien mallintamisen tarkkuutta säätämällä renderöintiä saadaan nopeutettua. Aluksi käydään lävitse tekniikan vaatimat muutokset alkuperäiseen PM:ään, jonka jälkeen tutkitaan hienonnusehtoja ja -algoritmia. Tämä luku pohjautuu vahvasti lähteeseen [5], eikä viitteitä siihen täten erikseen joka kohdassa mainita. 4.1 Uuden esitystavan vaatimukset S Valikoidusti hienonnettu mesh M saadaan aikaiseksi, kun PM esityksen mukaiseen 0 perus-meshiin M sovelletaan osasarjaa S { 0,..., n 1} vsplit operaatiosarjasta. Jotta muunnokset voidaan suorittaa, on niiden oltava laillisia. Laillisuus pitää sisällään luvussa 3 käsiteltyjen asioiden lisäksi uusia ehtoja, jotka nousevat tarpeesta määritellä muunnokset uudelleen (kuva 3). Kuva 3: Vsplit ja ecol muunnosten uudet versiot näkymäriippuvaista lähestymistapaa varten. (H.Hoppe 1997, lähteestä [5] sivu 191) 9
vsplit vs vt vu fl fr fn0 fn 1 fn2 f n3, jossa ekplisiittisesti on mukana tavalliseen PM esitykseen verrattaessa isäverteksi v s ja lapsiverteksit v u ja v t sekä syntyvät/vähenevät ( f l ja f r ) ja niille viereiset tasopinnat ( f n0, f n1, f n2 ja f n3 ). Verteksiä tai tasopintaa joka löytyy käsittelyn kohteena olevasta S meshistä M kutsutaan aktiiviseksi. Uudet ehdot muunnoksien laillisuudelle ovat, että vsplitin tapauksessa v s, f n0, f n1, f n2 ja f n3 :n sekä ecolin tapauksessa v u ja v t :n pitää olla aktiivisia. Lisäksi jälkimmäisessä lueteltujen tasopintojen pitää olla vierekkäisiä tasopinnoille f l ja f r. Vsplitin uusi parametrisoitu muoto on (,,,,,,,, ) 4.2 Hienonnuksen ehdot Käytetyn näkymän parametreista riippuu, hienonnetaanko joitain meshin osia. Tämä päätetään kyselyfunktion qrefine( v s ) avulla, joka käyttää kolmea kriteeriä päätöstä tehdessään. Funktio on alla esitetty pseudokoodina (H.Hoppe 1997, lähteestä [5]). funktio qrefine( v s ) // hienonna vain jos se vaikuttaa pintaan joka on kuva-alassa jos kuva_alan_ulkopuolella( v s ) palauta epätosi // hienonna vain jos osa kohteena olevasta pinnasta näkyy katsojalle jos orientoitunut_poispäin( v s ) palauta epätosi // hienonna vain jos ruutuun projisoidun geometrian virhe ylittää toleranssin τ jos ruutuun_projisoidun_geometrian_virhe( v s ) τ palauta epätosi palauta tosi Ensimmäinen kriteeri saa aikaan, että kuva-alan (view frustum) ulkopuolisia osia meshistä ei hienonneta. Tämä testataan asettamalla jokainen verteksi vuorollaan keskipisteeksi valitun säteiselle pallolle ja mikäli pallopinta sijaitsee kokonaan kuvaalan ulkopuolella, palauttaa qrefine( v s ) epätoden. Toinen, pintojen orientaatioon liittyvä kriteeri, pyrkii yksinkertaistamaan alueita, jotka ovat orientoituneet poispäin katselunäkymästä. Vertailu tehdään pintojen normaalien avulla. Kolmas kriteeri, joka mittaa ruutuun projisoidun geometrian virhettä (screen-space geometric error), mukauttaa hienonnusta niin, että likiarvoistavan meshin M pinnan ja alkuperäisen meshin ˆM pinnan etäisyys toisistaan projisoituna katselutasoon on kaikkialla vähemmän kuin toleranssiarvo τ. 4.3 Algoritmin suoritus Edellä kuvattua qrefine( v s ) funktiota käytetään aina ennen kuvan renderöintiä soveltamalla sitä meshin aktiivisten verteksien listaan. Tämän listan läpikäynti toteutetaan adapt_refinement() proseduurilla, jossa jokainen verteksi testataan qrefine( v s ) funktiolla. Mikäli funktio palauttaa toden, suoritetaan pakotetusti vsplitmuunnos. Pakottaminen tässä tarkoittaa sitä, että mikäli muunnos ei olisi laillinen, muutetaan rakennetta niin että laillisuusehdot täyttyvät. Jos funktio taas sitä vastoin palauttaa epätoden, ja lisäksi jos verteksiltä löytyy vanhempi jolle ecol muunnos on laillinen ja jolle qrefine( v s ) funktio palauttaa epätoden, suoritetaan ecol muunnos verteksin v s vanhemmalle. Muussa tapauksessa verteksille ei tehdä mitään vaan adapt_refinement() proseduurin kontrollirakenne siirtyy listassa eteenpäin. 10
5 TOTEUTUKSIEN TEHOKKUUDEN ARVIOINTIA 5.1 PM esityksen tehokkuudesta Levytilantarve PM tekniikassa verrattuna alkuperäiseen malliin ei ole merkittävä, sillä perus-meshiä hienontavat vsplit muunnokset ovat aina paikallisia ja ne voidaan siten tallentaa lokaaleina muutoksina (ns. deltoina). Sen sijaan esiprosessointivaiheessa esityksen rakentamiseen tarvittava aika on pitkä, mallin monimutkaisuudesta riippuen minuuteista useisiin tunteihin (n. 150 000 tasopintaa sisältävän mallin yksinkertaistaminen PM esitykseen jonka perus-meshissä n. 1000 tasopintaa vei 150MHz R4400 128 MB koneelta 106 minuuttia). [4] Hitaus johtuu pitkälti energiafunktiollisesta optimoinnista, mutta PM:n yhteydessä voitaisiin siis käyttää muitakin virhemetriikoita, jos esimerkiksi ei tahdottaisi niin korkealaatuista jälkeä [9]. 5.2 Näkymäriippuvaisen laajennuksen tehokkuudesta PM:n näkymäriippuvaisessa laajennuksessa aikakompleksisuus adapt_refinement() A B proseduurille, jossa M muunnetaan M :ksi, on pahimmassa tapauksessa A B O ( V + V ), missä V on meshin M aktiivisten verteksien määrä. Jokainen ecol- ja vsplit-muunnos vie vakioajan. Tästä syntyvä aika on tavallisesti vain pieni osa mallin varsinaisesta renderöintiajasta. Muistivaatimukset näkymäriippuvaiselle PM esitykselle ovat luokkaa O ( V ˆ ), eli siis alkuperäisen meshin tasopintojen viemän määrän verran. [5] Kuvasta 4 näkyvän mallin tapauksessa näkymäriippuvainen PM esitys vähensi alkuperäiseen PM esitykseen verrattuna renderöityjen tasopintojen määrän 69 473:stä 10 528:aan ja kuvan päivitysnopeus nousi testilaitteistolla (150MHz R4400 128MB) 1,9:stä 6,7 kuvaan sekunnissa [6]. Kuva 4: Vasemmalla näkymä mallista, jonka renderöinti on suoritettu näkymäriippuvaisesti. Oikea puoli havainnollistaa käytettyä näkymää. (H. Hoppe 1997, kuva lähteestä [6]) 11
6 YHTEENVETO Geometrian yksinkertaistamista tarvitaan kun mallien monimutkaisuus ylittää laiteresurssit. PM-esitys on tarkkuudeltaan korkeatasoinen ja nopeudeltaan varsin kilpailukykyinen. Sen etuna on LoD mallin jatkuvatarkkuuksisuus, jonka vuoksi se pystyy sopeutumaan monenlaisiin ympäristöihin. Esityksen progressiivisuus tekee siitä hyvin soveltuvan esimerkiksi reaaliaikaiseen, kaistarajoitettuun siirtoon. Vaatimus syötemallien manifoldista topologiasta kuitenkin rajoittaa sen käyttöä, ja estää myös sitä kykenemästä kovin rajuun yksinkertaistukseen [9]. Koska PM esityksen esiprosessointiaika on pitkä, soveltuu tekniikka käytettäväksi parhaiten silloin kun tarvitaan muutamia korkeatasoisia malleja [9]. Näkymäriippuvaisuuden huomioon ottaminen nopeuttaa PM esitystä huomattavasti ilman kovin suuria kustannuksia. Mikäli ympäristössä on useita kompleksisia malleja, on syytä käyttää jotain suurempaan yksinkertaistukseen kykenevää LoD tekniikkaa. Lähteessä [6] esitetty toteutus PM:stä on ollut mukana Microsoft DirectX 5.0 tuotteessa, josta lähtien tekniikkaa on paranneltu tuotteen uudempiin versiohin [6]. VIITTEET [1] Adlers, M.; Björck, Å.; Matstoms, P. A Matlab toolbox for Sparse Least Squares problems. http://www.mai.liu.se/~milun/sls/ [2] Heckbert, P.S.; Garland, M. Survey of Polygonal Surface Simplification Algorithms. Computer Graphics (SIGGRAPH 97 notes), no.25, ACM Press, New York, 1997. [3] Hoppe, H.; DeRose, T.; Duchamp, T.; McDonald, J.; Stuetzle, W. 1993. Mesh Optimization. Computer Graphics (Proceedigs of SIGGRAPH 93), osa 27, ACM Press, New York, 1993, sivut 19-26 [4] Hoppe, H. Progressive Meshes. Computer Graphics (Proceedings of SIGGRAPH 96), osa 30, ACM Press, New York, 1996, sivut 99-108. [5] Hoppe, H. View-dependent Refinement of Progressive Meshes. Computer Graphics (Proc. of SIGGRAPH 97 ), osa 31, ACM Press, New York, 1997, sivut 189-198 [6] Hoppe, H. View-dependent Refinement of Progressive Meshes. SIGGRAPH 97 talk slides, http://www.research.microsoft.com/~hoppe/vdrpm.ppt [7] Hoppe, H. Efficient Implementation of Progressive Meshes. Computers & Graphics, osa 22, no. 1, 1998, sivut 27-36. [8] Kerlow, I.V. The Art of 3-D Computer Animation and Imaging, 2 nd edition. John Wiley & Sons Inc., New York, 2000. [9] Luebke, D.P. A Developer s Survey of Polygonal Simplification Algorithms. IEEE Computer Graphics and Applications, osa May/June, 2001, sivut 24-35 [10] Schroeder, W.; Zarge, J.; Lorenson, W. Decimation of Triangle Meshes. Computer Graphics (Proceedings of SIGGRAPH 92 ), osa 26, ACM Press, New York, 1992, sivut 65-70 [11] Sharman, J. The Marching Cubes Algorithm (by W. Lorensen and H. Cline). http://www.exaflop.org/marchcubes/ind.html [12] Turk, G. Re-Tiling Polygonal Surfaces. Computer Graphics (Proceedings of SIGGRAPH 92 ), vol.26, ACM Press, New York, 192, sivut 55-64 12