**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 1990ndate 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. 1990ndate 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
------

1. ↑  Michael Enger (20.06.2013). "Game Engines: How do they work?". Vaadatud 03.11.2018.
2. ↑  "Game engines — how do they work?". Originaali arhiivikoopia seisuga 20.07.2019. Vaadatud 03.11.2018.
3. ↑  Cory Hampshire (15.09.2014). "Purpose of Game Engines". Vaadatud 03.11.2018.
4. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21  Jason Gregory (2009). *Game Engine Architecture*. 6000 Broken Sound Parkway NW, Suite 300: A K Peters/CRC Press. Lk 11 – 54.`{{raamatuviide}}`: CS1 hooldus: koht sisaldab numbrit (link)