Preskoči na sadržaj
FORTRONIQ

MODUL 3 · RAZVOJ OKRUŽENJA VIRTUALNE STVARNOSTI

Nastavna jedinica 3.5

Kretanje u sceni i udobnost

Kako se korisnik premješta kroz prostor veći od sobe u kojoj stoji: fizičko kretanje unutar prostora za igru, teleport lukom, okretanje u koracima i kontinuirano kretanje uz vinjetu. Svaki način kretanja procjenjuje se prema udobnosti, jer se pogreška ovdje ne vidi, nego osjeti.

Moći ću:
  • objasniti zašto umjetno kretanje izaziva kinetozu i kako ga način kretanja ublažava
  • razlikovati pomicanje korisnikova ishodišta (riga) od pomicanja kamere
  • izraditi teleport lukom s provjerom valjanosti odredišta i zatamnjenjem
  • izraditi okretanje u koracima oko glave korisnika, a ne oko ishodišta prostora za igru
  • podesiti kontinuirano kretanje i vinjetu kao izbornu mogućnost
  • odabrati zadane postavke udobnosti za aplikaciju i obrazložiti izbor
  • izračunati domet, vrh i trajanje luka teleporta za zadanu brzinu, kut i visinu ruke

Zašto je kretanje u virtualnoj stvarnosti poseban problem

Virtualni laboratorij VR-1 ima tlocrt 8 × 6 m, a preporučeni prostor za igru samo 3,0 × 2,5 m. Korisnik dakle može stvarnim hodanjem prijeći tek dio laboratorija. Za ostatak treba umjetno kretanje (engl. artificial locomotion): aplikacija pomiče korisnika kroz scenu, a njegovo tijelo pritom stoji.

Upravo tu nastaje glavni izvor nelagode. Oči javljaju da se tijelo giba, a vestibularni organ u unutarnjem uhu javlja da miruje. Taj sukob osjetila glavni je uzrok kinetoze, odnosno bolesti simulatora (engl. simulator sickness), o kojoj je bilo riječi u jedinici 2.3. Najjače je djelovanje ubrzanja, okretanja i promjene visine, a slabije djelovanje jednolikog gibanja ravno naprijed. Zato se svaki način kretanja može opisati jednim pitanjem: koliko dugo i koliko snažno korisnik vidi gibanje koje ne osjeća?

Iz toga slijede tri skupine rješenja: fizičko kretanje (korisnik stvarno hoda unutar prostora za igru), trenutni skok (teleport, gibanje se uopće ne prikazuje) i kontinuirano kretanje (gibanje se prikazuje, ali se ublažava vinjetom, stalnom brzinom i okretanjem u koracima). Dobra aplikacija nudi više načina, a jedan od njih, najudobniji, postavlja kao zadani.

8 m 6 m Laboratorij 8 × 6 m prostor za igru 3,0 × 2,5 m radni stol 1600 × 800 mm prostor nakon teleporta glava korisnika teleport 2,3 m (najviše 4 m)
Slika 3.5.1 — Tlocrt laboratorija VR-1: teleport ne pomiče samo korisnika, nego cijeli prostor za igru. Nakon skoka od 2,3 m prostor za igru (iscrtkano) i dalje stane unutar zidova laboratorija.

Fizičko kretanje i korisnikovo ishodište

U razvojnom okruženju korisnika predstavlja skup objekata koji se obično naziva rig (engl. XR rig, ponegdje XR origin ili VR pawn, naziv ovisi o alatu i inačici). Rig ima svoje ishodište na podu, ono odgovara središtu ili kutu prostora za igru. Ispod njega su kamera i dva kontrolera, a njihove položaje svaki okvir postavlja pokretač OpenXR prema praćenju. Kad korisnik napravi korak, kamera se pomiče unutar riga, a samo ishodište stoji.

Odatle temeljno pravilo cijele jedinice: umjetno kretanje uvijek pomiče rig, nikad kameru. Kameru pomiče isključivo praćenje glave. Ako program izravno postavi položaj kamere, prikaz se odvoji od pokreta glave, a to je najbrži put do mučnine.

Druga posljedica je da glava korisnika najčešće nije iznad ishodišta riga. Korisnik koji stoji uz radni stol može biti metar i pol od središta prostora za igru. To je važno kod teleporta i okretanja: oba se računaju prema položaju glave projiciranom na pod, a ne prema ishodištu riga.

  • Stajanje i hodanje (engl. room-scale) — najudobnije i najprirodnije, jer se gibanje osjeća tijelom. U VR-1 korisnik fizički obilazi radni stol i saginje se prema dijelovima.
  • Sjedeći način — korisnik sjedi, a aplikacija podiže rig za razliku između stojeće i sjedeće visine očiju, tako da scenu vidi kao da stoji. Potreban je za korisnike koji ne mogu ili ne smiju stajati.
  • Granica sigurnosti — iscrtava je pokretač, ne aplikacija. Aplikacija je ne smije skrivati ni zamjenjivati vlastitom.

Zapamtite

Kamera pripada korisniku, rig pripada aplikaciji. Svi načini umjetnog kretanja mijenjaju samo položaj i zakret riga.

Teleport lukom

Teleport (engl. teleportation) premješta korisnika u trenutku, bez prikaza gibanja. Budući da nema vidljivog pomaka, nema ni sukoba osjetila, pa je teleport u većini aplikacija zadani način kretanja. Cijena je gubitak kontinuiteta: korisnik se nakon skoka mora kratko preorijentirati.

Ciljanje se izvodi lukom, a ne ravnom zrakom. Luk je putanja kosog hica iz kontrolera: podizanjem ruke raste domet, a vrh luka prelazi preko niskih prepreka, pa se može ciljati i iza stola. Ravna zraka pogodila bi rub stola ili bi za udaljene točke zahtijevala vrlo malen kut. U VR-1 luk je ograničen na 4 m; dalje od toga korisnik ne procjenjuje dobro odredište.

Tok teleporta je slijed događaja koji se u nacrtu ili skripti izvodi ovim redom:

  1. Korisnik nagne palicu kontrolera prema naprijed (ili napravi zadanu gestu). Aplikacija počinje svaki okvir računati točke luka i iscrtava ga.
  2. Luk se dijeli na kratke odsječke; za svaki se ispituje sudar s kolizijskim oblicima scene. Prvi pogodak je kandidat za odredište.
  3. Kandidat se provjerava: leži li na dopuštenoj površini za kretanje (engl. navigation area), je li unutar 4 m, je li nagib dovoljno malen, ima li iznad točke dovoljno mjesta za čovjeka, nije li preblizu stolu ili zidu. Valjano odredište prikazuje se oznakom, nevaljano drugom bojom ili se luk ne prikazuje.
  4. Palicom se po želji odabire smjer gledanja nakon dolaska (strelica na oznaci).
  5. Pri otpuštanju palice slijedi kratko zatamnjenje (engl. fade), premještanje riga i odtamnjenje.
  6. Rig se pomiče za razliku između odredišta i položaja glave projiciranog na pod, tako da korisnik stane točno na oznaku.

Zatamnjenje traje desetinku do dvije. To je preporuka iz prakse, a ne pravilo: preduga crna slika djeluje kao prekid, a nagli skok bez zatamnjenja nekim korisnicima smeta. Neka razvojna okruženja nude gotove komponente za teleport u VR predlošku; u okruženju s nacrtima luk se obično računa čvorom za predviđanje putanje projektila, a u okruženju s C# skriptama posebnom komponentom za teleport iz paketa za XR interakciju. Nazivi se razlikuju po inačici, načelo je isto.

strop 3,0 m granica 4 m h = 1,1 m vrh 1,87 m domet 3,94 m v = 5,5 m/s, α = 45° g = 9,81 m/s² trajanje leta ≈ 1,01 s odredište: oznaka na podu
Slika 3.5.2 — Luk teleporta je putanja kosog hica iz kontrolera. Uz brzinu 5,5 m/s, kut 45° i ruku na 1,1 m luk pada na pod 3,94 m ispred ruke, unutar granice od 4 m.

Okretanje u koracima

Korisnik se može okrenuti i tijelom, ali uz kabel PC-VR naočala ili u sjedećem načinu to nije uvijek praktično. Zato se na vodoravni otklon palice veže okretanje u koracima (engl. snap turn): rig se odjednom zakrene za stalni kut, bez prikaza vrtnje. U VR-1 korak iznosi 30°, pa je za puni krug potrebno 360 / 30 = 12 koraka. Neke aplikacije nude i korake od 45° ili 15°; manji korak je precizniji, ali traži više pokreta.

Tri su tipične pogreške pri izvedbi:

  • Vrtnja oko ishodišta riga. Ako se rig zakrene oko vlastitog ishodišta, a korisnik stoji metar dalje, glava opiše luk i korisnik se nađe na drugom mjestu. Rig se mora zakretati oko okomite osi kroz položaj glave.
  • Ponavljanje dok je palica nagnuta. Jedan otklon smije dati jedan korak. Palica se mora vratiti u mrtvu zonu prije sljedećeg koraka.
  • Premala mrtva zona. Pri potiskivanju palice naprijed za teleport korisnik je nehotice malo nagne ustranu. Otklon za okretanje zato treba biti jasno velik, na primjer iznad dvije trećine hoda palice (preporuka, provjerava se s ispitanicima).

Primjer izvedbe u okruženju s C# skriptama (kratki odsječak iz metode koja se izvodi svaki okvir; primjer za razumijevanje, nazive komponenti i ulaznih akcija provjerite u svojoj inačici):

// okretanje u koracima oko glave, jedan korak po otklonu palice
// palica: Vector2 iz ulazne akcije; rig, glava: Transform; cekaPovratak: bool
if (!cekaPovratak && Mathf.Abs(palica.x) > 0.7f) {
    float kut = 30f * Mathf.Sign(palica.x);
    rig.RotateAround(glava.position, Vector3.up, kut);
    cekaPovratak = true;          // sljedeći korak tek nakon povratka palice
}
if (Mathf.Abs(palica.x) < 0.3f) cekaPovratak = false;   // histereza 0,7 / 0,3

U okruženju s nacrtima isto se postiže događajem ulazne akcije, logičkom varijablom „čeka povratak palice" i čvorom koji zakreće rig oko zadane točke. Postoji i kontinuirano okretanje (engl. smooth turn) stalnom kutnom brzinom; ono je najjači okidač mučnine od svih načina kretanja i nudi se samo kao izbor za iskusne korisnike.

Kontinuirano kretanje i vinjeta

Kontinuirano kretanje (engl. continuous locomotion, smooth locomotion) pomiče rig svaki okvir u smjeru nagiba palice. Prednost je osjećaj neprekinutog prostora: korisnik vidi kuda prolazi i ne gubi orijentaciju. Nedostatak je izravno izazivanje sukoba osjetila.

U VR-1 brzina je 1,5 m/s, što odgovara nešto bržem hodu. Pri 90 Hz to je pomak od 1,5 / 90 = 0,0167 m, dakle 16,7 mm po okviru; dužinu laboratorija od 8 m korisnik prijeđe za 5,3 s. Dobra praksa za udobnost:

  • Brzina je stalna, bez postupnog ubrzavanja i usporavanja. Ubrzanje je ono što vestibularni organ osjeća; nagli početak i kraj podnose se bolje od blagog ubrzavanja koje traje.
  • Smjer se određuje prema glavi ili prema kontroleru, po izboru korisnika. Kretanje prema kontroleru omogućuje gledanje ustranu dok se ide ravno.
  • Visina pogleda se ne mijenja naglo. Stepenice i neravan pod izvode se kao kosina, a u VR-1 pod je ravan.
  • Kamera se nikad ne pomiče bez korisnikove naredbe: nema tresenja, nema animiranih „letova" kamere.

Vinjeta (engl. vignette, tunneling) je zatamnjenje rubova vidnog polja dok traje umjetno gibanje. Periferni vid je najosjetljiviji na optički tok, pa sužavanje vidljivog dijela slike smanjuje nelagodu, a središnji dio ostaje jasan. Vinjeta se uključuje kad je brzina veća od nule i gasi se nakon zaustavljanja. Jačina se podešava u izborniku; koliko suziti polje procjenjuje se ispitivanjem s korisnicima, a ne unaprijed. Izvodi se kao jednostavan prikaz ispred kamere ili kao naknadna obrada slike; na samostalnim naočalama prednost ima jeftinija inačica jer naknadna obrada troši vrijeme okvira.

Pažnja

Kontinuirano kretanje ne smije biti zadani način. U ispitivanju laboratorija VR-1 jedan od osam ispitanika osjetio je blagu mučninu upravo pri kontinuiranom kretanju. Zato je teleport zadan, a kontinuirano kretanje s vinjetom dostupno je samo kao izbor.

Postavke udobnosti u laboratoriju VR-1

Udobnost se ne ostavlja slučaju, nego se zapisuje kao zahtjev i provjerava testnim slučajevima u jedinici 3.7. Za VR-1 odabrane su ove zadane vrijednosti:

PostavkaZadanoIzbor korisnikaRazlog
Način kretanjateleport lukom, do 4 mkontinuirano 1,5 m/sbez vidljivog gibanja nema sukoba osjetila
Okretanjeu koracima od 30°kontinuirano12 koraka za puni krug, bez prikaza vrtnje
Vinjetauključena uz kontinuirano kretanjejačina (ne isključuje se dok je kontinuirano kretanje uključeno)smanjuje periferni optički tok
Zatamnjenje pri teleportuuključeno, kratkoisključenoublažava skok slike
Položajstajanjesjedeći načinpristupačnost i sigurnost
Ruka za kretanjelijeva palica (okretanje desnom)zamjena stranadešnjacima desna ruka ostaje za hvatanje i ciljanje; ljevoruki korisnici mogu zamijeniti strane

Uz to vrijedi opći uvjet iz prethodnih jedinica: udobnost ruši i svaki izgubljeni okvir. Ako aplikacija ne drži stabilnih 90 sl/s (vrijeme okvira 11,1 ms), ni najbolji način kretanja neće spasiti korisnika od nelagode. Izbornik s postavkama udobnosti treba biti dostupan i usred rada, ne samo na početku, a odabir se pamti za sljedeće pokretanje.

Sigurnost prostora za igru jednako je važna. Teleport pomiče virtualni prostor, ali fizički prostor za igru ostaje isti; korisnik koji se nakon skoka okrene i zakorači i dalje je unutar istih stvarnih zidova. Granica sigurnosti postavljena je 0,3 m od zida i aplikacija je ne dira.

Luk teleporta: domet, vrh i trajanje

Luk se računa kao kosi hitac iz položaja kontrolera. Za početnu brzinu v, kut prema vodoravnoj α i visinu ruke h vrijede izrazi:

t = (v · sin α + √(v² · sin² α + 2 · g · h)) / g    R = v · cos α · t    ymax = h + (v · sin α)² / (2 · g)

Brzina luka nije brzina korisnika, nego parametar kojim se podešava koliko daleko luk doseže. Promijenite ulaze i promatrajte kada domet prelazi dopuštenu granicu i kada vrh luka udara u strop laboratorija visine 3 m.

Luk teleportaRačunski prikaz

Računa trajanje, domet i vrh luka teleporta kao kosog hica iz kontrolera te provjerava granicu dometa i visinu stropa laboratorija.

Trajanje leta—
Domet luka—
Vrh luka—
Rezerva do granice dometa—

Za zadane vrijednosti (5,5 m/s, 45°, ruka na 1,1 m) luk traje 1,01 s, vrh mu je na 1,87 m, a pada na pod 3,94 m ispred ruke, dakle unutar granice od 4 m. Ako se kut smanji na 30°, domet ostaje gotovo isti (3,96 m), ali luk je niži (vrh 1,49 m) i lakše zapinje za rub stola visine 750 mm. Uz brzinu od 7 m/s i kut 45° domet naraste na 5,92 m: luk pada iza granice, pa se računa samo do 4 m vodoravne udaljenosti, a cilj dalje od toga je nevaljan i teleport se ne izvodi. Pri 10 m/s i 60° vrh luka prelazi strop od 3 m, pa bi luk udario u strop i odredište bi bilo nevaljano. Zato se brzina luka bira tako da najveći domet pri kutu od oko 45° bude blizu granice, a ne daleko iznad nje.

Ključni pojmovi

PojamZnačenje
Teleport (engl. teleportation)trenutno premještanje riga na odabrano odredište bez prikaza gibanja
Vinjeta (engl. vignette, tunneling)zatamnjenje rubova vidnog polja za vrijeme umjetnog gibanja radi udobnosti
Okretanje u koracima (engl. snap turn)trenutni zakret riga oko glave za stalni kut, npr. 30°
Kontinuirano kretanje (engl. continuous / smooth locomotion)pomicanje riga svaki okvir u smjeru nagiba palice, stalnom brzinom
Umjetno kretanje (engl. artificial locomotion)svako kretanje kroz scenu koje nije posljedica stvarnog hoda korisnika
Rig (engl. XR rig, XR origin)skup objekata koji predstavlja korisnika: ishodište na podu, kamera i kontroleri
Površina za kretanje (engl. navigation area)dio scene na koji je dopušteno teleportirati se
Zatamnjenje (engl. fade)kratko prelaženje slike u crno i natrag pri skoku
Mrtva zona (engl. dead zone)područje malog otklona palice koje se ne tumači kao naredba

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

Što umjetno kretanje u sceni smije mijenjati?

Kameru postavlja pokretač OpenXR prema praćenju glave. Izravno pomicanje kamere odvaja sliku od pokreta glave i izaziva mučninu, zato se pomiče samo rig.

Pitanje 2 od 4

Korisnik stoji metar od ishodišta riga i napravi okretanje u koracima od 30°. Oko čega se rig mora zakrenuti?

Zakret oko ishodišta pomaknuo bi glavu po luku i korisnik bi završio na drugom mjestu. Zakret oko osi kroz glavu ostavlja korisnika na istom mjestu.

Pitanje 3 od 4

Zašto je teleport zadani način kretanja u laboratoriju VR-1?

Teleport premješta korisnika bez prikaza gibanja. U ispitivanju je jedan od osam ispitanika osjetio mučninu pri kontinuiranom kretanju, pa je teleport zadan.

Pitanje 4 od 4

Kontinuirano kretanje brzinom 1,5 m/s pri 90 Hz pomiče rig po okviru za:

1,5 m/s podijeljeno s 90 okvira u sekundi daje 0,0167 m, dakle 16,7 mm po okviru.

Odgovoreno 0 od 4.

Vježbe uz jedinicu

Gradivo ove jedinice priprema za sljedeće vježbe: