This shows you the differences between two versions of the page.
irva:laboratoarevr:02 [2024/10/11 13:07] andrei.lapusteanu |
irva:laboratoarevr:02 [2024/10/21 23:03] (current) andrei.lapusteanu Update SteamVR quirk |
||
---|---|---|---|
Line 20: | Line 20: | ||
De asemenea, **SteamVR** permite utilizarea a multiple headset-uri, câteva exemple ar fi: | De asemenea, **SteamVR** permite utilizarea a multiple headset-uri, câteva exemple ar fi: | ||
* Meta Quest (2, 3, Pro) | * Meta Quest (2, 3, Pro) | ||
- | * HTV Vive | + | * HTC Vive |
* Valve Index | * Valve Index | ||
Line 27: | Line 27: | ||
==== PC VR ==== | ==== PC VR ==== | ||
- | Ca și concept **PC VR** ar avantajul că se folosește de puterea suporioară 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. | + | 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 ==== | ||
Line 43: | Line 43: | ||
* Va trebui să aveți să aveți un cont pe [[ https://store.steampowered.com|Steam]]. | * Va trebui să aveți să aveți un cont pe [[ https://store.steampowered.com|Steam]]. | ||
* Instalați [[https://store.steampowered.com/app/250820/SteamVR/|SteamVR]]. | * Instalați [[https://store.steampowered.com/app/250820/SteamVR/|SteamVR]]. | ||
- | * Luați ultima variantă a repo-ului de VR <LINK_VR>, deschideți proiectul de Unity. | + | * Luați ultima variantă a [[https://github.com/UPB-Graphics/IRVA|repo-ului]], deschideți proiectul de Unity. |
* În continuare va trebui să instalați **SteamVR Plugin** pentru Unity. Îl puteți accesa de [[https://assetstore.unity.com/packages/tools/integration/steamvr-plugin-32647?srsltid=AfmBOoqauVQrCs1Pf_rKe3_SsgniooI_GMEj8ARqyR0ET5YHJDHb3gIt|aici]]. | * În continuare va trebui să instalați **SteamVR Plugin** pentru Unity. Îl puteți accesa de [[https://assetstore.unity.com/packages/tools/integration/steamvr-plugin-32647?srsltid=AfmBOoqauVQrCs1Pf_rKe3_SsgniooI_GMEj8ARqyR0ET5YHJDHb3gIt|aici]]. | ||
* După finalizarea instalării, o să vă apară un pop-up legat de anumite setări necesare - acceptați prompt-ul | * După finalizarea instalării, o să vă apară un pop-up legat de anumite setări necesare - acceptați prompt-ul | ||
Line 49: | Line 49: | ||
{{ :irva:laboratoarevr:irva_2024_vr_l2_steamvrprompt.png?200 |}} | {{ :irva:laboratoarevr:irva_2024_vr_l2_steamvrprompt.png?200 |}} | ||
- | * Întrucât proiectul de Unity folosește URP (Universal Rendering Pipeline), materialele importate împreună cu plugin-ul vor fi (majoritatea) broken. Pentru a rezolva această problemă, navigați din toolbar la **Window -> Rendering -> Render Pipeline Converter**, asigurațivă că prima opțiune este **Built-in to URP**, bifați opțiunile prezentate, după care apăsați pe **Initialize And Convert**. | + | <note important>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**.</note> |
- | + | ||
- | {{ :irva:laboratoarevr:irva_2024_vr_l2_urpupgrade2.png?400 |}} | + | |
==== Meta Quest App ==== | ==== Meta Quest App ==== | ||
Line 95: | Line 93: | ||
<note>Găsiți [[https://www.meta.com/help/quest/articles/headsets-and-accessories/oculus-link/connect-with-air-link/|aici]] pașii oficial pentru configurarea Quest Link-ului în caz că întâmpinați probleme.</note> | <note>Găsiți [[https://www.meta.com/help/quest/articles/headsets-and-accessories/oculus-link/connect-with-air-link/|aici]] pașii oficial pentru configurarea Quest Link-ului în caz că întâmpinați probleme.</note> | ||
+ | |||
+ | <note> | ||
+ | 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. | ||
+ | </note> | ||
<note tip>🎮 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!</note> | <note tip>🎮 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!</note> | ||
Line 111: | Line 113: | ||
- | * **SteamVR** necesită configurarea unor setări de input. În cazul în care acestea nu au fost realizate, deschideți tool-ul dela **Window -> SteamVR Input** și apăsați pe butonul **Save and Generate** | + | * **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 | * 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 | * 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 | ||
Line 125: | Line 127: | ||
==== Testare scene sample ==== | ==== Testare scene sample ==== | ||
- | * Deschideți scena **Assets -> SteamVR -> Simple Scene** | + | * 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 | * 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 -> 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ă | + | * 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ă |
{{ :irva:laboratoarevr:irva_2024_vr_steamvr_1_gif.gif?400 |}} | {{ :irva:laboratoarevr:irva_2024_vr_steamvr_1_gif.gif?400 |}} | ||
Line 138: | Line 140: | ||
==== Import schelet laborator ==== | ==== Import schelet laborator ==== | ||
- | * Importați ultima versiune a pachetului ''WIP_NAME'' care se găsește în folder-ul **UnityPackages** din folder-ul root al proiectului | + | * 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** conține asset-urile suport pentru acest laborator. Deschideți scena ''L2_VR_SteamVR_Sandbox'' | + | * Folder-ul **Assets -> L2_VR_SteamVR_Basics** conține asset-urile suport pentru acest laborator. Deschideți scena ''L2_VR_SteamVR_Sandbox'' |
{{ :irva:laboratoarevr:irva_2024_vr_l2_demoscene.png?400 |}} | {{ :irva:laboratoarevr:irva_2024_vr_l2_demoscene.png?400 |}} | ||
Line 154: | Line 156: | ||
</note> | </note> | ||
- | Implementarea acestui mecasism 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ă | + | 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 **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 | * Prefab-ul **TeleportPoint** (**Assets -> SteamVR -> InteractionSystem -> Teleport -> Prefabs**), care reprezintă un punct fix la care user-ul se poate teleporta | ||
Line 160: | Line 162: | ||
{{ :irva:laboratoare:htcviveteleportpoint.png?300 |}} | {{ :irva:laboratoare:htcviveteleportpoint.png?300 |}} | ||
- | * Așdar, adăugați în scenă un prefab **Teleporing** precum și mai multe **TeleporPoint**-uri | + | * 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) | * 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. | Î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ă. | + | * Adăugați prefab-ul **Player** la o poziție dorită în scenă |
* Testați scena și punctele de teleportare setate | * Testați scena și punctele de teleportare setate | ||
Line 173: | Line 175: | ||
* Plasați prefab-ul la o locație dorită în scenă - adaugați, de asemenea, un nou teleporting point în vecinătatea acestuia | * 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 și butonul A puteți face din mâinile virtuale un pumn (nu e obligatoriu, doar în scop de //imersiune//) | + | * 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): | * 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ă | * 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ă | ||
Line 196: | Line 198: | ||
- 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 | - 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 | + | - Implementați mecanica de **teleportare** în scena oferită ca suport pentru laborator |
- | * Integrați în scenă un obiect de tip **Teleporter** | + | * Adăugați prefab-ul **Player** la o poziție dorită în scenă |
- | * Integrați în scenă mai multe obiecte de tiă **TeleportPoint**, poziționate după plac, dar cel puțin unul pe platforma superioară (între mese) | + | * 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 mecanicile aferente **sacului de box** în scena oferită ca suport pentru laborator | ||
* Adăugați prefab-ul **[BoxingBag]** (plus un **TeleportPoint** în proximitatea acestuia) | * Adăugați prefab-ul **[BoxingBag]** (plus un **TeleportPoint** în proximitatea acestuia) | ||
* Completați ''TODO''-urile din script-ul ''BoxingBagPunchStrengthController'' | * Completați ''TODO''-urile din script-ul ''BoxingBagPunchStrengthController'' | ||
* Calculați cât de puternică este lovitura | * Calculați cât de puternică este lovitura | ||
- | * Afișați rezultatul pe world space canvas-ul atașat obiectului | ||
* Actualizați world space canvas-ul cu valoarea calculată anterior | * 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 | * 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 | - 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]**) | * 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 (script-ul ''ProjectileCannonController'') | + | * 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 obeiect 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. | + | * 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 | ||
{{ :irva:laboratoarevr:irva_2024_vr_steamvr_3_gif.gif?400 |}} | {{ :irva:laboratoarevr:irva_2024_vr_steamvr_3_gif.gif?400 |}} |