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 Link ș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 Link 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.
Setup Quesk Link
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.
-
Dacă lucrați pe un headset împrumutat de la facultate, logați-vă în Meta Quest Link cu credențialele aferente codului unic al hedset-ului vostru (vezi headset sau cutie), aveți aceste credențiale «<aici LINK»>.
După instalare, în Meta Quest Link o să vă apară un prompt. Urmați pașii de la Set as default
Quest Link (cablu)
În cazul în care la etapa
Connect Your Headset din setup casca nu este detectată (buffering circle continuu pentru +1 minut) încercați, în ordinea asta:
Reinserați cablul în headset
Reluați setup-ul din aplicație (Meta Quest Link)
În modul Connect Your Headset, cu casca conecată, restartați headset-ul
Găsiți
aici pașii oficial pentru configurarea Quest Link-ului în caz că întâmpinați probleme.
Quest Link (wireless): 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.
Validare setup
Pentru a vă asigura că modul link funcționează corect, verificați următoarele aspecte:
În Meta Quest Link, în meniul Devices, vă apare headset-ul în statusul conectat
Verificați dacă din meniul de Link din cască vă puteți conecta - pentru PC-ul / laptop-ul pe care ați făcut configurarea butonul ar trebui să indice Launch
Dacă ajungeți într-o noua scenă virtuală (precum este ilustrat în GIF-ul de mai jos), conectarea prin link a avut loc cu succes!
🎮 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 Profiles setați
Windows ca platformă activă (sau pe ce
OS lucurați)
Din meniul XR Loader Settings selectați activă opțiunea Set Steam VR Loader. Confirmați aplicarea setărilor în consola din Unity (de interes pentru acest laborator este doar platforma Standalone)
Î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, confirmați prompt-ul Copy Examples și apăsați pe butonul Save and Generate
Intrați în modul Link pe headset
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, specifice SteamVR-ului
Petru a confirma comunicarea corectă între Meta Quest Link / Quest Link / Steam VR, verificați dacă în fereastra de SteamVR vă apar cele 3 iconițe colorate.
Testare scene sample
Deschideți scena Assets → SteamVR → Simple Sample
Deoarece acum ar trebui să fiți în modul Link pe headset, iar SteamVR ar trebui să ruleze, puteți testa orice scenă compatibilă doar prin apăsarea butonului Play în editor - ar trebui să pornească rularea pe headset - ar trebui să puteți să va rotiți capul, și să vedeți controllerele
Have some fun în scena Assets → SteamVR → InteractionSystem → Samples → Interactions_Example. Încercați diversele tipuri de interacțiuni posibile, observați cum funcționează mecanica de teleportare - o să aveți câteva instrucțiuni și în scenă
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 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 în scenă
Creați-vă un Teleport Area în zona dintre mesele de pe platforma superioară
Spre deosebire de Telepor Point-uri, care pemite teleportarea la un Transform
prefixat, un Teleport Area definește o suprafață pe care se admite teleportarea
Adăugați și scalați un plan 3D la nivelul picioarelor între mesele de pe platformă
Adăugați obiectului nou creat compnenta TeleportArea
în inspector
Găsiți
aici un tutorial mai detaliat legat de acest proces
Î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.
Un exemplu de scenă configurată cu câteva Teleport Point-uri precum și Teleport Area-ul este ilustrat în GIF-ul de mai jos.
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 punct sau suprafață de teleportarea în proximitatea 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 precum și cel puțin un Teleport Area
Implementați mecanicile aferente sacului de box în scena oferită ca suport pentru laborator
Adăugați prefab-ul [BoxingBag], precum și o modalitate de teleportare către acesta
Completați TODO
-urile din script-ul BoxingBagPunchStrengthController
Calculați cât de puternică este lovitura
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
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
)
[✨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