Laborator VR 02. SteamVR. Setup și interacțiuni de bază
În acest laborator vom folosi SteamVR împreună cu headset-urile celor de la Meta (Quest 2, Quest 3), reunind totul în Unity pentru a vă introduce în dezvoltarea unei aplicații de tip PC VR.
Tehnologii utilizate. Scurt overview
Vom folosi o serie de programe și plugin-uri pentru a ne configura environment-ul de dezvoltare. Acestea sunt prezentate pe scurt în următoarele subcapitole.
Subcapitolele Meta Quest App și Quest Link există întrucât noi vom folosi headset-urile celor de la Meta. Alte headset-uri vor folosi alte software-uri pentru configurare.
Vom vorbi mai detaliat despre ecosistemul Meta în laboratoarele dedicate acestuia
SteamVR
SteamVR este un framework dezvoltat de către Valve ce permite utilizarea headset-urilor de realitate virtuală să ruleze conținut de tip PC VR, anume permite utilizarea calculatorului ca unitate de procesare iar headset-urile ca dispozitive de tracking și streaming.
Runtime-ul SteamVR rulează prin platforma Steam, care oferă acces la sute de jocuri ce pot fi rulate în modul PC VR.
De asemenea, SteamVR permite utilizarea a multiple headset-uri, câteva exemple ar fi:
Meta Quest (2, 3, Pro)
HTC Vive
Valve Index
Nu în utlimul rând, SDK-ul se bucură de o integrare de calitate cu diverse medii de dezoltare, precum Unity.
PC VR
Ca și concept PC VR are avantajul că se folosește de puterea superioară de procesare a PC-urilor / laptop-urilor (comparativ cu cea a headset-urilor de tip all-in-one) pentru a procesa conținutul grafic, care este apoi redat pe headset. Acesta din urmă joacă și un rol de tracking, comunicându-i aplicației (ce rulează pe PC) informații legate de headtracking, controller-e, etc.
Meta Quest App este un software al celor de la Meta, de tip “companion”, ce permite conectarea unui headset de tip Meta la PC / laptop via Quest Link. Programul în trecut se numea Oculus App.
Quest Link
Quest Link este tehnologia ce permite headset-urilor Meta să de comporte precum un headset PC VR. Se poate configura atât prin cablu cât și wireless (Air Link).
Setup laborator
SteamVR runtime și plugin Unity
Dacă după import primiți în consolă în mod repetat eroare de tipul InvalidOperationException: Insecure connection not allowed mergeți în Edit → Project Settings → Player → (platforma target, prima in acest caz, Windows) → Other Settings și selectați pentru opțiunea Allow downloads over HTTP varianta Always allow.
Utilizarea headset-urilor Meta implică faptul că acestea au fost configurate (setup-ul căștii în sine) și că au conectat un cont valid de Meta. Headset-urile din laborator ar trebui să fie deja configurate în acest sens. În caz contrar, următorii pași din setup necesită configurarea în prelabil a headset-ului.
Quest Link (cablu)
Găsiți
aici pașii oficial pentru configurarea Quest Link-ului în caz că întâmpinați probleme.
Air Link
Pașii pentru configurarea Air Link-ului nu sunt obligatorii. Puteți folosi Quest Link la fel de bine în oricare din cele 2 moduri (cablu, wireless).
Asigurați-vă că aveți headset-ul și PC-ul / laptop-ul la care doriți să vă conectați în aceeași rețea locală
În continuare, puteți accesa Quest Link din meniul dedicat al căștii – de aici puteți să activați și funcția de Air Link
Găsiți
aici pașii oficial pentru configurarea Quest Link-ului în caz că întâmpinați probleme.
Air Link necesită o conexiune destul de bună via WiFi. În mod ideal, dacă este disponibilă, optați pentru conectarea la o rețea pe 5GHz.
🎮 Dacă doriți să vă jucați pe căști, recomandăm să utilizați aplicația Virtual Desktop (trebuie plătit), oferă o experiență și configurabilitate superioară Quest Link-ului!
Configurare Unity
Închideți momentan SteamVR (PC / laptop) și ieșiți din modul Link de pe cască - s-ar putea să existe mici quirk-uri mai ales dacă au fost instalate toate programele în același timp. Le vom reporni imediat!
Din File → Build Settings setați Windows, Mac, Linux ca platformă activă
Din meniul XR Loader Settings selectați activă opțiunea Set Steam VR Loader
În cazul în care nu vă apare acest meniu, sau dacă sunt actualizări ale acestuia, stergeți din proiect folder-ul Assets → Project Setup → CustomXRPluginProvider si reimportați ultima versiune a pachetului IRVA_ProjectSetup_XRPluginProviderController
, care se găsește în folder-ul UnityPackages din folder-ul root al proiectului, după care restartați Unity.
SteamVR necesită configurarea unor setări de input. În cazul în care acestea nu au fost realizate, deschideți tool-ul de la Window → SteamVR Input și apăsați pe butonul Save and Generate
Intrați în modul Link pe headset - așteptați până când se încarcă un nou environment virtual
Deschideți SteamVR pe PC / laptop. Pe cască ar trebui să vă apară un mesaj “Loading SteamVR”, urmat de încărcarea unui alte scene virtuale
Petru a confirma comunicarea corectă între Meta Quest App / Quest Link / Steam VR, verificați dacă în fereastra de SteamVR vă apar cele 3 iconițe colorate.
Nice work 🎉! Sunteți acum în modul PC VR!
Testare scene sample
Deschideți scena Assets → SteamVR → Simple Sample
Dați Play în editor - ar trebui să pornească rularea pe headset - dacă vi se încarcă scena pe care ați văzut-o în editor, puteți să va rotiți capul, iar în loc de controller-e vă apar mâini virtuale, configurarea până în prezent a avut loc cu succes
Setup laborator
În continuare veți lucra într-o scenă dedicată în care veți învăța elementele de bază utilizate în acest SDK, anume veți face setup unui mecanism de teleportare, veți integra obiecte interactibile precum și câteva interacțiuni fizice care se pot realiza cu acestea.
Import schelet laborator
Importați ultima versiune a pachetului IRVA_L2_VR_SteamVR_Skeleton
care se găsește în folder-ul UnityPackages din folder-ul root al proiectului
Folder-ul Assets → L2_VR_SteamVR_Basics conține asset-urile suport pentru acest laborator. Deschideți scena L2_VR_SteamVR_Sandbox
Această scenă conține un set de platorme, mese pe care sunt plasate deja câteva interactibile, precum și un lansator de mingi, pe care-l va trebui să-l folosiți în continuare.
Mecanica de teleportare
Deplasarea în spațiile VR este o problemă care poate fi destul de ușor rezolvată destul de ușor prin teleportarea la anumite puncte fixe - în general spațiul fizic de care dispunem nu este în concordanță cu dimeniunea spațiului virtual, așadar deplasarea (prin mers) nu reprezintă de cele mai multe ori o soluție fezabilă.
Pe lângă motivul prezentat anterior, de ce credeți că deplasarea în VR (de ex. prin folosirea movement stick-urilor de pe controller)
nu este o opțiune favorabilă?
Implementarea acestui mecanism folosind SteamVR este se poate realiza ușor, avem nevoie în esență de două tipuri de prefab-uri pe care să le punem în scenă:
Prefab-ul Teleporting (Assets → SteamVR → InteractionSystem → Teleport → Prefabs), care are deja implementată toată logica aferentă teleportării
Prefab-ul TeleportPoint (Assets → SteamVR → InteractionSystem → Teleport → Prefabs), care reprezintă un punct fix la care user-ul se poate teleporta
Așadar, adăugați în scenă un prefab Teleporing precum și mai multe TeleporPoint-uri
Poziționați-vă punctele de teleportare după plac, dar adăugați cel puțin unul pe platorma superioară (între mese)
Înainte de a testa mecanica de teleporare, veți avea nevoie de un Player. SteamVR include un atfel de prefab (Assets → SteamVR → InteractionSystem → Core → Prefabs) care e deja configurat cu tot ce ține de logica de cameră, tracking, controller-e, etc.
Boxing bag
În prefab-urile include în scheletul de laborator veți găsi [BoxingBag], un sac de box configurat pentru a răspunde interacțiunilor fizice.
Plasați prefab-ul la o locație dorită în scenă - adaugați, de asemenea, un nou teleporting point în vecinătatea acestuia
Puteți testa interacțiunile prin a lovi cu pumnii obiectul - dacă tineți apăsate în același timp ambele trigger-e puteți face din mâinile virtuale un pumn (nu e obligatoriu, doar în scop de imersiune)
Componenta copil BoxingBagRigidbody are atașat script BoxingBagPunchStrengthController
pe care va trebui să-l completați pentru a adauga câteva funcționalități (citiți si TODO
-urile din cod):
Pe metoda OnCollisionEnter
, calculați cât de puterică este lovitura - moduri sunt multiple - pentru o variantă simplă folosiți-vă de lungimea vectorului relativeVelocity
, pe care-l puteți citi de pe componenta Collider
primită ca parametru în metodă
Actualizați world space canvas-ul cu valoarea calculată anterior
Adăugați un sunet de punch și modulați-i volumul în funcție de valoarea calculată anterior
Aveți deja câteva sunete incluse în scheletul de laborator.
Obiecte interactible. Butoane
În prefab-urile include în scheletul de laborator veți găsi [InteractableButton], care este deja configurat pentru a răspunde input-ului de la user.
Observați script-urile atașate Hover Button
și Interactable
. Acesta din urmă este adăugat automat atunci când se atașează cel de HoverButton
.
Adăugați cel puțin un buton în scenă, pe una dintre mesele de pe platforma superioară.
Observați obiectul [ProjectileCannon] din scenă - acesta are atașat script-ul ProjectileCannonController
Va trebui să legați acțiunea de apăsare a butonului cu lansarea unui proiectul - logica pentru ambele este deja implementată, voi va trebui doar să le legați prin UnityEvent
-ul On Button Down expus în inspectorul script-ului HoverButton
Acum, dacă la apăsarea butonului se lansează o minge roșie către locația voastră, ați rezolvat cu succes task-ul!
Task-uri
Urmăriți pașii descriși în laborator pentru a vă face setup-ul - rezolvarea task-ului este marcată prin testarea folosind SteamVR a celor două scene sample
Implementați mecanica de teleportare în scena oferită ca suport pentru laborator
Adăugați prefab-ul Player la o poziție dorită în scenă
Integrați în scenă un obiect de tip Teleporting
Integrați în scenă mai multe obiecte de tip TeleportPoint, poziționate după plac, dar cel puțin unul pe platforma superioară (între mese)
Implementați mecanicile aferente sacului de box în scena oferită ca suport pentru laborator
Implementați mecanica de lansare a unui mingi folosind butoanele interactibile
Adăugați-vă pe mesele din scenă cel puțin un buton (aveți deja prefab-ul [InteractableButton])
Legați acțiunea de apăsare a butonului cu logica de lansare a unui proiectil (definită în script-ul ProjectileCannonController
)
Hint: Script-ul HoverButton
de pe prefab-ul de buton expune în inspector evenimentele OnButtonDown
și OnButtonUp
[✨Bonus✨] Implementați un obiect pe care să-l puteți lua în mână și care să interacționeze cu proiectilele lansate - de exemplu, o bâtă de baseball! Studiați scena suport sau cele sample pentru a determina ce tip de obiect interactibil aveți nevoie. Adăgați sunete la coliziuni. După nevoie, folosiți-vă de Physics Materials, aveți deja câteva predefinite în asset-urile importate