Prošlo je skoro godinu dana od mog prethodnog učešća na Ludum Dareu, kada sam s timom napravio prototip i započeo razvoj igre SMASH BASH: Date with the Desert. Od tada nekako nije bilo povoda da ponovo učestvujem. Ali nedavno mi se pružila prilika da razvijam za HTC Vive i nisam mogao da je propustim. Na kraju sam za tri dana napravio sopstvenu VR igru koju sam i sam sa zadovoljstvom igrao. Ako vam je HTC Vive pri ruci, preporučujem da igrate igru pre nego što nastavite da čitate.

Meni je prilično očigledno da će VR, AR i MR već narednih godina čvrsto ući u naš svakodnevni život. Danas je tehnologija na istom nivou na kojem su bile i sve druge tehnologije koje su promenile naš život: štreberska, skupa, nezgodna, spora, ali ipak radi i daje rezultate. Za mene konačnu potvrdu daje Telegram kanal ARKit studija Luden.io, koji pokazuje šta se može uraditi pomoću najnovijih modela iPhonea, dakle uređaja koji su već u džepovima miliona korisnika. A već kruže glasine da Apple, Facebook i Google rade na svojim verzijama Microsoftovog HoloLensa: jednako samostalnom uređaju, ali po pristupačnoj ceni i dostupnom u najbližoj prodavnici mobilnih telefona. Ta stvar će se munjevito probiti u naš život, dok je gejmdizajn nekih VR/AR igara na nivou „obična 3D igra koju možete gledati iz različitih uglova“. Zato sam poželeo da malo napredujem u pravljenju VR igara, da ne bih ostao po strani.
Ta želja se prvi put javila tokom rada s mojim studentima na kursu pravljenja igara u Unityju u Scream Schoolu. Jedan čas posvetio sam upoznavanju studenata s VR tehnologijom. Za tri sata prošli su put od „prvi put stavljam VR kacigu“ do šetnje svetom koji su upravo sami napravili. Tada mi je usred časa palo na pamet da izvor svetla ubacim u objekat jednog kontrolera, a sve ostale izvore svetla u sceni isključim. Manje od minuta podešavanja i odjednom sam dobio odličan horor.
Kadar iz igre za Ludum Dare. Željeni efekat je postignut.

Pre početka Ludum Darea već sam jasno znao da želim da ponovim taj eksperiment. Za probu sam sastavio malu scenu od besplatnih resursa i još jednom se uverio u ideju. Za gejmplej sam isprobao sledeće: treba pronaći izlaz iz lokacije na kojoj je čudovište koje polako, ali neumoljivo prati igrača. Neka vrsta lavirinta s Minotaurom.
Kretanje sam napravio pomoću tačaka za teleportaciju da bih tako malo usporio igrača, jer treba naciljati odgovarajuću tačku. Kada se pritisne dugme za teleportaciju, sve tačke postajale su vidljive, čak i iza prepreka. Kada ih ima nekoliko desetina, nivo počinje da liči na novogodišnju jelku. Morao sam da kopam po kodu kako ne bi prikazivao tačke van određenog radijusa oko igrača.
U subotu ujutro, 29. jula, saznao sam temu džema: Running out of Power — nestaje energija ili snaga. Pošto sam već imao pripremljen koncept, morao sam na silu da ga uklopim u temu. Recimo, treba da bude mračno, dakle energije više nema. Zašto je nestala? Zato što je to uradio opasan neprijatelj. Kakav neprijatelj? Pa, ne umem baš da modelujem, zato sam sastavio apstraktnog neprijatelja od letećih kocki. Nazvao sam ga „Projekat 424“, setivši se kripipaste i SCP.
Pošto mi je ovoga puta cilj bio da ovladam radom s VR-om, odlučio sam da preskočim pravljenje osnovnih resursa i okrenem se Asset Storeu. Najpre sam pregledao pakete za sastavljanje lokacija i odlučio se za ovaj paket, koji je prilično jeftin, raznovrstan i niskopoligonalni, bez komplikacija. Najmanje sam želeo da se uvalim u probleme sa slabim performansama.
Kasnije se pokazalo da izabrani modularni komplet ima nekoliko značajnih nedostataka:
— Za materijale su korišćeni zastareli šejderi, pa sam morao ponovo da ih podešavam.
— Većina objekata deli jedan materijal, što omogućava znatno poboljšanje performansi, ako ne zaboravite da uključite instancing. Ali kada se kamen i metal podešavaju istim materijalom, ili kamen ne liči na kamen ili metal ne liči na metal.
— Kod svih objekata podrazumevana skala nije 1, a sami objekti su podrazumevano naopačke. Očigledno je bilo problema s postavljanjem odgovarajućih dimenzija u 3D editoru i pravilnim izvozom.
— Iako modularni komplet služi tome da se elementi spajaju po mreži, nekoliko objekata jedne zgrade jednostavno nije odgovaralo dimenzijama i pri spajanju su ostajale vidljive pukotine. Morao sam ili da ih ne koristim ili da ih ručno pomeram i menjam im skalu, što je loša praksa.
— Greške u nazivima datoteka zaista su za hvatanje za glavu. Pritom stvaraju probleme u radu, jer se te datoteke ne pronalaze brzom pretragom.
— U paketu nema nijednog modela izvora svetla.

Deo lokacije napravljen pomoću ovog kompleta.

Ipak, za 5 dolara to su sasvim podnošljivi problemi. Još 2 dolara platio sam za model baterijske lampe. Na njega nemam nikakvih zamerki, odlična lampa. Zatim sam izdvojio još 25 dolara za paket skripti za različite načine upravljanja likom u VR-u — locomotion. Ostale resurse našao sam među besplatnim:
— Noćno nebo iz ovog paketa.
— Materijal lave za upotrebu na neprijateljima. Trebao mi je materijal s lepim emisivnim sjajem.
— Modularni komplet, iz kojeg sam uzeo modele svetiljki kako bih imao izvore svetla.
— Veoma kvalitetan model pištolja. Zahvaljujući pokretnim delovima napravio sam animaciju pucanja. Malo sam se mučio dok nisam shvatio da za tako kratku animaciju nije potrebno mešanje s mirujućim stanjem. Morao sam da se poigram i s pištoljem i lampom da dodam emisivnost, kako biste mogli da vidite svoje ruke čak i u potpunom mraku.
— Model automobila. Želeo sam da pokažem vezu između početne lokacije i početka igre.
— Paket efekata, iz kojeg sam uzeo efekat pogotka. Morao sam malo da ga podesim kako bi bio odgovarajuće veličine i kako bi na čestice delovala gravitacija.
— Zvuci pucnjeva i ambijenta, uglavnom sa sajta https://freesound.org/

Materijali na pištolju zaista su sjajni, ali se vide samo pri odgovarajućem osvetljenju.

Vrlo brzo mi se više nije dopadala ideja kretanja teleportacijom. Trebalo bi razbacati nekoliko stotina tačaka po celom nivou, testirati ih i zatim pri svakoj teleportaciji gledati kako se u svetu pojavljuju veštački elementi igre. A čar VR-a je u uživljavanju i želeo sam da ga sačuvam koliko god je moguće. Dopalo mi se kako je kretanje napravljeno u igri GORN, gde se kreće zamahivanjem ruku. Srećom, u Asset Storeu našlo se rešenje s arm swingom, doduše samo jedno, i to s problemima.
Problemi na koje sam iznenađeno naišao:
— Deo funkcionalnosti bio je pod naslovom Coming Soon. Srećom, to se odnosilo na načine kretanja koji me nisu zanimali.
— U kodu je direktno pominjana verzija Unity 5.6, što je dovelo do grešaka u verziji 2017.1.
— Kretanje zamahivanjem ruku radilo je samo za levu ruku. Desnu sam morao sam da dopišem.
— Iako u opisu piše da ovaj paket kao osnovu koristi SteamVR, zapravo nije kompatibilan s Valveovim rešenjima. Na primer, s tim rešenjem ne radi interakcija s interfejsom. Potrošio sam dosta vremena pokušavajući da uskladim Valveov kod za interfejs i kontrolere ovog paketa. Nije uspelo, pa sam morao sve da rešim zaobilazno: okidač oko dugmeta koji reaguje kada kontroler uđe u njega.
— Uputstvo je nejasno i nalazi se u Google Docs dokumentu, do kojeg vodi link u datotekama paketa. Lako sam mogao i da ga ne primetim. I uprkos tome morao sam da razbijam glavu tražeći mesto za podešavanje parametara kretanja, jer se oni ne podešavaju na liku, već na kameri duboko unutar njega.
— Teleportacija po luku je pokvarena i može da prebaci samo na najbliži metar. Uz to izgleda ružno. Srećom, ionako sam želeo da odustanem od teleportacije.
Ali taj paket me je ipak spasao, jer je omogućio dovoljno udobno i slobodno kretanje po celoj površini za koju je izračunat NavMesh, koji sam ionako morao da računam za neprijatelje. Problem je bio samo penjanje uz uske stepenice: postojala je velika šansa da prođete pored njih umesto da se popnete. Zato nisam u gejmpleju pravio oslonac na korišćenje stepenica. Kretanje je bilo moguće samo u pravcu pogleda, ali to se pokazalo čak boljim nego u GORN-u, gde mi je bočno kretanje izazivalo malu mučninu.
Crvene kocke su neprijatelji. Dovoljno je da jedna dodirne igrača i gotovo je: kraj igre.

Neprijatelje sam napravio ovako. Svaki neprijatelj stvara gomilu kocki u malom radijusu oko sebe. Svaka kocka može nasumično da se okreće i menja skalu. Kada je metak pogodi, uključuje fiziku i odleti u skladu s njom. Kada neprijatelju ponestanu kocke, smatra se ubijenim. Dodao sam mu zvuk i lampicu da bi se moglo reagovati na približavanje i razumeti prelazak u stanje smrti. Ispalo je prilično jezivo. U početku su neprijatelji veoma spori, što ih čini još jezivijim. Ali sa svakom pogođenom kockom brzina neprijatelja raste. Što se ide dalje kroz nivo, neprijatelji imaju više kocki, pa im je na poslednjim kockama brzina veoma velika. Igrajući se balansom uspevao sam da stvorim situacije koje ni sam nisam mogao da pređem. Ali za Ludum Dare odlučio sam da ne preterujem.
Dugo sam razmišljao šta da uradim s glavnim zadatkom igrača. Po glavi mi se stalno vrteo Slender sa zadatkom da se pronađe osam beleški, ali želeo sam nešto svoje. Do sredine trećeg dana ništa dobro mi nije palo na pamet, pa sam jednostavno oblepio stubove dalekovoda istim delovima od kojih se sastoje neprijatelji. Skinete sve delove sa stuba i uključi se osvetljenje na delu nivoa. Očistite sva tri tornja i igra je završena. Rešenje nije sjajno, jer ogroman deo nivoa ostaje neiskorišćen, ali ipak radi i igraču je intuitivno razumljivo.
Na snimku ekrana osvetljenost je povećana i opet se ništa ne vidi, a u kacigi s prvobitnom osvetljenošću sve izgleda normalno.

Kad smo već kod neprijatelja i pucanja na njih: u početku mi se dopadala ideja da napravim jednog neprijatelja kojeg ne možete savladati, ali od kojeg možete bežati. Film It Follows sjajno obrađuje tu temu, uz seksualno prenosivo prokletstvo. Ali kada sam počeo da pravim igru, shvatio sam da takav neprijatelj samo u početku plaši, a zatim postaje predvidljiv i dosadan. Uz to, da igraču ne bi bilo muka, dobro je da s vremena na vreme napravi pauzu u kretanju. Znači treba ga nečim zaposliti. Pucanje je mehanika koja otkriva posebnosti VR upravljanja. Zato sam odlučio: zašto ne bismo malo pucali? Ionako treba nečim zaposliti ruku koja ne drži lampu. Odlučio sam da sebi i igračima ne komplikujem život vremenom čekanja i punjenjem. Neka bar ovde može da se puca do mile volje.
Obično se na Ludum Dareu toliko potrošim da se posle nedelju dana oporavljam. Ali ovoga puta sam već na početku bio iscrpljen, a naredne nedelje me je čekalo puno obaveza, pa sam džemovao kao muzičari: bez žurbe, uživajući u procesu. Prvog dana razmišljao sam o ideji, procenjivao resurse, pravio opšti plan lokacije, a uveče sam čak otišao na susret autora igara DevsGo, gde sam se neočekivano našao među govornicima.

Sleva nadesno: ja, Aleksandar Pašin, Ilja Tumenko

Drugi dan mi je bio najlepši: veći deo dana bavio sam se dizajnom nivoa, sastavljajući lokaciju. Veoma umirujuća aktivnost, kao slaganje Lego kocki.

Opšti pogled na glavni nivo pri dnevnom osvetljenju.

Ali treći dan bio je bolan, jer je na njega došao rad na funkcionalnosti. Morao sam mnogo da iteriram: nešto popravim u kodu, stavim kacigu da proverim, zatim promenim podešavanja i ponovo u kacigu. Tako česta promena stvarnosti pomalo izbacuje iz ravnoteže. Kada sam uveče odlučio da odem do prodavnice, usput sam stalno hvatao sebe kako mislim da se krećem prebrzo i da mogu da udarim u zid u drugoj stvarnosti.
U celini, sve je prošlo glatko. Bilo je samo dva problema. O pokvarenom radu s interfejsom pisao sam gore. Drugi problem bilo je pečenje osvetljenja. Nisam stručnjak za podešavanje svetla u Unityju, ali mi se činilo da će postavljanje Directional Lighta u režim Baked poboljšati performanse. Ispostavilo se da posle dugog računanja senki, čak i u maloj sceni, one nekud nestanu. Morao sam da vratim svetla u režim Mixed. I iz nekog razloga napravljena verzija pokretala se s podešavanjem Very Low, iako sam kao podrazumevano postavio Very High. Morao sam da vratim početni Unityjev pokretač, u kojem je kvalitet grafike mogao ručno da se izabere.
Zatim je preostalo samo da snimim video gejmpleja za one koji nemaju HTC Vive, napravim gomilu snimaka ekrana i uredim stranicu igre. To sam i uradio, čime sam završio svoje učešće na Ludum Dareu.

Stranica igre na Ludum Dareu


Pogledajte video na izvornoj platformi


Kakve sam zaključke izvukao?

  1. Da, VR je tehnologija budućnosti. To nije 3D bioskop, gde je efekat služio marketingu i izazivao iritaciju umesto uživljavanja. Ovde postoji takav osećaj uranjanja koji se nikako drugačije ne može postići.
  2. VR igre povezane su s fizičkim kretanjem. To je zdravije od igranja sedeći.
  3. Kretanje zamahivanjem ruku radi, ne izaziva mučninu i po svemu je bolje od teleportacije. Mada možda sudim po sebi, jer se moje telo već pomalo naviklo na VR.
  4. Slika u kacigi izgleda svetlije nego na ekranu. To treba uzeti u obzir i nekako prilagoditi posvetljivanjem slike na monitoru, jer inače nije zanimljivo posmatrati takve igre sa strane: svuda je samo mrak.
  5. Pravljenje VR igara uopšte nije teško. Sve osnove rade odmah po instalaciji.
  6. Potreban je sto na točkićima koji može da se odgura u VR zonu kako bi se funkcije testirale bez trčanja tamo-amo.
  7. Intenzitet testiranja u VR-u treba dozirati. Često stavljanje i skidanje kacige nije prijatno. Testirajte funkcionalnost, pa pređite na rad sa sadržajem.
  8. Detaljnost nije suština VR-a. Rezolucija nije naročita, pa se detaljni resursi pretvaraju u zbrku, dok niskopoligonalni izgledaju sasvim dobro.
  9. I uopšte, glavno nije detaljnost, nego osećaj prostora.
  10. Treba napisati sopstveni sistem kretanja koji bi radio sa SteamVR-om i njegovim funkcijama.
  11. Nisam naišao na granicu performansi, što je dobro. Hvala, Unity.
  12. Ne može se testirati VR igra samo slanjem linka prijateljima. Treba unapred planirati da testeri budu na mestu razvoja, gde postoji oprema za igranje.