Iako optimizacija nije prva tema koja pada na pamet kada se pomisli na razvoj igara, od velikog je značaja za finalni proizvod, posebno kada je reč o obimnijim igrama sa mnogo sadržine. Nivo optimizacije direktno utiče na performanse igre, samim tim i na njeno korektno funkcionisanje i osećaj igrača.
Za mobilne platforme, optimizacija je posebno bitna stavka, jer je cilj da igru može da igra što veći broj korisnika, od kojih često većina nema uređaje sa visokim performansama.
Optimalno, igra bi trebalo da radi na uređajima koji imaju bar 512mb RAM memorije – kategorija u koju spada većina uređaja koji se danas koriste i kupuju za igranje igara. Stoga je neophodno razmišljati o tome da igra ni u jednom trenutku ne zauzima više od približno 250mb memorije, pošto je ostatak potreban operativnom sistemu. Ukoliko se ovom segmentu ne posveti dovoljno pažnje, može doći do nekog od sledećih problema: igra se ne pokreće, igra radi presporo, operativni sistem će prekinuti izvršavanje igre, pojedini delovi igre će prestati da funkcionišu.
U ovom tekstu ćemo se koncentrisati specifično na optimizaciju resursa koji se koriste u igrama, a čijom optimizacijom direktno možemo da utičemo na finalne performanse igre. Osim optimizacije resursa, posebnu pažnju treba posvetiti i performansama samog koda igre, ali to je tema kojom se nećemo baviti u ovom članku.
Teksture
Teksture su resursi na kojima se igra najviše može optimizovati zato što su najčešće najveći deo sadržine igre koji se učitava u memoriju. Optimizaciju tekstura je moguće vršiti na nekoliko načina, i u ovom odeljku ćemo ih preći.
- Prvi mehanizam za optimizaciju tekstura je korišćenje atlasa. Atlas je naziv za jednu veliku teksturu koja sadrži kolekciju pod-tekstura, a svaka od njih predstavlja jednu teksturu. Osim same teksture, sastavni deo atlasa je i lista pod-tekstura koje se nalaze u atlasu, kao i na kojim koordinatame se te pod-teksture nalaze. Ovakav način optimizacije tekstura ima dva primarna efekta na završnu igru. Prvo, igra će se brže učitavati, pošto se jednim pozivom učitava više tekstura odjednom. Drugo, prilikom renderinga igre, u grafičku memoriju će se jednim pozivom preneti više tekstura. Obe ove stavke direktno utiču na brzinu izvršavanja igre.
- Sledeća mogućnost koju imamo je da teksture skaliramo na deo njihove originalne veličine, čime postižemo drastično manje korišćenje memorije. Ukoliko smanjimo veličinu atlasa na, recimo, 50% on će zauzimati 4 puta manje memorije. Ukoliko se opredelimo za ovu opciju, potrebno je da nađemo optimalan balans između kvaliteta teksture i njene veličine. Dobro pravilo za veličinu tekstura je da treba da budu takve veličine da se jedan piksel na teksturi približno mapira na 1 piksel na ekranu.
- Ukoliko na više mesta u igri imamo identične teksture, možemo izbaciti duplikate i koristiti samo jednu teksturu. Na ovaj način se štedi na memoriji koju teksture zauzimaju, ali se i povećavaju performanse završne igre, pošto grafička kartica ima manje podataka koje treba da procesira.
- Izbor formata tekstura je posebna stavka o kojoj treba voditi računa. Izborom formata tekstura, zapravo se vrši balans između tri stavke: veličine tekstura na disku, veličine tekstura u grafičkoj memoriji i kvaliteta tekstura. U nastavku su navedeni formati koji se najčešće koriste za mobilne uređaje, njihove prednosti i mane:
- Iskustvo je pokazalo da je za pozadinske slike kod kojih nije potrebna visoka preciznost, najbolje koristiti PVR format. Za delove interfejsa je najbolje koristiti format PNG, pošto nudi veliku preciznost, a zauzima relativno malo prostora na disku. Za ostale segmente igre je potrebno uraditi dodatno istraživanje kako bi se odredio pravi format.
- Teksture bi trebalo da ostanu što je moguće višeg kvalitet, tako da rade na najvećem broju uređaja, što u potpunosti zavisi od toga kakva igra i za kakve uređaje se pravi. Jedan od pristupa koji su se pokazali efikasnim je da se teksture inicijalno prave u velikoj rezoluciji, a da se kasnije (u zavisnosti od uređaja za koji se igra priprema) skaliranju na neku manju rezoluciju.
Audio
- Kod audija treba obratiti pažnju na to koja se kompresija koristi, i koji je način na koji se audio fajl učitava u memoriju.
- Veliki audio fajlovi, kao što je muzika, treba da budu kompresovani i da se streamuju pri puštanju, što znači da se dinamički učitavaju u memoriju tokom njihovog puštanja.
- S druge strane, manji fajlovi (kao što su zvučni efekti) treba da budu učitani u memoriju pre puštanja kako ne bi bilo “kočenja” prilikom njihovog puštanja. Nakon što se završi njihovo preslušavanje, trebalo bi da se izbace iz memorije kada više nisu potrebni. Jedine audio fajlove koje ima smisla držati sve vreme u memoriji su efekti vezani za interfejs igre, a koji se često puštaju.
- Ukoliko igra ne sadrži mnogo audio fajlova, često ih nije neophodno kompresovati, i mogu da ostanu u WAV formatu. S druge strane, jedan od najzastupljenijih formata za audioje OGG format, koji daje dobru kompresiju a pri tome ne smanjuje značajno kvalitet zvuka. Za ovaj format postoje gotove biblioteke za njegovo puštanje na svim trenutno aktuelnim mobilinim uređajima.
- Posebnu pažnju treba posvetiti tome da li da se audio fajlovi snimaju kao stereo ili mono. Konvertovanjem fajlova iz stereo u mono, njihova veličina se duplo smanjuje, ali se ujedno i gubi stereo efekat. Ukoliko dizajn igre dozvoljava, ovo je još jedna mogućnost da se uštedi na memoriji koju zauzimaju audio resursi.
Video
- Puštanje videa u igrama se pokazalo posebno problematično. Razlog ovome je što su video resursi vrlo zahtevni za procesiranje, posebno na mobilnim uređajima. Postoji nekoliko načina na koje je moguće optimizovati video resurse u igri.
- Prvo, moguće je snimiti video u manjoj rezoluciji, što je korak kojim se dobija najviše i na performansama igre, i na zauzeću memorije, ali znači direktno smanjivanje kvaliteta video fajlova.
- Sledeća opcija je da se video fajl implementira kao animacija unutar enginea (ukoliko tehnologija koja se koristi ovo dozvoljava). Ovo je korak kojim se, takođe, drastično dobija na performansama, ali se gubi pre svega na bogatstvu efekata koji mogu da se postignu u videu.
- Najčešće korišćen format za kompresiju video fajlova je Theora, koji daje dobar kvalitet, uz malo zauzeće meorije.
Animacije
- Pojednostavljivanje animacija je jedna od stavki koja se često radi, posebno ako se igra portuje sa PC ili Mac verzije na mobilne uređaje. Naime, često se za PC/Mac verzije igre prave kompleksne animacija, koje se, prilikom prebacivanja igre na mobilne uređaje, pojednostavljuju kako bi zauzimale manje memorije, i manje opterećivale njihovo procesiranje.
- Ukoliko na ekranu igre u jednom trenutku postoji veliki broj animacija, postoji šansa da će igra usporavati ukoliko mobilni uređaj nije dovoljno “jak” da isprocesira sve animacije.
- Osim pojednostavljivanja, ovaj korak često podrazumeva i korak u kom se teksture više objekata koji učestvuju u nekoj animaciji spajaju, pa je moguće u jednom koraku optimizovati i teksture i animacije.
Dizajn i funkcionalnost ispred optimizacije
Iako je optimizacija jedan od bitnih segmenata razvoja igre, najbolje je ovaj deo preskočiti u početnim fazama igre, i posvetiti mu se u kasnijim fazama razvoja. Dizajn i funkcionalnost igre su svakako prioritet u odnosu na optimizaciju. S druge strane, ukoliko se igra ne izvršava dovoljno dobro, moguće je da nećemo moći da steknemo pravi osećaj o dizajnu igre pre nego što igru optimizujemo da se dobro izvršava.
Ukoliko igra nema zadovoljavajuće performanse, prvi korak (pre nego što se pristupi optimizaciji) je testiranje i merenje performansi igre. Rezultati ove analize najčešće direktno pokažu na kom segmentu igre treba dodatno da radimo, i da ga optimizujemo. Ako su rezultati analize zbunjujući (u smislu da ukazuju da svi segmenti igre loše utiču na performanse), jedan od mogućih pristupa je da izbacimo pojedine segmente igre kako bismo videli koji od njih najviše utiče na performanse. Na primer, možemo isključiti sve animacije, ili kompletno isključiti puštanje zvuka.
Na kraju, pristup koji treba izbegavati u razvoju igara su: optimizacija zarad optimizacije, i preuranjena optimizacija (“Premature Optimization”). Iskustvo industrije razvoja igara je pokazalo da je za finalnu igru bolje da se prvo svi segmenti igre kvalitetno dizajniraju, a da se tek u kasnijim fazama igre optimizuju tek oni delovi igre koji loše utiču na performanse igre.
Konkretno, kada su u pitanju resursi igre, ovo znači da je bitnije da se resursi na dobar i jasan način organizuju, imenuju i koriste u igri. Ovakav pristup će imati za posledicu i da će eventualna optimizacija resursa biti daleko lakša i efikasnija.