Mängumootor

**Mängumootor** on tarkvararaamistik arvutimängude loomiseks. Harilik mängumootor pakub võimalusi kasutaja sisendi saamiseks, failide laadimiseks, graafika renderdamiseks, helide esitamiseks, füüsika simuleerimiseks, animatsioonideks, võrgunduseks, lihtsa graafilise kasutajaliidese loomiseks ja skriptimiseks.  

## Eesmärk
Mängumootori eesmärk on pakkuda mänguarendajale tarkvara arendamise tööriistu, tehes sellega mängu loomise protsess lihtsamaks. Samuti muudab see kogu mänguarenduse kiiremaks ja ökonoomsemaks: kasutatakse juba varem valmis digitaalvara, et teha midagi uut. 

## Mängumootori mõiste tekkimine
Mängumootori mõiste tekkis 1990. aastate keskel, viidates populaarsele arvutimängule "Doom". Mängu "Doom" struktuur loodi hästi määratletud kihtidest: põhitarkvarakiht (kolmemõõtmeline graafika renderdamise süsteem, kokkupõrgete avastamise süsteem, helisüsteem), kunstivarad, mängumaailmad ja mängureeglid. Selline struktuur sai mänguarendajatele väga oluliseks, sest sai luua uusi kunstivarasid, mängumaailmaid ja mängureegleid ilma, et oleks pidanud looma uut põhitarkvara. See andis võimaluse väikestele iseseisvatele arendajatele luua mänge, muutes juba valmisolevaid mänge originaalmängu loojate tööriistu kasutades. 1990. aastate lõpus disainiti mängud "Quake III Arena" ja "Unreal" just sellisel taaskasutuse põhimõttel. Nende mootorid olid väga hästi kohandatavad tänu skriptimiskeeltele nagu Quake C. Sellega tekkis ka originaalloojatele uus tuluallikas, litsentseerides oma loodud tarkvara teistele.  

## Mängumootor ja mäng
Mängumootorit ja mängu on vahel raske üksteisest eristada. Neil saab vahet teha andmepõhise arhitektuuri olemasolu järgi: loeme tarkvara mängumootoriks, kui see on laiendatav ja kasutatav mängude loomiseks ilma suurte muudatusteta. Sellegipoolest ei saa ka selle eristusviisiga väga täpselt otsustada, kas tegu on mängu või mängumootoriga, sest igal mängul ja mängumootoril on oma kindel taaskasutamise ulatus.  

## Mängumootor ja mängužanr
Erinevad mängužanrid nõuavad erinevaid komponente, mis muudab mängumootorid pisut žanripõhiseks. Siiski saab mõne mängumootoriga teha vägagi erinevatest žanritest arvutimänge. 

## Mängumootori komponendid
Mängumootor koosneb tavaliselt tööriistade komplektist ja käituskeskkonnast. Mängumootori arhitektuur koosneb kihtidest. 

### Käituskeskkond

#### Sihtriistvara kiht
Kõige madalamal kihil asub sihtriistvara, mis esitab riistvara, millel mäng töötab. Mõned näited on Microsoft Windowsi ja Linuxi baasil töötavad personaalarvutid, Apple'i iPhone ja Macintosh, Microsoft Xboxi tootepere, Sony Playstationi tootepere ja Nintendo mängukonsoolide pere. 

#### Seadmete driaverite kiht
Järgmisel kihil on seadmete draiverid, mille ülesanne on hallata riistvara ressursse ning kaitsta operatsioonisüsteemi ja mängumootori ülemisi kihte, et need saaksid andmeid ainult vajalikelt riistvara seadmetelt õigesti. 

#### Operatsioonisüsteemi kiht
Kolmandal kihil on operatsioonisüsteem, mis korraldab kõikide protsesside täitmist. Kuna mäng ise on protsess süsteemis, siis see peab arvestama operatsioonisüsteemide eripäradega (kuidas jagatakse jooksvatele protsessidele tööaega). 

#### Kolmandate poolte arendustarkvara ja muu vahetarkvara kiht
Järgmine kiht on kolmandate poolte arendustarkvara ja muu vahetarkvara, kuna paljud mängumootorid kasutavad mängu tegemiseks juba valmistatud tehnoloogiaid. Graafika renderdamine, põrked ja füüsika, animatsioonid, tehisintellekt on näited kolmandate poolte arendustarkvaradest, mis on kasutusel mängumootorite juures. 

#### Platvormist sõltumatu kiht
Paljud mängud peavad töötama erinevatel platvormidel: see annab turul rohkem võimalusi. Seepärast on enamikul mängumootoritel platvormist sõltumatu kiht, mis hoolitseb selle eest, et mäng töötaks sarnaselt eri platvormidel. 

#### Põhisüsteemi kiht
Põhisüsteemi kiht kujutab endast kasulikke tarkvarakomponente: matemaatika teek, mäluhaldus, juhuarvude tekitaja jne. 

#### Ressursihalduri kiht
Ressursihalduri kiht on vajalik, sest tagab ühtse liidese juurdepääsuks kõikidele mänguvaradele ja mootori muudele sisendandemetele. Erinevad mängumootorid realiseerivad ressursihalduse erinevalt: mõnel on selle jaoks kindel keskne süsteem (varad pakitud ühtsesse arhiivi, klassi), teised aga lubavad programmeerijal kasutada tooreid faile ilma lisasüsteemita. 

#### Renderdamise mootori kiht
Renderdamise mootor on mängumootori juures mängu visualiseerimiseks suurim ja keerulisim süsteem. Seda saab ehitada üles eri viisidel – ühtset viisi ei ole, kuid paljud modernsed renderdamise mootorid jagavad sarnaseid disaini põhimõtteid. 

#### Profileerimis- ja silumistööriistade kiht
Mänguarendajatel peab olema võimalus profileerida ja siluda oma mängu, sest mängu jõudlus ja töökindlus on väga tähtsad. 

#### Põrgete ja füüsikasimulatsiooni kiht
Ilma põrgeteta oleks mängumaailma võimatu mõjutada ning kaoks mängu mõte. Mõned mängud pakuvad ka reaalset või osaliselt reaalset füüsikasimulatsiooni, et mängu paremaks muuta. Väga vähesed mänguarendajad loovad enda põrgete ja füüsikasimulatsiooni süsteemi. 

#### Animatsioonide kiht
Mängu tegelaste või muude objektide animeerimiseks on mängumootoril samuti vaja vastavat süsteemi, mida paljud mängumootorid pakuvad. 

#### Inimliidese seadmete kiht
Mängu mängimiseks on vaja saada kasutajapoolne sisend. Mõnikord võib mäng anda ka inimliideste seadmetele väljundi, mis on näiteks mängukontrolleri puhul vibreerimine. 

#### Helikiht
Helid on mängule sama tähtis nagu graafika, kuid tihtilugu ei pöörata sellele nii palju tähelepanu kui graafikale. Sellegipoolest on see mängumootori seisukohalt hädavajalik komponent. 

#### Võrgundus
Võrgunduse kiht on väga tähtis mitmikmängudele, mis tähendab, et samas mängumaailmas saavad mängida mängijad mitmekesi. 

#### Mängu mängimise alussüsteemide kiht
Mängu mängimine tähendab neid tegevusi, reegleid ja mehaanikaid mängumaailmas, mis on tavaliselt implementeeritud kas programmeerimiskeeles, milles on kirjutatud mängumootor, mõnes muus kõrgtaseme keeles või mõlemas. 

#### Mänguspetsiifiliste alamsüsteemide kiht
Kõige kõrgem kiht mängumootori juures on mänguspetsiifiliste alamsüsteemide kiht, sest see hõlmab mängu loogikat ja funktsioone. 

### Tööriistad ja digitaalvarade konveier
Mängumootor peab suutma ja oskama kasutada väga palju andmeid mänguvara, konfiguratsioonifailide, helifailide, skriptide jms kujul. Samuti on vajalik, et mängumootor võimaldaks mänguarendajal ehitada mängumaailma ja seda ka meeles pidada. 

## Viited