Videomängu isomeetriline graafika

**Videomängu isomeetriline graafika** on graafikaliik, mida kasutatakse videomängudes ja pikslipõhises kunstis, milles vaateväli on sellise nurga all, mis näitab keskkonnas tahke, mis pealtvaate või külgvaate perspektiivis muidu nähtavad ei oleks, jättes sedasi objektidest kolmedimensioonilise mulje.

Vaatamata nimetusele ei ole isomeetriline arvutigraafika päris isomeetriline, st *x*-, *y*- ja *z*-teljed ei ole ilmtingimata teineteise suhtes 120° nurga all. Selle asemel kasutatakse erisuurusi nurki. Dimeetriline projektsioon, üks paralleelprojektsiooni vorme, milles pikslid on suhtega 2:1, on kõige tüüpilisem. Mõisted 3/4 perspektiiv, 2.5D ja pseudo-3D on mõnikord samuti kasutuses, kuigi need mõisted võivad muudes kontekstides omada teistsugust tähendust.

Isomeetrilise projektsiooni populaarsus hääbus, kui kasutusele tulid võimsamad 3D-graafikasüsteemid ning mängudes hakati panema rohkem rõhku sündmustele ja individuaalsetele tegelastele. Sellegipoolest on isomeetrilist projektsiooni kasutavad mängud viimastel aastatel taas esile kerkinud, eriti portaalis Kickstarter.

## Ülevaade
### Eelised
Videomängude ja pikslipõhise kunsti valdkondades on see tehnika populaarne tänu asjaolule, et 2D-spraite ja ruutudepõhist graafikat on 3D-keskkonna simuleerimiseks kergem teha. Kuna paralleelselt projitseeritud objektid ei muuda mänguväljal liikudes enda suurust, siis ei ole arvutil vaja spraite skaleerida ega teostada visuaalse perspektiivi simuleerimiseks keerukaid arvutusi. See võimaldas vanematel 8-bitistel ja 16-bitistel mängusüsteemidel (ja hilisemal ajal ka käeshoitavatel ja kaasaskantavatel süsteemidel) kujutada kolmemõõtmelisi alasid kiiresti ja lihtsalt.

Videomängudes isomeetrilise või pseudo-isomeetrilise perspektiivi kasutamisega kaasnevad teatud eelised mängimisel. Näiteks võrrelduna puhtalt pealtvaates mänguga lisavad need kolmanda dimensiooni, avades uusi võimalusi sihtimiseks ja platvormimiseks. Teiseks, võrrelduna ees- või tagantvaates mänguga võimaldab see kergema vaevaga paigutada ja kontrollida suurt arvu tegelasi, näiteks grupp karaktereid mõnes rollimängus. Pealegi leevendab see olukordi, kus mängija tähelepanu hajutavad mängu sisemised mehaanikad, mis hõlmavad 3D-kaamera liigutamist. See tähendab, et mängija saab keskenduda mängule endale ning mitte kaamera liigutamisele ja pööramisele.

Viimaseks on kunstiline eelis. Kuigi need pole rangelt isomeetriliste videomängude pärusmaa, võib eelrenderdatud 2D-graafika omada täpsemat esteetilisust ja kasutada rohkem kõrgema taseme tehnoloogiaid, kui arvutiriistvaral tavaliselt olemas, isegi kui riistvara 3D-kiirendus on sisse lülitatud. Sarnaselt filmides kasutatava CGI-ga saab graafikat võimsal superarvutil või renderipargis renderdada ühe korra ning kuvada väiksema arvutusvõimsusega platvormil nagu tahvelarvutid või veebibrauserid. See tähendab seda, et staatiline eelrenderdatud isomeetriline graafika näeb sageli välja parem kui nende reaalajas renderdatud alternatiiv. Samuti võib selle eluiga olla alternatiivide suhtes pikem. Siiski omab see eelis tänapäeval vähem tähtsust kui ajalooliselt.

Eelrenderdatud graafika üks miinuseid on see, et staatilisi 2D-pilte tuleb kuvaresolutsiooni kasvades ideaalis uuesti renderdada, vastasel juhul hakkavad need pikselduma. See ei ole alati võimalik. Nii juhtus aastal 2012, kui BioWare Baldur's Gate (1998) taasloodi nimega Baldur's Gate: Enhanced Edition stuudio Beamdog poolt. Uus arendaja valis lihtsa 2D graafika skaleerimise või suumimise mängude spraite uuesti renderdamata, kuna need olid mängu algsest kunstimaterjalide varamust puudu (algsed andmed hävisid uputuse käigus). Reaalajas renderdatud mängus on resolutsiooni muutmine võrdlemisi triviaalne.

### Erinevused "tõelise" isomeetrilise projektsiooniga
Videomängudes kasutatav projektsioon erineb teatud määral "tõelisest" isomeetriast rastergraafikas olevate piirangute tõttu. Jooned *x* ja *y* suundadel ei jälgi tihedat pikslite mustrit, kui need joonistatakse horisontaaltelje suhtes nõutud 30° nurga all. Kui moodsamad arvutid kasutavad selle probleemi lahendamiseks silumist, siis varasem arvutigraafika ei omanud piisavalt tuge värvidele ning protsessori arvutusjõudlusest jäi selle saavutamiseks väheks. Selle asemel kasutati *x*- ja *y*-telje joonte jaoks *2:1* pikslite suhet ja tulemuseks oli 35.264° (*<math>\arctan(0.5)</math>*) nurk horisontaali suhtes (ruudukujulisi piksleid mittekasutavad mängusüsteemid võisid anda teisi nurki, sealhulgas "tõelist" isomeetriat). Sellepärast on seda tüüpi projektsiooni täpsem kirjeldada kui dimeetrilise projektsiooni variatsiooni, kuna vaid kaks nurka kolmest on teineteise suhtes võrdsetel kaugustel (116.565°, 116.565°, 126.870°).

## Ekraani ja maailma koordinaatide kaardistamine

Isomeetrilisi (või pigem dimeetrilisi) projektsioone kasutavate mängude üks põhiprobleeme on 2D-tasandil toimuvate sündmuste kaardistamine sündmuse tegeliku toimumiskoha suhtes isomeetrilises ruumis, teisisõnu maailmaruumis. Klassikaline näide on selle ruudu valimine, mis on hiireklahvi vajutamisel otse kursori all. Üks meetod selle saavutamiseks on kasutada sedasama pööramismaatriksit, mis maailma isomeetrilisse vaatesse arvutas ning teha sellel pöördtehe, leides ekraanil oleva punkti asukoht mängutasandil enne, kui seda teisendati. Järgmisena saab maailmas olevad *x*- ja *y*-väärtused leida ruudu laiuse ja kõrguse jagamise teel.

Leidub ka teine meetod, millega kaasneb vähem arvutusi ning mis võib pakkuda häid tulemusi, kui seda kutsutakse igal kaadril. See eeldab, et ruudukujulist lauda pöörati 45 kraadi ja siis kitsendati seda poolele oma endisest suurusest. Projektsioonile asetatakse diagrammil näidatud viisil peale virtuaalne ruudustik, millel on teljed *virtual-x* ja *virtual-y*. Kui laual oleval keskmisel teljel vajutada suvalisse punkti koordinaadiga (*x*, *y*) = (ruudustikuLaius / 2, *y*), siis tulemuseks on ruudul sama *world-x* ja *world-y* väärtus, mis selles näites on 3 (0 indekseeritud). Valides virtuaalsel ruudustikul ruudu, mis asub ühe koha võrra paremal, muutub *world-y* ühe ruudu võrra vähem ja ühe ruudu võrra rohkem *world-x* puhul. Selline on valem, mis arvutab *world-x* väärtuse, kasutades *virtual-y* väärtust ja lisades sellele laua keskelt *virtual-x*. Samamoodi arvutatakse *world-y* võttes *virtual-y* ja lahutades *virtual-x*. Need mõõtmised arvutatakse keskmiselt teljelt (näidatud pildil), seega tulemusi tuleb tõlgendada poole laua pikkuse suhtes. Näiteks programmeerimiskeeles C näeks see välja nii:


```c
float virtualTileX = screenx / virtualTileWidth;
float virtualTileY = screeny / virtualTileHeight;

// mõnel kuvasüsteemil on koordinaadistiku algpunkt all vasakul kui ruudustik ise algab ülevalt vasakult, seega me peame y ümber pöörama
float inverseTileY = numberOfTilesInY - virtualTileY;

float isoTileX = inverseTileY + (virtualTileX - numberOfTilesInX / 2);
float isoTileY = inverseTileY - (virtualTileY - numberOfTilesInY / 2);
```


See meetod võib alguses tunduda ebaintuitiivne, kuna originaalse isomeetrilise maailma koordinaatide asemel kasutatakse virtuaalset koordinaadistikku ning puudub üks-ühele seos virtuaalsete ja isomeetriliste ruutude vahel. Ruudustikul olev ruut võib sisaldada enam kui ühte isomeetrilist ruutu ja olenevalt sellest, kuhu vajutati, peaks see viitama eri koordinaatidele. Selle meetodi iva on selles, et virtuaalsed koordinaadid ei ole mitte täisarvud, vaid ujukomaarvud. *Virtual-x* ja *y* võivad olla ka (3.5, 3.5), mis tähendab kolmanda ruudu keskpunkti. Vasakul oleval diagrammil langeb see kolmandasse ruutu *y*-teljel. Kui *virtual-x* ja *y* liituvad arvuks 4, siis peab ka *world-x* olema 4.

## Näited
### Dimeetriline projektsioon

Fail:Lincity-ng.png|LinCity-NG (2005) on ruutudepõhine linna ehitamise mäng
Fail:Freecol 095 05.jpg|FreeCol (2003) on 4X strateegiline videomäng
|Freeciv 2.1.0-beta3 töötamas 2D SDL-kliendil


### Kaldprojektsioon

Fail:Micropolis - big city.png|Micropolis (2008) on ruutudepõhine linna ehitamise mäng
Fail:Tile set.png|Ultima VI ruudupalett
|Pealtvaates mängud emuleerivad vahel kaldprojektsiooni, kuid kasutavad seejuures käsitsi joonistatud pilte ja perspektiivitrikke, mis küündivad definitsiooni parameetritest välja.


### Perspektiivprojektsioon

Fail:0_A.D._alpha_25_-_playing_as_Spartans.jpg|0 A.D. (arenduses) on reaalaja videomäng
Fail:Freeciv-webgl-3d-screenshot.jpg|Freeciv-web 3D-WebGL kliendil
Fail:Ufo 2.4 Farm.png|FO: Alien Invasion 2.4 taktikaline režiim


## Viited

## Välislingid
*The classic 8-bit isometric games that tried to break the mould at Eurogamer.com
*The Best-Looking Isometric Games at Kotaku.com
*The Best Isometric Video Games at Kotaku.com