MODUL 3 · RAZVOJ OKRUŽENJA VIRTUALNE STVARNOSTI
Nastavna jedinica 3.1
Razvojno okruženje i VR projekt
Kako se iz praznog uređivača dolazi do VR projekta koji se pokreće u naočalama: predložak VR projekta, dodatak OpenXR, postavke iscrtavanja, mjerne jedinice i uredna struktura mapa. Primjer je projekt virtualnog laboratorija VR-1 koji se gradi za računalo i za samostalne naočale.
- objasniti ulogu razvojnog okruženja između modela, pokretača i uređaja
- izraditi novi projekt iz predloška VR projekta i uključiti dodatak OpenXR
- podesiti osnovne postavke projekta za stereo iscrtavanje u stvarnom vremenu
- urediti strukturu mapa i pravila imenovanja sadržaja projekta
- postaviti početnu scenu laboratorija u mjerilu 1 : 1 i pokrenuti je u naočalama
- izračunati vrijeme okvira, broj iscrtanih piksela i udio budžeta grafičke kartice za zadani faktor razlučivosti
Što radi razvojno okruženje
Modeli iz prvog modula su tek građa. Da bi korisnik mogao stati uz radni stol, pogledati oko sebe i uhvatiti kotač mobilnog robota, treba program koji devedeset puta u sekundi iscrtava scenu za oba oka, čita položaj glave i ruku, računa sudare i izvršava logiku. Takav program zove se razvojno okruženje za prikaz u stvarnom vremenu (engl. real-time engine), u praksi često samo „pogon igre". Primjeri su razvojna okruženja poput Unreal Enginea ili Unityja.
Svako takvo okruženje ima iste temeljne pojmove, bez obzira na to kako ih naziva:
- projekt — mapa sa svim sadržajem, postavkama i logikom jedne aplikacije;
- scena ili razina (engl. level, scene) — jedan prostor, npr. laboratorij 8 × 6 m;
- objekt u sceni (engl. actor, game object) — stol, dio robota, svjetlo, korisnik;
- komponenta (engl. component) — svojstvo ili ponašanje objekta: mreža za prikaz, kolizijski oblik, kamera, kontroler pokreta, zvuk;
- logika — nacrti (engl. Blueprint) ili skripte koje reagiraju na događaje (jedinica 3.2);
- izgradnja (engl. build, packaging) — pretvaranje projekta u samostalnu aplikaciju za odabranu platformu.
Razvojno okruženje ne razgovara s naočalama izravno. Između njega i uređaja stoji pokretač (engl. runtime) proizvođača opreme, a sporazumijevaju se preko standardnog sučelja OpenXR (jedinica 2.5). Aplikacija traži pozu glave i kontrolera te predaje iscrtane slike za lijevo i desno oko, a pokretač se brine o praćenju, korekciji izobličenja leća i prikazu. Zato isti projekt, uz male promjene postavki, radi na uređaju A (PC-VR s vanjskim praćenjem) i na uređaju B (samostalne naočale).
Novi projekt iz predloška VR projekta
Najbrži i najsigurniji početak je predložak VR projekta (engl. VR template) koji razvojno okruženje nudi pri izradi novog projekta. Predložak obično donosi gotov VR pijun s kamerom i dva kontrolera pokreta, primjer teleporta i okretanja u koracima, jednostavno hvatanje objekata, izbornik te već uključen dodatak za OpenXR. Nije konačno rješenje, ali pokazuje ispravno složen primjer koji se može proučiti i zatim preurediti.
Primjer izvedbe u okruženju s nacrtima (npr. Unreal Engine):
- U pokretaču razvojnog okruženja odaberite izradu novog projekta, skupinu predložaka za igre ili simulacije i u njoj predložak za virtualnu stvarnost.
- Odaberite nacrte kao vrstu projekta, ciljnu platformu za stolna računala i skalabilnu razinu kvalitete. Početni sadržaj (engl. starter content) isključite ako ga ne trebate — samo povećava projekt.
- Upišite ime projekta bez razmaka i dijakritičkih znakova, npr.
VR1_Laboratorij, i spremite ga na lokalni disk, ne u mapu koja se usklađuje s oblakom. - Nakon otvaranja u popisu dodataka (engl. plugins) provjerite je li uključen dodatak OpenXR i dodaci za praćenje ruku ili kontrolera koje namjeravate koristiti. Nakon promjene dodataka uređivač se ponovno pokreće.
- Otvorite primjer mape iz predloška, uključite naočale i pokrenite VR pregled iz uređivača. Ako vidite scenu i obje ruke, lanac aplikacija – OpenXR – pokretač radi.
U okruženju s C# skriptama (npr. Unity) put je sličan: projekt se izrađuje iz predloška za 3D ili VR, u postavkama projekta u dijelu za upravljanje XR dodacima uključuje se OpenXR posebno za računalo i posebno za mobilni operacijski sustav samostalnih naočala (npr. Android), a u postavkama OpenXR-a dodaju se profili interakcije (engl. interaction profiles) za kontrolere koje koristite. Paket za XR interakciju donosi gotove komponente za hvatanje, zrake i teleport te uzorke scena.
Nazivi izbornika, predložaka i dodataka mijenjaju se od inačice do inačice. Ako opisani izbornik ne nađete, potražite funkciju (npr. „XR", „OpenXR", „VR template") u tražilici postavki.
Zapamtite
Predložak je predložak, ne temelj koji se ne dira. Dobra praksa je njegov VR pijun kopirati u vlastitu mapu, preimenovati i mijenjati kopiju. Tako izvorni primjer ostaje za usporedbu kad nešto prestane raditi.
Postavke projekta za VR
Postavke koje su zadane za igre na monitoru nisu uvijek dobre za naočale. U VR-u je stabilna frekvencija važnija od svakog vizualnog učinka, jer izgubljeni okvir korisnik osjeti kao trzaj slike, a dulje kašnjenje kao mučninu (jedinica 2.3). Zato se pri postavljanju projekta provjeravaju ovi dijelovi:
- Stereo iscrtavanje u jednom prolazu (engl. instanced stereo, single-pass) — scena se za oba oka priprema jednom, a iscrtava dvaput uz različit položaj kamere. Procesor tako priprema približno upola manje poziva za crtanje nego kad se svako oko iscrtava zasebno.
- Način sjenčanja — za VR se često preporuča prosljeđeno sjenčanje (engl. forward shading) jer omogućuje višestruko uzorkovanje rubova (MSAA) i manje zamućuje sliku od vremenskog izglađivanja. Ovo je preporuka koju treba provjeriti mjerenjem na vlastitoj sceni.
- Učinci koji smetaju u naočalama — zamućenje pokreta, automatska prilagodba ekspozicije, jaka zrnatost i efekti leće. Isključuju se jer ih oko u naočalama doživljava kao pogrešku, a ne kao filmski učinak.
- Faktor razlučivosti (engl. screen percentage, render scale) — odnos iscrtane i nazivne razlučivosti. Povećanje oštri sliku, ali broj piksela raste s kvadratom faktora (računski odjeljak).
- Ishodište praćenja — za VR-1 na razini poda, tako da visinu očiju daje uređaj, a ne ručno upisan broj (jedinica 3.3).
Za uređaj B dolazi još jedan sloj: samostalne naočale imaju mobilni procesor, pa se za mobilnu izgradnju koristi mobilni način iscrtavanja, komprimirani oblici tekstura za mobilne grafičke procesore i strože granice scene (za VR-1 najviše 300 000 trokuta i 150 poziva za crtanje). Dobra praksa je od prvog dana imati obje ciljne platforme u projektu i povremeno izgraditi obje, a ne tek na kraju otkriti da scena na B vrti 72 sl/s.
Pažnja
Svaka promjena postavki iscrtavanja mjeri se, ne procjenjuje. Zabilježite vrijeme okvira prije i poslije promjene u istoj točki scene i s istim pogledom. „Izgleda brže" nije mjerenje.
Struktura mapa i imena
Projekt s dvanaest dijelova robota, šest točaka interesa, nekoliko nacrta i desetak tekstura u tri tjedna naraste na stotine datoteka. Bez reda se gube reference, dupliciraju materijali i ne zna se koja je inačica modela važeća. Zato se na početku dogovore dvije stvari: struktura mapa i pravilo imenovanja.
Prefiksi koji se često koriste: SM_ statička mreža, SK_ skeletna mreža (ruke), M_ materijal, MI_ instanca materijala, T_ tekstura uz nastavak vrste (_BC osnovna boja, _N normala), BP_ nacrt, IA_ ulazna akcija, IMC_ kontekst mapiranja ulaza, WBP_ sučelje, L_ scena. Točan skup nije propisan; važno je da ga cijeli tim od tri osobe koristi jednako.
Dijelovi robota MR-1 uvoze se u vlastitu mapu, jedan dio po datoteci, s imenima koja odgovaraju sastavnici (šasija, poklopac, kotač lijevi i desni…). Tako se model zamijeni novom inačicom bez diranja scene. Premještanje i preimenovanje radi se unutar uređivača, nikad u upravitelju datoteka operacijskog sustava — uređivač pri premještanju popravlja reference, a upravitelj datoteka ne.
Projekt se od prvog dana drži u sustavu za upravljanje inačicama (engl. version control), npr. Git s proširenjem za velike binarne datoteke. Privremene i izvedene mape (predmemorija, međurezultati izgradnje) ne spremaju se u spremište jer se mogu ponovno izgraditi i zauzimaju gigabajte.
Početna scena laboratorija u mjerilu 1 : 1
Prva vlastita scena projekta VR-1 je prazan laboratorij 8 × 6 m s visinom 3 m i radni stol 1600 × 800 mm, visine 750 mm. Prije ikakve logike provjerava se mjerilo, jer se svaka pogreška kasnije osjeti tijelom: stol koji je 10 % previsok korisnik odmah primijeti.
Mjerne jedinice razlikuju se među okruženjima i to je česta zamka. U okruženju s nacrtima (npr. Unreal Engine) jedna jedinica scene je 1 cm, a os Z gleda prema gore; stol je tada visok 75 jedinica. U okruženju s C# skriptama (npr. Unity) jedna jedinica je 1 m, a prema gore gleda os Y; isti stol visok je 0,75 jedinica. Ako je model iz CAD sustava izvezen u milimetrima i pri uvozu se ne podesi faktor mjerila, stol postaje 10 ili 1000 puta prevelik (jedinica 1.1).
- Izradite novu praznu scenu
L_Laboratoriji postavite pod tako da mu je gornja ploha na visini nula. - Ishodište svijeta postavite na pod, u sredinu budućeg prostora za igru 3,0 × 2,5 m, a stol tako da korisnik pri pokretanju stoji ispred njegove duže strane.
- Dodajte svjetlo za okoliš i jedno glavno svjetlo. Za uređaj B planirajte unaprijed izračunato (pečeno) osvjetljenje, jer dinamičke sjene na mobilnom procesoru brzo troše budžet.
- Postavite točku početka igrača (engl. player start) ili VR pijun na pod, bez dodatnog pomaka po visini.
- Uvezite pojednostavljen model stola s jednostavnim kolizijskim oblikom (kvadar), jer će ga ruke i zrake udarati stotine puta u sekundi.
Snimka zaslona uređivača s praznim laboratorijem, radnim stolom i označenim pravokutnikom prostora za igru 3,0 × 2,5 m na podu; vidljive osi scene u kutu prozora.
Prvo pokretanje i provjere
Kad je scena složena, pokreće se VR pregled iz uređivača. Uređaj A radi preko svojeg pokretača na računalu, a uređaj B spaja se na računalo kabelom ili bežično i tada radi kao PC-VR naočale. Prvo pokretanje nije provjera izgleda, nego provjera lanca i mjerila. Dobra je praksa za to napraviti kratku listu:
| Provjera | Kako | Očekivano |
|---|---|---|
| Lanac radi | pokrenuti VR pregled | slika u oba oka, ruke se pomiču |
| Visina poda | čučnuti i dlanom dotaknuti pod | virtualni i stvarni pod se poklapaju |
| Mjerilo | stati uz stol, usporediti s vlastitim tijelom | stol visine 750 mm, ne viši od kuka |
| Smjer | pogledati prema stolu nakon pokretanja | stol je ispred korisnika |
| Frekvencija | uključiti prikaz broja sličica u sekundi | stabilnih 90 sl/s |
| Granica sigurnosti | prići rubu prostora za igru | granica se pojavi 0,3 m prije zida |
Inačica bez naočala. Dio rada ne treba naočale: raspored scene, logika i točke interesa mogu se razvijati s mišem i tipkovnicom ili sa simulatorom uređaja koji glumi glavu i kontrolere. To je korisno kad je u laboratoriju manje naočala nego polaznika. Ipak, mjerilo, udobnost i frekvencija provjeravaju se isključivo u naočalama.
Izgradnja se za oba cilja radi iz istog projekta: za uređaj A kao aplikacija za računalo (ciljni paket ≤ 1,5 GB), za uređaj B kao paket za mobilni operacijski sustav naočala (≤ 500 MB) koji se instalira na naočale. Prva izgradnja često traje dugo jer se prevode sjenčari; kasnije izgradnje su brže.
Računski prikaz: vrijeme okvira i faktor razlučivosti
Pri 90 Hz vrijeme okvira je 1000 / 90 = 11,1 ms. Za uređaj A s 2 × 2448 × 2448 px to znači gotovo 12 milijuna piksela u svakom okviru, odnosno oko 1079 milijuna piksela u sekundi. Ako je grafička kartica ograničena brojem piksela, vrijeme GPU-a raste približno s kvadratom faktora razlučivosti:
Tokvir = 1000 / f · Npx = 2 · š · v · s² · tGPU(s) ≈ tGPU(1) · s²
Računa vrijeme okvira, broj iscrtanih piksela za oba oka i procjenu vremena grafičke kartice kad se promijeni faktor razlučivosti.
Za zadane vrijednosti (90 Hz, izmjereno 7,8 ms na uređaju A) grafička kartica koristi oko 70 % vremena okvira i ostaje unutar cilja od 9,0 ms. Već faktor 1,1 podiže procjenu na oko 9,4 ms i prelazi cilj, a faktor 1,2 na oko 11,2 ms — više od cijelog okvira. Procjena s kvadratom faktora vrijedi samo kad je ograničenje u broju piksela; kad je ograničenje u geometriji ili procesoru, promjena faktora malo mijenja vrijeme. Zato se procjena uvijek potvrđuje mjerenjem.
Ključni pojmovi
| Pojam | Značenje |
|---|---|
| razvojno okruženje (engl. real-time engine) | program koji u stvarnom vremenu iscrtava scenu, računa fiziku, čita ulaz i izgrađuje aplikaciju |
| projekt (engl. project) | mapa sa svim sadržajem, postavkama i logikom jedne aplikacije |
| predložak VR projekta (engl. VR template) | gotov početni projekt s VR pijunom, kontrolerima, teleportom i hvatanjem |
| dodatak (engl. plugin) | proširenje okruženja koje se uključuje po potrebi, npr. za OpenXR ili praćenje ruku |
| pokretač (engl. runtime) | program proizvođača opreme koji preko OpenXR-a daje poze i prikazuje slike u naočalama |
| profil interakcije (engl. interaction profile) | opis tipki i osi određenog kontrolera prema kojem se vežu ulazne akcije |
| stereo u jednom prolazu (engl. instanced stereo) | način iscrtavanja u kojem se scena za oba oka priprema jednom |
| faktor razlučivosti (engl. render scale) | omjer iscrtane i nazivne razlučivosti; broj piksela raste s njegovim kvadratom |
| izgradnja (engl. build, packaging) | pretvaranje projekta u samostalnu aplikaciju za računalo ili samostalne naočale |
Provjeri se
Kratka provjera prije prelaska na sljedeću jedinicu. Odgovor se potvrđuje klikom, a obrazloženje se prikazuje odmah.
Pitanje 1 od 4
Koja je uloga sučelja OpenXR u lancu VR aplikacije?
OpenXR je standardno sučelje između aplikacije i pokretača: aplikacija traži poze i predaje slike, a pokretač brine o uređaju.
Pitanje 2 od 4
Radni stol visine 750 mm u okruženju u kojem je jedna jedinica 1 cm ima visinu:
750 mm = 75 cm, a pri jedinici od 1 cm to je 75 jedinica scene.
Pitanje 3 od 4
Zašto se sadržaj projekta premješta i preimenuje unutar uređivača, a ne u upravitelju datoteka?
Uređivač zna koji nacrt ili materijal koristi koju datoteku i pri premještanju ažurira reference; upravitelj datoteka to ne radi pa reference pucaju.
Pitanje 4 od 4
Grafička kartica uz faktor razlučivosti 1,0 treba 7,8 ms. Kolika je približna procjena uz faktor 1,2 ako je ograničenje u broju piksela?
Broj piksela raste s kvadratom faktora: 7,8 · 1,2² = 7,8 · 1,44 ≈ 11,2 ms, što je više od vremena okvira 11,1 ms pri 90 Hz.
Odgovoreno 0 od 4.
Vježbe uz jedinicu
Gradivo ove jedinice priprema za sljedeće vježbe: