Kolmiulotteisten rakennusten proseduraalinen generointi generatiivisten kielioppien avulla Pauli Kostamo, Eero Kuurne Helsinki 11.12.2017 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
Sisältö 1 Johdanto... 1 2 Säännöllisyyttä kieliopeilla... 1 2.1 Generatiiviset kieliopit... 2 2.2 L-systeemi... 3 2.3 Jakokieliopit... 3 3 CGA shape... 4 3.1 Komentosarjakieli rakennusten mallintamiseen... 5 3.2 Pohdinta... 7 4 Yhteenveto... 8 Lähteet... 10
1 1 Johdanto Rakennukset ovat olennainen osa monen pelin ja elokuvan visuaalista ympäristöä, ja ne kertovat paljon ympäröivästä maailmasta ja sen taustatarinasta. Arkkitehtuuri, rakennusten käyttötarkoitukset, pienet yksityiskohdat ja elämisen jäljet luovat ympäristöstä eloisan ja tunnelmallisen. Samalla rakennusten on oltava kuitenkin sopivan ainutlaatuisia, mutta noudattaa samankaltaisuutta ja sopia samaan ympäristöön. Yksittäisessä nykyaikaisessa pelissä tai elokuvassa voi olla jopa tuhansia erilaisia rakennuksia, ja niiden mallintaminen käsin voi olla erittäin työläs prosessi. Esimerkiksi Superman Returns elokuvan kaupungin mallintaminen ihmisvoimin vei noin 15 henkilötyövuotta (Parish & Müller, 2001, s. 621). Automatisoimalla rakennusten mallintamista voidaan säästää huomattavia määriä henkilötyötunteja. Kun sisällöntuotantoa automatisoidaan algoritmien avulla, sitä kutsutaan yleisesti proseduraaliseksi (sisällön)generoinniksi tai 3D-mallien tapauksessa proseduraaliseksi mallintamiseksi. Rakennusten ja kaupunkien proseduraalista mallintamista voidaan käyttää muun muassa peleissä, elokuvateollisuudessa ja kaupunkisuunnittelussa nopeuttamaan tuotantoprosessia (Parish & Müller, 2001). Tutkielmassa käsitellään kolmiulotteisten rakennusten proseduraalista generointia ja generatiivisten kielioppien ja CGA shape komentosarjakielen soveltuvuutta rakennusten generointiin. Ensimmäisessä luvussa kerrotaan, mitä ovat generatiiviset kieliopit ja kuinka niitä voidaan hyödyntää rakennusten proseduraalisessa generoinnissa. Tämän jälkeen perehdytään tarkemmin Pascal Müllerin ja Peter Wonkan kehittämään, generatiivisiin kielioppeihin perustuvaan CGA shape -menetelmään, jota voidaan käyttää monipuolisten rakennusten generointiin. 2 Säännöllisyyttä kieliopeilla Generatiiviset kieliopit ovat yksi tärkeimmistä proseduraalisen sisällöngeneroinnin menetelmistä, ja niitä voidaan käyttää monien erilaisten asioiden generointiin. Esimerkiksi luolastoja, tarinakaavioita, kenttäkaavioita, kasveja, puita ja rakennuksia voidaan tuottaa generatiivisten kielioppien avulla (Shaker, Togelius ja Nelson, 2016). Tässä luvussa käsitellään ensin generatiivisia kielioppeja, minkä jälkeen perehdytään tarkemmin L-systeemiin ja jakokielioppeihin.
2.1 Generatiiviset kieliopit 2 (Formaalilla) kieliopilla voidaan kuvata merkkijonoista koostuvan formaalin kielen rakenne. Kielioppiin kuuluu aakkosto, joka määrittelee kielen merkkijonojen mahdolliset merkit, sekä säännöt, joiden perusteella merkkijonot muodostuvat aakkoston merkeistä. Kielioppeja voidaan käyttää tunnistamaan kuuluuko annettu merkkijono kieleen tai muodostamaan kieleen kuuluvia merkkijonoja. Kun kielioppi määritellään tavalla, jolla sitä voidaan käyttää kieleen kuuluvien merkkijonojen muodostamiseen, sitä kutsutaan generatiiviseksi kieliopiksi (Chomsky, 1986). Yleensä kieliopeissa aakkosto jaetaan kahteen joukkoon: muuttujasymboleihin ja päätesymboleihin (Shaker, Togelius ja Nelson, 2016, s. 74). Muuttujasymbolit eli muuttujat ovat merkkejä, joita säännöt muuttavat, ja niitä kuvataan yleensä isoilla kirjaimilla. Päätesymbolit ovat merkkejä, jotka eivät muutu enää, kun ne on lisätty merkkijonoon, ja niitä kuvataan yleensä pienillä kirjaimilla. Kieliopin tuottama merkkijono koostuu pelkistä päätesymboleista. Säännöt esitetään usein muodossa A x y z, missä A on muuttuja ja x, y ja z ovat mielivaltaisia jonoja muuttujia ja päätesymboleja, joiksi muuttuja A voidaan muuttaa yhdellä iteraatiolla (Sipser, 2006, s. 102-103). Merkkijonon tuottaminen alkaa aina alustamalla merkkijono lähtösymbolilla, jota kuvataan yleensä S-kirjaimella. Tämän jälkeen algoritmi käy merkkijonon läpi jokaisella iteraatiolla ja kieliopin tyypistä riippuen soveltaa sääntöjä joko yhteen, useampaan tai kaikkiin merkkijonon muuttujiin kerralla, muuttamalla säännön vasemmalla puolella olevan muuttujan säännön oikealla puolella olevaksi merkkijonoksi. Jokaisen iteraation seurauksena käsiteltävä merkkijono muuttuu joko osittain tai kokonaan. Esimerkissä 1 havainnollistetaan yksinkertaisen kieliopin toimintaa. Esimerkin 1 kielioppi on yhteydetön ja epädeterministinen kielioppi eli muuttujat eivät ole riippuvaisia ympäröivistä merkeistä ja muuttujia muutetaan yksi kerrallaan vapaavalintaisesti. Muuttujia ovat S, A ja B, ja päätesymboleita a, b ja c. Esimerkissä 1 on kuvattu kieliopin säännöt ja merkkijonon "cabab" muodostaminen vaiheittain (eli merkkijonon "cabab" johto). S ca A AB a B BA b S ca cab caba cabab cabab cabab cabab cabab Esimerkki 1: Kieliopin säännöt ja merkkijonon cabab johto.
3 Kieliopin muodostamia merkkijonoja voidaan käyttää muodostamaan kaikenlaista sisältöä, jossa merkkijonon merkit muutetaan vastaamaan erilaisia sisällön elementtejä. Myöhemmissä luvuissa esitellään tarkemmin käytännön sovelluksia. 2.2 L-systeemi Rakennuksia ja kaupunkeja generoidaan usein L-systeemin johdannaisilla kielioppiperustaisilla malleilla (Parish & Müller, 2001). L-systeemi on alunperin kehitetty matemaattiseksi malliksi kasvien mallintamista varten (Prusinkiewicz & Lindenmayer, 1996, s. 1). L-systeemi on formaali kielioppi, joka perustuu uudelleenkirjoitukseen. Uudelleenkirjoituksessa alkuarvon toteuttamaa merkkijonoa iteroidaan erilaisten sääntöjen avulla, uudelleenkirjoittaen merkkijono kokonaan, luoden uusi merkkijono vanhan tilalle jokaisella iteraatiolla. Uudelleenkirjoittamisesta johtuen se sopiikin erittäin hyvin ajan funktiona kasvavien mallien mallintamiseen. Yksinkertaisimmillaan L-systeemi on yhteydettömässä ja deterministisessä DOL-systeemissä (Prusinkiewicz & Lindenmayer, 1996, s. 1). Ohessa esitetyssä esimerkin 2 DOL-systeemissä alkuarvona S on "b", säännön 1 mukaan merkkijono "a" uudelleenkirjoitetaan merkkijonolla "ab" ja säännön 2 mukaan merkkijono "b" uudelleenkirjoitetaan merkkijonolla "a". S: b 1: a ab 2: b a b a ab aba abaab Esimerkki 2: Kieliopin säännöt ja merkkijonon "abaab" johto. Oheisessa esimerkissä 2 on alkuarvolla "b" iteroitu sääntöjä 1 ja 2 neljä kertaa, ja saatu vastaukseksi merkkijono "abaab". 2.3 Jakokieliopit Perinteisen L-systeemin avulla on vaikea saada mallinnettua rakennuksia, sillä rakennuksilla on useita rajoitteita kokonsa ja mallinsa suhteen (Wonka, Wimmer, Sillion, & Ribarsky, 2003, s. 669). Wonka et. al. ovat tutkineet työssään Instant Architecture jakokielioppien (englanniksi split grammar) toimimista rakennusten mallintamisessa. Jakokieliopin mallissa rakennus yksinkertaisesti jaetaan lohkoihin käyttämällä jotain kielioppia. Syntyneet lohkot jaetaan uudelleen
4 lohkoiksi seuraavan kieliopin mukaan. Tätä iterointia jatketaan edelleen pienempiin lohkoihin uusilla kieliopeilla. Missä tahansa kieliopissa voi olla lohkon iteraation päättävä lopetusmerkki. Kun kaikissa muodostuneissa lohkoissa on vain lohkon iteraation päättäviä lopetusmerkkejä, rakennuksen raakamalli on valmis (Wonka et al., 2003, s.671-672). Kuvassa 1 on esitettynä jakokieliopilla toteutettu julkisivu. Kuvassa 1 nähdään kuinka jokaisen iteraation jälkeen otetaan käyttöön uuden kieliopin säännöt, kunnes jäljellä on vain lopetusmerkkejä. Kuva 1: Jakokieliopilla ja L-systeemillä toteutettu julkisivu. Kuvassa lopetusmerkit on merkitty suluin. 3 CGA shape Kieliopeilla itsellään käsitellään vain merkkijonoja. Jotta niitä voitaisiin hyödyntää rakennusten generoinnissa, on merkkijonojen ympärille rakennettava toteutus, joka muuttaa niiden avulla saavutetun säännöllisyyden halutuiksi elementeiksi. CGA shape on eräs käytännön toteutus, jonka avulla voidaan muodostaa rakennusten ulkomuodot ja generoida niihin julkisivu jakokielioppien avulla. Tässä luvussa käsitellään CGA shapen teoriaa ja esitetään muutamia havainnollistavia esimerkkejä.
3.1 Komentosarjakieli rakennusten mallintamiseen 5 CGA shape on Pascal Müllerin, Peter Wonkan et. al. kehittämä muotokielioppien (englanniksi shape grammar) kanssa käytettävä komentosarjakieli rakennusten proseduraaliseen mallintamiseen. Se on sisällytetty muun muassa CityEngine-sovelluskehykseen (Esri, 2008). CGA shapessa on pyritty syntaksin helppolukuisuuteen (Parish & Müller, 2001). Syntaksi on esitetty seuraavassa muodossa: id: edeltäjä: ehto seuraaja: todennäköisyys CGA shapessa jokainen objekti lasketaan heksaedrin perusteella, ja objekti voidaan sijoittaa vapaasti koordinaatistoon. CGA shapen muotokielioppi vaatii ennalta määrätyn joukon kolmiulotteisia malleja, joita yhdistelemällä rakennus saadaan mallinnettua. Objektin koko ilmoitetaan komennolla S(x,y,z). Kuvassa 2 objektin koon parametrit on ilmoitettu parametreilla Sx, Sy ja Sz. Objektia voidaan myös kääntää jonkin akselin suhteen paremetreilla Rx, Ry ja Rz, ja objektin sijainti koordinaatistossa määritellään translaatiovektorin T(x,y,z) avulla. Objektin muoto haetaan tietokannasta komennolla I("objektin nimi"). Kuvassa 3 on esitetty yksi CGA shapen sääntö, jossa kahdella ennalta määritetyllä mallilla muodostetut kolme objektia on sijoitettu koordinaatistoon.
6 Rakennusta mallinnettaessa jokaisen lopetusmerkittömän objektin kohdalle generoidaan sääntöjen perusteella uusia objekteja. Paikalla ollut objekti merkataan inaktiiviseksi, jolloin sitä ei piirretä, mutta objektia ei poisteta muistista. Tämä mahdollistaa täyden iteraatiohistorian rakennukselle. Historiatiedon perusteella on helppo selvittää kohtaako joku objekti jonkin toisen objektin. CGA shape sisältää vain muutaman peruskomennon, joiden avulla on mahdollista mallintaa hyvin monenlaisia rakennuksia. Jokainen CGA shapen luoma objekti sisältää tiedon omasta aktiivisuudestaan (objektin tila voi olla joko aktiivinen tai inaktiivinen). Objektilta voidaan myös kysyä kohtaako se jonkin toisen objektin, ja missä kohdassa tämä kohtaaminen tapahtuu. Objekti voidaan jakaa aliobjekteiksi Subdiv-komennolla. Repeat-komennolla taas voidaan täyttää haluttu alue yhdentyyppisillä elementeillä. Kuvassa 4 on esitetty objektin jakaminen Subdiv-komennolla, ja kuvassa 5 objektin täyttäminen Repeat-komennolla. Täytettäesä aluetta uusilla objekteilla, objektin koko voi olla joko staattinen tai relatiivinen. Relatiivisten objektien koko merkitään numeerisella arvolla ja kirjaimella r. Niiden lopullinen koko lasketaan täytettävän alueen tilasta, kun siitä on vähennetty staattisten objektien koko. Objekteille voidaan asettaa myös leikkausviivoja (snap line) ja leikkauskappaleita (snap shape). Kun objekti täytetään aliobjekteilla, leikkausviivaa lähimpänä oleva kahden objektin raja muokataan leikkausviivan kohdalle. Kuvassa 6 on esitetty leikkausviivan toiminta. Leikkausviivoilla voidaan estää esimerkiksi puolikkaan ikkunan päättyminen rakennuksen kulmaan.
7 Kuva 6: Vasemmalla objekti jaettu identtisen kokoisiin aliobjekteihin. Oikealla lähin objektien reuna sijoitettuna leikkausviivan kohdalle. Molemmissa kuvissa punainen leikkausviiva on samassa kohdassa. Kolmiulotteinen objekti voidaan jakaa kaksiulotteisiksi pinnoiksi Comp-komennolla. Tällä voidaan luoda esimerkiksi rakennukselle erilaisia julkisivua riippuen millä laidalla rakennusta ollaan. Kuvassa 7 on havainnollistettu valmiita CGA shapella luotuja rakennuksia, joille on generoitu julkisivut. Kuva 7: CGA shapella generoituja rakennuksia (Müller, Wonka, Haegler, Ulmer & Van Gool, 2006). 3.2 Pohdinta CGA shape soveltuu muokattavuutensa ansiosta erittäin hyvin monenlaisten rakennusten generointiin. Käyttäjän on mahdollista luoda erittäin laajoja sääntökokonaisuuksia, joiden avulla voidaan mallintaa lähes minkälaisia rakennuksia tahansa. Leikkausviivojen ansiosta voidaan myös välttää julkisivun elementtien joutuminen väärään paikkaan, mikä on yleinen ongelma rakennusten generoinnissa (Müller, Wonka, Haegler, Ulmer ja Van Gool, 2006). Koska CGA shape ei poista korvattuja objekteja, rakennusten mallintamiseen tarvittava muistin määrä on suurempi kuin tavassa, jossa inaktiiviset elementit poistettaisiin muistista. Kuvan 7 vasemman puoleisen rakennuksen generointi tuottaa 50 000 monikulmiota, ja sen generointiin kulunut aika vuonna 2001 on ollut noin sekunti (Parish & Müller, 2001). Mikäli myös rakennuksen yksityiskohdat generoitaisiin CGA shapen avulla, monikulmioita jouduttaisiin
8 generoimaan moninkertainen määrä. Tämä olisi hyvin tehotonta. Tämän takia rakennusten yksityiskohdat kannattaakin generoida esimerkiksi valmiiksi luoduilla kolmiulotteisilla malleilla. Müller et. al. kertovat myös, että vaikka CGA shapella voidaan generoida rakennuksia GIS ainestosta, näin generoidut rakennukset mallintuvat usein huonosti, ja että proseduraalinen generointi luo usein epäuskottavan näköisiä rakennuksia (Parish & Müller, 2001, s. 622). Tämä on yleinen ongelma rakennusten proseduraalisessa generoinnissa, ja usein parhaat lopputulokset saadaan ensin generoimalla rakennus ja sen jälkeen muokkaamalla niitä vielä käsin (Hendrikx, Mejer, Van Der Velden, Iosup, 2013). 4 Yhteenveto Nykyaikaisissa peleissä ja elokuvissa voi olla jopa tuhansia erilaisia rakennuksia. Uskottavan ympäristön luomiseksi rakennusten tulisi olla sopivan samankaltaisia, mutta kuitenkin ainutlaatuisia. Niiden mallintaminen ihmisvoimin voi olla erittäin työläs prosessi. Automatisoimalla rakennusten mallintamista algoritmien avulla voidaan säästää huomattavasti aikaa ja vaivaa. Sitä kutsutaan rakennusten proseduraaliseksi generoinniksi tai proseduraaliseksi mallintamiseksi. Rakennuksia ja kaupunkeja generoidaan usein kielioppiperustaisilla malleilla. Kielioppien avulla voidaan kuvata merkkijonoista koostuvan formaalin kielen rakenne, ja niitä voidaan käyttää tunnistamaan kuuluuko annettu merkkijono kieleen tai muodostamaan kieleen kuuluvia merkkijonoja. Kielioppeihin kuuluu merkeistä koostuva aakkosto ja säännöt, joiden avulla merkkijonoja muodostetaan. Monet rakennusten proseduraalisen generoinnin ratkaisut perustuvat Aristid Lindenmayerin kehittämään L-systeemiin, joka on alunperin kasvien mallintamista varten kehitetty formaali kielioppi. L-systeemi perustuu koko merkkijonon uudelleenkirjoittamiseen jokaisella iteraatiolla. Tästä johtuen se sopii erityisesti ajan funktiona kasvavien mallien mallintamiseen. Muita suosittuja kielioppeja ovat esimerkiksi jakokieliopit julkisivujen mallintamiseen ja muotokieliopit rakennuksen muotojen mallintamiseen. CGA shape on yksi hyvä käytännön esimerkki kielioppeihin perustuvasta rakennusten generoinnin menetelmästä. Se on Pascal Müller, Peter Wonkan et. al. kehittämä muotokieli-
9 oppien kanssa käytettävä komentosarjakieli, jota on käytetty muun muassa CityEngine-sovelluskehyksessä. CGA shapessa rakennus muodostetaan ensin yhdistelemällä yksinkertaisia kolmiulotteisia muotoja muotokieliopilla, minkä jälkeen muotojen päälle generoidaan jakokieliopin avulla julkisivu. CGA shape soveltuu muokattavuutensa ansiosta hyvin monenlaisten rakennusten generointiin, ja sen avulla generoidut rakennukset ovat parhaimmillaan erittäin uskottavan näköisiä. Rakennusten generointi vie kuitenkin paljon muistia, ja julkisivujen yksityiskohdat kannattaa generoida käsin tehdyillä 3D-malleilla. CGA shapea ja muita proseduraalisen rakennusten generoinnin tekniikoita käytetäänkin usein erityisesti apuna generoimaan alustavia rakennuksia, joita voidaan muokata käsin uskottavamman näköisiksi. Rakennusten proseduraalinen generointi voi auttaa rakennusten tuottamisessa, ja sen avulla voidaan säästää aikaa ja vaivaa. Olemassa olevilla tekniikoilla on kuitenkin vaikea saavuttaa rakennuksia, jotka olisivat yhtä uskottavia kuin käsin mallinnetut. Tulevaisuudessa mielenkiintoisen tutkimuskohteen luovat neuroverkot ja tekoäly, joiden avulla proseduraalisesta mallintamisesta saadaan todennäköisesti huomattavasti uskottavamman näköistä, kuin nykyisillä tekniikoilla.
Lähteet 10 Chomsky, N (1986). Knowledge of Language. Westport, CT: Greenwood Publishing Group. Esri (2008). CityEngine. Lainattu 11.12.2017: http://www.esri.com/software/cityengine Hendrikx, M., Mejer, S., Van Der Velden, J., Iosup, A. (2013). Procedural content generation for games: A survey. ACM Transactions on Multimedia Computing, Communications, and Applications, 9(1). Müller, P., Wonka, P., Haegler, S., Ulmer, A., Van Gool, L. (2006). Procedural modeling of Buildings. ACM Transactions on Graphics (TOG) - Proceedings of ACM SIGGRAPH 2006, 25(3), 614-623. Parish, Y. I. H., & Müller, P. (2001). Procedural modeling of cities. Proceedings of the 28th annual conference on computer graphics and interactive techniques, 301 308. New York, NY, USA: ACM. Prusinkiewicz, P., & Lindenmayer, A. (1996). The algorithmic beauty of plants. New York, NY, USA: Springer-Verlag New York, Inc. Shaker, N., Togelius, J. & Nelson, M. (2016). Procedural Content Generation in Games: A Textbook and an Overview of Current Research. Cham, CH: Springer. Sipser, M., Togelius, J. & Nelson, M. (2006). Introduction to the Theory of Computation, (Second Edition). Boston, MA: Thomson Course Technology. Wonka, P., Wimmer, M., Sillion, F., & Ribarsky, W. (2003, heinäkuuta). Instant architecture. ACM Trans. Graph., 22 (3), 669 677.