Preskoči na sadržaj
FORTRONIQ

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.

Moći ću:
  • 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).

Aplikacija VR-1 Razvojno okruženje Sučelje OpenXR Pokretač (runtime) Uređaj A Uređaj B scena, modeli, logika iscrtavanje, fizika, ulaz poze, akcije, slike za oči praćenje, leće, prikaz A: PC-VR, bazne stanice B: samostalne, 4 kamere
Slika 3.1.1 — Slojevi VR aplikacije: vi izrađujete gornji sloj, a OpenXR odvaja aplikaciju od konkretnog uređaja.

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):

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.

VR1_Laboratorij Mape Modeli/MR1 Materijali Teksture Nacrti Ulaz Sucelje Zvuk L_Laboratorij, L_Proba (scene) SM_Sasija, SM_Kotac_L ... 12 dijelova M_Metal, M_Plastika, MI_Sasija T_Sasija_BC, T_Sasija_N (1024 px) BP_VRPijun, BP_Dio, BP_TockaInteresa IA_Uhvati_L, IA_Teleport, IMC_VR WBP_Panel: natpisi i paneli SFX_Klik, SFX_Motor
Slika 3.1.2 — Primjer strukture mapa projekta VR-1. Prefiks u imenu odmah govori vrstu sadržaja.

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).

  1. Izradite novu praznu scenu L_Laboratorij i postavite pod tako da mu je gornja ploha na visini nula.
  2. 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.
  3. 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.
  4. Postavite točku početka igrača (engl. player start) ili VR pijun na pod, bez dodatnog pomaka po visini.
  5. Uvezite pojednostavljen model stola s jednostavnim kolizijskim oblikom (kvadar), jer će ga ruke i zrake udarati stotine puta u sekundi.
Mjesto za sliku 3.1

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:

ProvjeraKakoOčekivano
Lanac radipokrenuti VR pregledslika u oba oka, ruke se pomiču
Visina podačučnuti i dlanom dotaknuti podvirtualni i stvarni pod se poklapaju
Mjerilostati uz stol, usporediti s vlastitim tijelomstol visine 750 mm, ne viši od kuka
Smjerpogledati prema stolu nakon pokretanjastol je ispred korisnika
Frekvencijauključiti prikaz broja sličica u sekundistabilnih 90 sl/s
Granica sigurnostiprići rubu prostora za igrugranica 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²

Vrijeme okvira i opterećenje grafičke karticeRačunski prikaz

Računa vrijeme okvira, broj iscrtanih piksela za oba oka i procjenu vremena grafičke kartice kad se promijeni faktor razlučivosti.

Vrijeme okvira—
Piksela po okviru (oba oka)—
Procijenjeno vrijeme GPU-a—
Udio vremena okvira—

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

PojamZnač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: