Vodič kroz svet gejming programiranja

Razvoj video igara možemo sagledati kroz tehnološki i kreativni aspekt. Pošto je tehnološki aspekt razvoja igara u velikoj meri povezan sa kreativnim, slobodno možemo reći da je gejming programiranje svet za sebe. Gejming industrija pruža mogućnost za razvoj eksperata u najrazličitijim oblastima tehnologije, nudeći mnoštvo pravaca kada su u pitanju karijerni putevi. U tom kontekstu, u industriji video igara sreću se inženjeri i stručnjaci različitih profila, sa najraznovrsnijim setom veština, koje često prenose i iz drugih industrija. Ono što je interesantno i karakteristično za gejming industriju – svi oni su često izrazito povezani u svakodnevnom obavljanju posla.

 

Video igre su softverski proizvod, stoga smatram da treba dati odgovore na sledeća pitanja: da li se i po čemu razvoj ovakvog softvera razlikuje u odnosu na razvoj drugih tipova softverskih proizvoda, da li i ovde važe sva opšta pravila i principi razvoja softvera, koje sve uloge postoje, koje se tehnologije koriste, kao i šta je sve potrebno da bi se otpočeo rad u industriji video igara. Na ova pitanja pokušavam da dam odgovore u ovom tekstu, ali ću radi konteksta pre toga predstaviti svoj put do softverskog inženjera u gejming industriji. 

Ne spadam u grupu ljudi koji su unapred znali da će se baviti ovim poslom. Na fakultetu sam se intenzivno bavio elektronikom, dakle hardverom i embedded softverom, a zatim kompjuterskom vizijom, algoritmima za obradu slike, kao i muzikom i audio sistemima. Ipak, fakultet mi je omogućio da se kroz izborne predmete dotaknem i klasičnog softverskog inženjerstva, što je kasnije u karijeri i postalo moje glavno interesovanje. Radeći u industriji potrošačke elektronike, kao softverski inženjer, razvijao sam svoje veštine za razvoj aplikativnog, sistemskog i drajverskog softvera. Najveći deo karijere proveo sam razvijajući middleware za aplikacije na smart TV uredjajima. Danas, radim na u komapniji PLAYSTUDIOS Europe kao Game Engine Developer.

Programiranje u gejmingu

Sve ono što kreatori igre osmisle i stvaraju – koncept igre, priču, dizajn karaktera, dizajn svetova, logiku i mehaniku igre – mora naći podršku u softveru. Sve ovo vodi u različite pravce programiranja: gameplay programiranje, programiranje engine-a, sistemsko programiranje, programiranje u okviru kompjuterske grafike, serversko programiranje, AI, programiranje fizičke i matematičke logike, mrežno programiranje, programiranje baza podataka. Ne treba zaboraviti ni na programiranje alata koje gejming kompanije često razvijaju u cilju unapređenja procesa razvoja ili plasiranja novog sadržaja u jednoj igri. Takve alate koriste svi – artisti, data analitičari, marketing stručnjaci, pa i sami programeri. Često je potrebno kontinuirano osiguravati kvalitet, pa se susreću i QA inženjeri koji osmišljavaju i programiraju testove ili testna okruženja.

 

Svaka podgrupa programerskih uloga važna je karika u lancu razvoja i nosi sa sobom određene izazove i odgovornosti. Naravno, ne uključuje razvoj svake igre sve ove role, ali većina velikih kompanija ima potrebu za svim ovim profilima. Kod razvoja manjih ili indie igara, možemo se susresti sa situacijom da nekoliko stvari (čak i tehnički nepovezanih) razvija jedan čovek. Ipak, sve ovo navodi na zaključak da je veoma bitno da svaki programer jasno zna gde se njegova uloga nalazi u procesu razvoja, kako bi se osiguralo da oni koji od njega zavise mogu neometano da odrade svoj deo posla i pruže visoko kvalitetan proizvod.

Kada govorimo o konkretnim programerskim zaduženjima, može se izdvojiti i ukratko opisati nekoliko važnih programerskih domena u industriji igara, iako svaka od njih posebno zahteva stručnjake različitih profila. To su:

  • Gameplay programeri

Šta rade?

Gameplay programeri pišu kod koji direktno utiče na UX kod igrača. Zaduženi su za implementaciju interaktivnog aspekta igre, fokusirani na samu konstrukciju igre, njenu mehaniku i logiku, pravila igre, progresiju igre, kao i na interakciju između objekata u samoj igri. Bave se svime što korisnik (igrač) direktno vidi, čuje ili oseća tokom igranja igre. To uključuje i kontrole u igri, audio i vizuelne efekte. Svaki vidljivi objekat u jednoj video igri prolazi kroz kod gameplay programera. 

Često su ovi programeri zaduženi i za programiranje korisničkog menija igre, a u svetu mobilnih i bilo kojih drugih online igara veoma često se susreću i meta igre. To su dodatni gameplay sadržaji koji u određenoj meri prate glavni gameplay koncept i navode igrače da igru igraju redovno, za šta su takođe zaduženi gameplay programeri.

Koje tehnologije koriste?

Izbor tehnologije u velikoj meri varira od kompanije do kompanije, odnosno od igre do igre. Uslovljen je različitim faktorima kao što su: tip igre, skalabilnost igre, zahtevi o performansama, game engine koji se koristi, platforma na kojoj se igra izvršava i drugo. Međutim, možemo reći da je poželjno da gameplay programer poznaje bilo koji programski jezik, kao i bilo koji game engine/platformu za koju se igra programira. Najčešći programski jezici koji se sreću u gameplay programiranju su C++, C#, Java, Python, Lua. Premda, trebalo bi i napomenuti da gameplay programeri često barataju i sa visual scripting alatima koji im omogućavaju da kreiraju logiku i ponašanje igre bez pisanja koda (ukoliko korišćeni game engine to omogućava). Čak i tada, poznavanje nekog programskog jezika je poželjno, ali ne i potpuno neophodno.

Sa kim sarađuju?
Gameplay programeri najpre sarađuju sa ljudima koji su osmislili igru ili neku određenu funkcionalnost igre koju programiraju – dakle sa dizajnerima igre. Ova saradnja je neophodna kako bi programeri tačno razumeli šta je to što u igri treba da se dešava i kako igra napreduje. Sarađuju i sa artistima, kako bi razumeli kako objekti i karakteri treba da se ponašaju. Gameplay programeri moraju dobro da razumeju game engine koji igra koristi, njegove mogućnosti i ograničenja, pa samim tim sarađuju i sa game engine programerima. Najzad, u cilju optimizacije i unapređenja svog dela koda, uveliko sarađuju i sa QA inženjerima i tehničarima.


  • Game engine programeri

    Šta rade?

Ne odlučuju se sve kompanije za razvoj engine-a od nule, međutim, to u određenim situacijama donosi neke prednosti. Korišćenje komercijalno dostupnih game engine-a takođe donosi određene prednosti, pa je najpre neophodno opredeliti se za jednu od ove dve opcije. Bilo kako bilo, razvoj game engine-a podrazumeva razvoj jedne vrste framework-a u okviru kog se igra izvršava, a koji će intenzivno koristiti gameplay programeri. Samim tim, game engine uključuje implementaciju različitih podsistema kao što su: rendering engine za 2D ili 3D grafiku, uključujući sistem za animacije i vizuelne efekte; zatim podsistem za audio podršku u igri, podsistem za fiziku i detekciju kolizija objekata u igri, kao i različite podsisteme zadužene za čisto tehničke stvari nevezane sa samim konceptom igre, a to su: umrežavanje, menadžment memorije, interpretiranje skripti, AI, podsistemi za plaćanje, kupovinu i monetizaciju igre, sistemi za marketing podršku, sistemi za programe lojalnosti i drugo. Engine-i najčešće direktno integrišu 3rd party softver u vidu biblioteka i drugih framework-a sa ciljem obogaćivanja funkcionalnosti ili korišćenja već gotovih rešenja. Osim toga, game engine-i u velikom broju slučajeva nude i pakete standalone alata koje koriste artisti, animatori, dizajneri gameplay programeri, pa je i programiranje ovih alata takodje često zaduženje game engine programera.

Koje tehnologije koriste?

Najveći broj komercijalno dostupnih game engine-a koristi C++ kao primarni programski jezik, mada ima i onih koji su napisani u jezicima C#, Java, pa čak i JavaScript (za neke web-based igre), ili C (kod nekih starijih PC igara). Ljudi koji se bave grafičkim engine-om susreću se sa različitim grafičkim bibliotekama – OpenGL, Vulkan, Metal, WebGL i drugim. 

Tehnologije koje game engine programeri koriste u velikoj meri zavise i od platforme za koje je game engine namenjen. Na game engine programerima je i zadatak portovanja na različite platforme, pa su, na primer, veštine koje se oslanjaju na android ili iOS programiranje od velike koristi kada je u pitanju mobile gaming. 

Analogno tome, za igre koje se izvršavaju na PC-ju, poželjno je poznavanje Windows, Linux ili MacOS operativnih sistema. Portovanje igara na konzole takođe zahteva neke od pomenutih veština, što uključuje i elemente embedded programiranja kada treba dodati podršku za različite kontrolere, džojstike i druge ulazno/izlazne uređaje. To nas dovodi do poželjnog poznavanja jezika C, Java, Kotlin, ObjectiveC, Swift, i drugih. 

Engine programeri uglavnom poznaju i različite build sisteme, kao i mehanizme integracije različitih gotovih softverskih rešenja. U gejmingu je sve više prisutan AI, pa engine programeri mogu programirati ili koristiti i takva rešenja. 

Uzevši u obzir da se game engine programeri u velikoj meri bave performansama igre, kao i da vode računa o stabilnosti igara koje koriste dati game engine, na ovim programerima je i zadatak praćenja različitih metrika i analitika u cilju poboljšanja kvaliteta softvera. Važno je napomenuti i da ne uključuju svi game engine-i sve navedene tehnologije, jezike i funkcionalnosti. Takođe, vrlo često i više različitih igara jednog studija koristi isti engine, pa se game engine programeri trude da razvijaju što je moguće više generički engine, sa što većim brojem funkcionalnosti. 


Sa kim sarađuju?
Zavisno od zaduženja i sveobuhvatnosti engine-a, engine programeri sarađuju sa drugim tehničkim stručnjacima, kao što su: server programeri, data analitičari, DevOps inženjeri, i kao što je već pomenuto – sa gameplay programerima. Takođe, zahteve za engine programere često imaju svi oni koji koriste alate u okviru game engine-a. Najzad, game engine timovi obično uključuju i QA inženjere i tehničare sa kojima svakodnevno sarađuju.


  • Server programeri

 

Šta rade?

Mnogo igara danas koristi internet na najrazličitije načine. Jedna od najčešćih upotreba interneta u video igrama jeste omogućavanje podrške za multiplayer gejming. MMOG (Massively Multiplayer Online Gaming) serveri su krucijalne komponente online igara koje podržavaju veliki broj igrača koji igru igraju istovremeno i zajedno. 

U velikom broju igara se danas dinamički menja sadržaj – na primer: dodaju se novi nivoi, karakteri, game item-i i slično. Igre takodje često sadrže različite ponude za kupovinu kroz sam korisnički interfejs. Neke igre podržavaju cross-platform igranje, što znači da se mogu igrati na različitim uređajima bez prekida progresa u igri. U mobilnim igrama se često deo logike igre izvršava na serveru umesto na uređaju korisnika. Sve ovo je posao  server programera, a tu su i analitika i telemetrija, što je nezaobilazni deo svake veće igre danas.

Server programeri programiraju i alate za dinamičku distribuciju sadržaja, a tesno sarađuju i sa engine programerima jer serverski kod često komunicira sa kodom engine-a-. Često sarađuju i sa release menadžerima, i mnogim drugim profilima. Server programeri integrišu 3rd party rešenja u svoj kod, ali pojedine sisteme i mikroservise dizajniraju i implementiraju od nule prema potrebama igre, odnosno engine-a.

 

Koje tehnologije koriste?

Kao i kod drugih rola, tehnologije zavise od konkretnog okruženja i zahteva projekata, ali najčešće su to programski jezici Java, Python, C++, C#. Osim toga, server programeri se često oslanjaju na cloud servise kao što su AWS, Azure, GCP i drugi. Razne baze podataka se čuvaju na serverskoj strani, pa je SQL nezaobilazna tehnologija kod serveraša. Server programeri obično dobro poznaju različite protokole mrežne komunikacije.

Izazovi

 

Sve pomenute programerske uloge, iako različite, podržavaju i poštuju osnovne koncepte i principe programiranja. Teorija i principi arhitekture softvera važe u svim ovim segmentima, pa se može reći da se u tom pogledu programiranje u gejmingu ne razlikuje mnogo u odnosu na druge grane programiranja. 

Takođe, svi programeri koriste univerzalne i konvencionalne alate tokom kodiranja, svako u svom specifičnom razvojnom okruženju, što se ni po čemu ne razlikuje od programiranja u drugim granama softverske industrije. Ipak, stiče se utisak da u programiranju igara ipak postoje određeni izazovi koji ne postoje u drugim sferama, što ovu industriju čini izuzetno zanimljivom i dinamičnom. 

Najpre, nepredvidivost kako će korisnici igrati igru i na kojim tačno uređajima (u slučaju PC i mobilnih igara), što dovodi do velike kompleksnosti testiranja, što je jedan od najvećih izazova sa kojima se susreću programeri u industriji igara. Drugi vidljiv izazov jeste zavisnost jednih timova od drugih, pa je vrlo teško podelti scope jednog projekta ravnomerno na timove, što nekad dovodi do blokiranja, čekanja ili produžetka projekta. 

Ograničenja koja su diktirana hardverom, verzijama operativnih sistema, verzijama 3rd party softvera, kapacitetom servera, i slično, su samo neki od izazova koje treba prevazići. U određenim slučajevima (ne tako retkim), pojedine igre ili nove funkcionalnosti igre se razvijaju dok je igra u produkciji. To često povlači za sobom promene već testiranog ili stabilnog softvera koji je u produkciji. 

Softverski sistemi su u igrama često veoma veliki. Projektovanje takvog softvera, odnosno osmišljavanje arhitekture, pre početka implementacije, poseban je izazov. Spektar problema sa kojima se bilo koji gejming programer susreće je veoma širok – ali to nije nužno problem, već i sjajna prilika za unapređenje programerskih veština.



Šta je potrebno da biste postali gejming programer?

 

Iako se često sreće uverenje da je za programiranje u gejming industriji neophodno poznavanje konkretnih procesa razvoja igara, to nije neophodno. Da bi neko postao programer u gejming industriji potrebno je da, zavisno od tipa programiranja kojim bi želeo da se bavi, poseduje samo osnovne veštine i interesovanja vezana za to. 

Ovaj tekst, između ostalog, ima za cilj da ohrabri ljude koji bi želeli da se oprobaju u gejming industriji bez prethodnog iskustva u gejming programiranju. Ne postoje prepreke za to ukoliko je domen interesovanja bilo šta od gore pomenutog. Industrija je koncipirana tako da svako ko u nju zakorači veoma brzo uči, pa za razliku od drugih programerskih industrija, obično već nakon godinu programeri stiču osećaj kao da imaju nekoliko godina iskustva.
Šta se dobija radom u gejming industriji? Pre svega, prilika za brzo razvijanje programerskih veština. Razlog tome su veliki softverski sistemi, velika raznovrsnost tehnologija koje se koriste, ali i konstantna komunikacija i interakcija sa programerima različitih veština i zaduženja, kao i dinamičnost samog posla. Industrija i tržište igara se razvijaju velikom brzinom, što sa sobom povlači susret sa novim i modernim tehnologijama. Tržište zahteva nove funkcionalnosti, pa je neizbežan svakodnevni susret sa raznim novitetima. I ono najvažnije gejming industrija će vas sigurno dobro zabaviti 🙂



Novosti

Ako te interesuje koncept art, ovo je prilika koju ne treba propustiti!
Uskoro se otvaraju prijave za besplatne Prop i Environment kurseve u Onyx akademiji!
Razgovarali smo sa preko 20 seniora u domaćem gejmingu. Kad pogledaš ovih šest epizoda trebalo bi da ti bude mnogo jasnije čime u gejmingu možeš i želiš da se baviš