Pelimatematiikka ja ohjelmointi ATMOS, Mikkeli - 16.11.2012 Teemu Saarelainen, lehtori teemu.saarelainen@kyamk.fi GameLab gamelab.kyamk.fi & facebook.com/kyamk.gamelab
Sisältö Miksi pelimatematiikkaa? Esimerkkejä moderneista peleistä Perusongelmia Matemaattisia työkaluja Esimerkkejä ohjelmointityökaluista Mahdollisuuksia kehittämiseen AMK-opetuksessa
Miksi pelimatematiikkaa? Pelien laatuvaatimukset nousseet Laskentatehon jatkuva kasvu Fysiikkaperusteisten pelien suosio - AB video Pelit ovat miljardibisnes
Esimerkkejä moderneista peleistä TOP 10 Games Finland, week 42 (FIGMA) 1. NHL13 (trailer) 2. FIFA13 3. SKYLANDERS GIANTS 4. DISHONORED 5. ANGRY BIRDS TRILOGY 6. XCOM: ENEMY UNKNOWN 7. WRC: FIA WORLD RALLY CHAMPIONSHIP 8. RESIDENT EVIL 6 9. BORDERLANDS 2 10. CALL OF DUTY: MODERN WARFARE 3 TOP 10 Games U.S., September 12 (NPD) 1.MADDEN NFL 13 2.BORDERLANDS 2 3.FIFA SOCCER 13 4.NEW SUPER MARIO BROS. 2 5.GUILD WARS 2 6.NHL 13 7.WORLD OF WARCRAFT: MISTS OF PANDARIA 8.NCAA FOOTBAL 13 9.LEGO BATMAN 2: DC SUPER HEROES 10.BATTLEFIELD 3
EA
EA
RedLynx
Perusongelmia Pelit ovat reaaliaikaisia ja sisältävät paljon objekteja Frame-rate eli kuvien määrä sekunnissa yleensä 60+ Pelimaailmassa tapahtuvat muutokset pitää pystyä päivittämään kahden peräkkäisen framen välissä Aiheuttaa yleensä ongelmia, mm. epäjatkuvuuksia Laskennassa joudutaan yksinkertaistamaan asioita
Perusongelmia Törmäystarkastelu (collision detection) erilaisille muodoille Liikeradat ja rotaatiot Dynamiikka Erilaiset projektiot Hyvin paljon mielenkiintoisia matemaattisia ongelmia
Perusongelma: törmäystarkastelu Peliobjektit ovat usein monimutkaisia ja koostuvat todella monesta pienemmästä osasta (vertices, triangles) Todellisen fysiikkamallin tai törmäysmallin käyttäminen on epärealistista yksinkertaistetaan asioita Toivotaan, ettei pelaaja huomaa eroa ja pelimaailma käyttäytyy järkevästi Fysiikkamallin laskenta tehdään yleensä erillään ruudun päivityksestä, mutta silti muutokset ovat diskreettejä epäjatkuvuusongelmia
Perusongelma: törmäystarkastelu Esimerkki mesh colliderien käytöstä alkuperäisen meshin päällä. Lähde: Unity3D dokumentaatio, RigidBody.
Perusongelma: törmäystarkastelu Halutaan käyttää yksinkertaisia muotoja: Ympyrät, suorakaiteet, pallot, kuutiot, laatikot Toimivat hyvin esitarkasteluna ennen tarkempaa törmäystarkastelua Nopeita toteuttaa eivät vie paljon prosessoriaikaa
Perusongelma: törmäystarkastelu Sphere collisions d C1 r1 r 2 C 2 Törmäys tapahtuu, jos d < r 1 + r 2 Pistetulo on äärimmäisen kätevä, sillä (C 1 C 2 ) (C 1 C 2 ) r 1 + r 2 2
Perusongelma: törmäystarkastelu Bounding boxes Oletetaan 2 laatikkoa A ja B, joiden koordinaatit ovat (A x_min, A y_min, A z_min ), (A x_max, A y_max, A z_max ) ja (B x_min, B y_min, B z_min ), (B x_max, B y_max, B z_max )
Perusongelma: törmäystarkastelu Törmäyksen tarkastelu helppoa: Tarkistetaan jokaiselle akselille ja kummallekin laatikolle, onko toisen laatikon maksimi pienempi kuin toisen minimi. Jos pätee jollekin akselille, niin laatikot eivät leikkaa Nopea laskea, mutta ei välttämättä hyvä sovitus monimutkaisiin objekteihin tarvitaan useamman bounding boxin yhdistelmä
Perusongelma: törmäystarkastelu Periaatteessa minkä tahansa kahden monitahokkaan törmäystarkastelu on ratkaistavissa Lasketaan jokaiselle objektien väliselle pisteparille erotusvektori Jos erotusvektorijoukko sisältää origon, niin objektit törmäävät Matemaattisesti hieman raskaampi operaatio kuin edelliset
Perusongelma: koordinaattimuunnokset Peleissä lasketaan asioita monessa koordinaatistossa: maailman koordinaatit peliobjektien koordinaatit Tekoälyä ja pelilogiikkaa lasketaan usein objektin suhteessa toiseen objektiin Lisäksi on erilaisia niveliä (joints) ja räsynukkemalleja (ragdolls), joita tarvitsee päivittää Tarve siirtyä nopeasti maailman koordinaateista peliobjektien koordinaatteihin Tehdään affiinimuunnos eli yksinkertainen matriisioperaatio
Perusongelma: interpolointi Paljon käytetty peleissä (myös tweening, easing) Esim. erilaiset efektit ja siirtymät Helppo ja nopea laskea Esim. siirtymään pitäisi mennä aika t, tiedetään frame rate eli fps ja päivitetään paikka jokaisella framella (iteraatiolla) x=x+(target-x)/(t*fps) Voidaan varioida ja saada aikaan erilaisia efektejä: http://grapefrukt.com/f/games/juicy-breakout/
Matemaattisia työkaluja Trigonometriset funktiot Vektorit Matriisit Matriisioperaatiot - pistetulo!!! Interpolointi
Esimerkkejä ohjelmointityökaluista Unity3D pelimoottori + editori + Pallon liikuttelua, tehty (nopeasti) Unity3D:llä: http://www2.kyamk.fi/~atesa/ball_test/ Unityyn on saatavilla paljon erilaisia lisäosia, esim. Box2D, jota on käytetty myös Angry Birdsin fysiikkamoottorina
Esimerkkejä ohjelmointityökaluista Matlab (tai Scilab) Helppo tehdä matriisilaskentaa ja (yksinkertaista) grafiikkaa Voidaan tehdä pelejäkin (GUI-komponentit, yms.) Ei vaadi kovin paljon ohjelmointitaitoa Voidaan simuloida erittäin vaativiakin asioita
Esimerkkejä ohjelmointityökaluista Tavalliset ohjelmointikielet, esim. Java Kohtuullisen helppo tehdä pieniä pelejä Eclipse SDK tarjoaa hyvän editorin ja kehitysympäristön Javalle Tehdyt Java Applet-sovelmat voidaan laittaa myös verkkoon Myös valmista koodia pelien tekoon sekä jopa fysiikkamalleja löytyy Verlet-demo: http://verlet.googlecode.com/svn/verletdemo/demo/index.html
Mahdollisuuksia kehittämiseen AMKopetuksessa? Ainakin ohjelmointitekniikan opiskelussa voitaisiin yhdistää matematiikkaa ja peliohjelmointia Ammusten lentoradat, maan vetovoima, pallon liike, törmäykset, Oma pelimatematiikan kurssi KyAMK:ssa järjestetään peliohjelmoinnin sv:ssa: Perusasiat ja fysiikkamoottorin opiskelua
Mahdollisuuksia kehittämiseen AMKopetuksessa? Otetaan sopivat (peli)työkalut käyttöön matematiikan opiskelussa? Käytännön tekemistä Näkyviä tuloksia Lisää mielenkiintoa opiskeluun
Mahdollisuuksia kehittämiseen AMKopetuksessa? Peleissä on miltei rajattomat mahdollisuudet käyttää matematiikkaa ja fysiikkamallinnusta sekä tekoälyä (AI) Tällä hetkellä pystytään hyödyntämään jo varsin uskottavia fysiikkamoottoreita Tekoälyä ja algoritmeja vaativat mm. järkevästi toimivien itsenäisten agenttien tekeminen Nykyään peleihin voidaan tehdä useiden satojen agenttien joukkoja sekä pienempiä joukkoja, jotka pyrkivät toimimaan yhdessä Tuloksena on uskottavampia ja parempia pelejä!
Kiitos kysymyksiä? Teemu Saarelainen, DI / Lehtori KyAMK GameLab gamelab.kyamk.fi teemu.saarelainen@kyamk.fi Lähteet: http://www.essentialmath.com/ Unity3D Documentation Physics for Game Programmers, Squirrel Eiserloh, GDC 08 Math for Gameplay / AI, John O Brien, GDC 12 Solving Rigid Body Contacts, Richard Tonge, GDC 12
Rovio