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

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

  • Va trebui să aveți să aveți un cont pe Steam.
  • Instalați SteamVR.
  • Luați ultima variantă a repo-ului, deschideți proiectul de Unity.
  • În continuare va trebui să instalați SteamVR Plugin pentru Unity. Îl puteți accesa de aici.
  • După finalizarea instalării, o să vă apară un pop-up legat de anumite setări necesare - acceptați prompt-ul

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.

Meta Quest App

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.

  • Porniți headset-ul și conectați-l la PC / laptop
  • Asigurați-vă că toggle-ul de Quest Link este activ în setările headset-ului. Acesta îl găsiți în Settings → System → Quest Link

  • Instalați Meta Quest App pe PC-ul sau laptop-ul vostru
  • După instalare, în Meta Quest App o să vă apară un prompt. Urmați pașii de la Set as default

  • În continuare este probabil să vă apară un prompt pentru configurarea Quest Link-ului din Meta Quest App. Puteți confirma prompt-ul și urmați pașii de configurare.

  • Puteți alege conectarea prin cablu sau wireless (cea wireless este explicată în detaliu și mai jos)
  • Confirmați eventuale prompt-uri ce țin de update-uri de driver

Găsiți aici pașii oficial pentru configurarea Quest Link-ului în caz că întâmpinați probleme.

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

  • Încheiați configurarea prin confirmarea codului de conectare din Meta Quest App
  • Dacă totul s-a realizat cu succes ar trebui să fie interactibil butonul de Pair din meniul de Quest Link de pe headset.

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

  • Adăugați prefab-ul Player la o poziție dorită în scenă
  • Testați scena și punctele de teleportare setate

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

  1. 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
  2. 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)
  3. Implementați mecanicile aferente sacului de box în scena oferită ca suport pentru laborator
    • Adăugați prefab-ul [BoxingBag] (plus un TeleportPoint în proximitatea acestuia)
    • 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
  4. 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
  5. [✨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

irva/laboratoarevr/02.txt · Last modified: 2024/10/21 23:03 by andrei.lapusteanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0