Partikkelisysteemin suunnittelu ja ohjelmointi
Salomäki, Timo (2015)
Salomäki, Timo
Turun ammattikorkeakoulu
2015
All rights reserved
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-201504295490
https://urn.fi/URN:NBN:fi:amk-201504295490
Tiivistelmä
Opinnäytetyön tarkoituksena oli suunnitella ja toteuttaa Windows-pohjainen partikkelisysteemi. Partikkelisysteemi on tarkoitettu satunnaisuutta sisältävien luonnonilmiöiden ja erikoistehosteiden, kuten esimerkiksi sateen, sumun tai galaksien simuloimiseen. Ohjelmakoodi kirjoitettiin C#-ohjelmointikielellä käyttäen apuna MonoGame-ohjelmistokehystä ja Visual Studio -ohjelmankehitysympäristöä.
Työssä tarkasteltiin partikkelisysteemien historiaa ja perusrakennetta, jonka pohjalta toteutettiin yleiskäyttöinen ja rajapintojen avulla laajennettavissa oleva partikkelisysteemi. Perustoiminnallisuuden lisäksi toteutettiin erilaisia lähettimiä ja vaikuttimia, jotka mahdollistivat monimutkaisempien tehosteiden luomisen. Partikkelitehosteiden luomista ja muokkausta varten kehitettiin myös erillisenä sovelluksena toimiva Windows-pohjainen partikkelieditori, jota käyttämällä kaikki partikkelisysteemin ominaisuudet ovat testattavissa ilman ohjelmakoodin kirjoittamista. Editori sisältää partikkelisysteemiä reaaliaikaisesti ajavan livenäkymän, johon ominaisuuslistan kautta tehdyt parametrien muutokset välittyvät automaattisesti.
Itse partikkelisysteemin toteutuksen lisäksi työssä keskityttiin sen optimointiin ja suorituskyvyn testaukseen. Tätä varten kehitettiin työkalu, joka automatisoi partikkelitehosteiden muistinkäytön ja prosessorikuormituksen monitoroinnin. Paljon partikkeleja sisältävien tehosteiden kohdalla simulaation pullonkaulaksi osoittautui muistinkäyttö, jonka optimoimiseksi tehtiin erilaisia muutoksia ohjelmakoodiin ja arkkitehtuuriin. Testaustyökalu mahdollistaa myös uusien testien kirjoittamisen ja olemassa olevien laajentamisen eri rajapintoja hyödyntämällä.
Yksinkertaisen partikkelisysteemin luominen oli verraten helppo tehtävä, mutta jatkokehityksen ja laajennettavuuden mahdollistavat arkkitehtuurilliset ratkaisut osoittautuivat suorituskykyongelmien lisäksi työn suurimmiksi haasteiksi. Olio-ohjelmoinnin sääntöjä ja erilaisia suunnittelumalleja hyödyntämällä on kuitenkin mahdollista ylläpitää ja kehittää monimutkaistakin ohjelmakoodikokonaisuutta. Työn puitteissa hyödynnetyistä suunnittelumalleista objektiallas osoittautui toteutuksen haasteellisuudesta huolimatta yhdeksi tärkeimmäksi elementiksi suorituskyvyn kannalta. Luokan geneerinen toteutus mahdollistaa sen suoran uudelleenkäytön myös tulevissa projekteissa.
Työssä tarkasteltiin partikkelisysteemien historiaa ja perusrakennetta, jonka pohjalta toteutettiin yleiskäyttöinen ja rajapintojen avulla laajennettavissa oleva partikkelisysteemi. Perustoiminnallisuuden lisäksi toteutettiin erilaisia lähettimiä ja vaikuttimia, jotka mahdollistivat monimutkaisempien tehosteiden luomisen. Partikkelitehosteiden luomista ja muokkausta varten kehitettiin myös erillisenä sovelluksena toimiva Windows-pohjainen partikkelieditori, jota käyttämällä kaikki partikkelisysteemin ominaisuudet ovat testattavissa ilman ohjelmakoodin kirjoittamista. Editori sisältää partikkelisysteemiä reaaliaikaisesti ajavan livenäkymän, johon ominaisuuslistan kautta tehdyt parametrien muutokset välittyvät automaattisesti.
Itse partikkelisysteemin toteutuksen lisäksi työssä keskityttiin sen optimointiin ja suorituskyvyn testaukseen. Tätä varten kehitettiin työkalu, joka automatisoi partikkelitehosteiden muistinkäytön ja prosessorikuormituksen monitoroinnin. Paljon partikkeleja sisältävien tehosteiden kohdalla simulaation pullonkaulaksi osoittautui muistinkäyttö, jonka optimoimiseksi tehtiin erilaisia muutoksia ohjelmakoodiin ja arkkitehtuuriin. Testaustyökalu mahdollistaa myös uusien testien kirjoittamisen ja olemassa olevien laajentamisen eri rajapintoja hyödyntämällä.
Yksinkertaisen partikkelisysteemin luominen oli verraten helppo tehtävä, mutta jatkokehityksen ja laajennettavuuden mahdollistavat arkkitehtuurilliset ratkaisut osoittautuivat suorituskykyongelmien lisäksi työn suurimmiksi haasteiksi. Olio-ohjelmoinnin sääntöjä ja erilaisia suunnittelumalleja hyödyntämällä on kuitenkin mahdollista ylläpitää ja kehittää monimutkaistakin ohjelmakoodikokonaisuutta. Työn puitteissa hyödynnetyistä suunnittelumalleista objektiallas osoittautui toteutuksen haasteellisuudesta huolimatta yhdeksi tärkeimmäksi elementiksi suorituskyvyn kannalta. Luokan geneerinen toteutus mahdollistaa sen suoran uudelleenkäytön myös tulevissa projekteissa.