Differences

This shows you the differences between two versions of the page.

Link to this comparison view

irva:laboratoarevr:01 [2024/10/08 22:41]
andrei.lapusteanu typos
irva:laboratoarevr:01 [2024/10/16 00:22] (current)
andrei.lapusteanu Edited title
Line 1: Line 1:
-===== Laborator VR 01. Google Cardboard =====+===== Laborator VR 01. Google Cardboard ​XR =====
  
 ==== Înainte de a începe laboratorul... ==== ==== Înainte de a începe laboratorul... ====
Line 11: Line 11:
 </​note>​ </​note>​
  
-Link către ​repo-ul de git<​LINK_WIP>​+Link către ​[[https://​github.com/​UPB-Graphics/​IRVA|GitHub repo]].
  
 ==== Introducere ==== ==== Introducere ====
  
-**Google Cardboard (XR Plugin for Unity)** este un SDK ce permite dezvoltatorilor să creeze experințe în realitate virtuală folosind dispozitive mobile (smartphone-uri) în motorul de jocuri ​Unty. Acest plugin este destinat utilizării împreună cu Google Cardboard (vezi imaginea de mai jos), un dispozitiv de tip holder pentru telefoane, ce permite o variantă low-cost de a experimenta cu realitatea virtuală.+**Google Cardboard (XR Plugin for Unity)** este un SDK ce permite dezvoltatorilor să creeze experințe în realitate virtuală folosind dispozitive mobile (smartphone-uri) în motorul de jocuri ​Unity. Acest plugin este destinat utilizării împreună cu Google Cardboard (vezi imaginea de mai jos), un dispozitiv de tip holder pentru telefoane, ce permite o variantă low-cost de experimentare ​realitații virtuale.
  
 {{ :​irva:​laboratoare:​l6_cardboardgif.gif?​400 |}} {{ :​irva:​laboratoare:​l6_cardboardgif.gif?​400 |}}
Line 23: Line 23:
 {{ :​irva:​laboratoare:​l6_bt_controller.jpg?​200 |}} {{ :​irva:​laboratoare:​l6_bt_controller.jpg?​200 |}}
  
-În continuare puteți studia un demo ce prezintă laboratorul cu task-urile rezolvate (fără bonus-uri):​ +=== Highlights ​tehnologie ===
- +
-<​VIDEO_WIP>​ +
- +
-=== Higlights ​tehnologie ===+
  
   * **Compatibilitate**:​ Există suport atât pentru Android cât și pentru iOS   * **Compatibilitate**:​ Există suport atât pentru Android cât și pentru iOS
Line 44: Line 40:
 <note tip>În mod ideal, testarea funcționalităților din laborator se face folosind un dispozitiv de tip holder VR pentru smartphone, dar se poate testa și în absența acestuia. De asemenea, nu este necesară folosirea unui joystick pentru mobile.</​note>​ <note tip>În mod ideal, testarea funcționalităților din laborator se face folosind un dispozitiv de tip holder VR pentru smartphone, dar se poate testa și în absența acestuia. De asemenea, nu este necesară folosirea unui joystick pentru mobile.</​note>​
  
-În continuare puteți studia un demo ce prezintă laboratorul cu task-urile rezolvate (fără bonus-uri):+==== Integrare Google Cardboard XR Plugin în proiect ====
  
-<VIDEO_WIP>+<note warning>​ 
 +Asigurați-vă că aveți [[https://​git-scm.com|Git]] instalat pe sistemul vostru! Nu veți putea adăuga pachete via managerul de pachete din Unity folosit URL-uri git daca nu-l aveți. 
 +</note>
  
-==== Integrare Google Cardboard XR Plugin ​în proiect ====+Întrucât pașii pentru integrarea acestui pachet sunt bine descriși ​în [[https://​developers.google.com/​cardboard/​develop/​unity/​quickstart|acest]] acest ghid, vă recomandăm să-l urmați și voi - cel mai probabil veți face acești pași împreună cu asistentul de laborator.
  
-Întrucât pașii pentru integrarea acestui pachet sunt bine descrișîn [[https://​developers.google.com/​cardboard/​develop/​unity/​quickstart|acest]] acest ghidvă recomandăm să-l urmați și voi - cel mai probabil veți face acești pași împreună cu asistenul de laborator+Instalați, pe baza ghidului, sample-ul inclus în pachet.
  
-**⚠️ Atenție ⚠️** ​pentru ​build-urile pe Android! S-ar putea ca API-ul grafic Vulkan să nu ruleze deloc pe smartphone-ul vostru. Așadar, când ajungeți la pasul de setup al API-ului grafic: +{{ :​irva:​laboratoarevr:​irva_2024_vr_l1_cardboardsamples.png?​500 |}} 
-  * Asigurați-vă ca din **File -> Build Settings** este selectată platofrma Android + 
-  * Navigați la **Player Settings... -> Other Settings -> Graphics APIs** și setați ''​OpenGLES3''​ ca primul din listă ​+**⚠️ Atenție ⚠️** ​la build-urile pe Android! S-ar putea ca API-ul grafic Vulkan să nu ruleze deloc pe smartphone-ul vostru. Așadar, când ajungeți la pasul de setup al API-ului grafic: 
 +  * Asigurați-vă ca din **File -> Build Settings** este selectată platofrma ​**Android** 
 +  * Din **Player Settings -> Other Settings** debifați opțiunea **Auto Graphics API** 
 +  * Navigați la **Player Settings -> Other Settings -> Graphics APIs** și setați ''​OpenGLES3''​ ca primul din listă ​
  
 {{ :​irva:​laboratoarevr:​irva_2024_vr_l1_graphicsapis.png?​500 |}} {{ :​irva:​laboratoarevr:​irva_2024_vr_l1_graphicsapis.png?​500 |}}
Line 66: Line 67:
 {{ :​irva:​laboratoarevr:​irva_2024_vr_l1_xrloader.png?​300 |}} {{ :​irva:​laboratoarevr:​irva_2024_vr_l1_xrloader.png?​300 |}}
  
-<note important>​Notați existența acestui meniu întrucât la trebui să-l folosiți și să selectați opțiunea corespunzătoare și în următoarele laboratoare de VR.</​note>​+<note warning>​ 
 +În cazul în care toate elementele din meniu sunt grayed out și prmiți null ref-uri în consolă, încercați să restartați editorul. 
 +</​note>​ 
 + 
 +<note important>​ 
 +  * Notați existența acestui meniu întrucât la trebui să-l folosiți și să selectați opțiunea corespunzătoare și în următoarele laboratoare de VR. 
 +  * Î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. 
 +</​note>​
  
 Pentru acest laborator va trebui să setați activă opțiunea **Set Cardboard XR Loader**. Funcționarea este marcată în felul următor: Pentru acest laborator va trebui să setați activă opțiunea **Set Cardboard XR Loader**. Funcționarea este marcată în felul următor:
Line 78: Line 86:
  
   * Mergeți în **File > Build Settings** și asigurați-vă că platforma pentru care doriți să faceți build este corectă. În caz contrar, faceți switch pe platforma dorită (Android sau iOS)   * Mergeți în **File > Build Settings** și asigurați-vă că platforma pentru care doriți să faceți build este corectă. În caz contrar, faceți switch pe platforma dorită (Android sau iOS)
-  * Vom testa scena **Assets -> Samples -> Google Cardboard XR Plugin for Unity -> <​versiune>​ -> Hello Cardboard -> Scenes -> HelloCardboard**. Mergeți în **File -> Build Settings** și setați această scenă ca fiind singura activă (folosind checkbox-ul) în panoul de **Scenes In Build**+  * Vom testa scena **Assets -> Samples -> Google Cardboard XR Plugin for Unity -> <​versiune>​ -> Hello Cardboard -> Scenes -> HelloCardboard**. ​ 
 +  * Mergeți în **File -> Build Settings** și setați această scenă ca fiind singura activă (folosind checkbox-ul) în panoul de **Scenes In Build**
  
-{{ :​irva:​laboratoarevr:​irva_2024_vr_l1_buildscenes.png?​500 |}}+{{ :​irva:​laboratoarevr:​irva_2024_vr_l1_buildscenes.png?​600 |}}
  
   * Vom realiza un build acum pe smartphone! Pașii următori sunt specifici unui telefon Android:   * Vom realiza un build acum pe smartphone! Pașii următori sunt specifici unui telefon Android:
Line 110: Line 119:
 Veți avea de implementat un joculeț în care se spawnează în mod contnuu baloane, care pot fi sparte dacă player-ul le privește pentru un timp îndelungat – așadar, ne folosim de acest concept de gaze interaction. O parte a jocului este deja implementată,​ voi va trebui sa urmăriți todo-urile din cod pentru rezolva complet laboratorul. Veți avea de implementat un joculeț în care se spawnează în mod contnuu baloane, care pot fi sparte dacă player-ul le privește pentru un timp îndelungat – așadar, ne folosim de acest concept de gaze interaction. O parte a jocului este deja implementată,​ voi va trebui sa urmăriți todo-urile din cod pentru rezolva complet laboratorul.
  
-  * Deschideți scena **Assets -> L6_GoogleCardboard -> Scenes -> L6_BalloonPopper**+==== Import schelet laborator ====
  
-{{ :irva:laboratoare:l6_game-hierarchy.png?200 |}}+  * Importați ultima versiune a pachetului ''​IRVA_L1_VR_GoogleCardboardXR_Skeleton''​ care se găsește în folder-ul **UnityPackages** din folder-ul root al proiectului 
 +  * Folder-ul **Assets -> L1_VR_GoogleCardboard** conține asset-urile suport pentru acest laborator 
 +  * Deschideți scena **Assets -> L1_VR_GoogleCardboard -> Scenes -> L1_VR_GoogleCardboard_BalloonPopper** 
 + 
 +{{ :irva:laboratoarevr:irva_2024_vr_l1_skeletonscene.png?200 |}}
  
   * **BaloonSpawner** este obiectul care va instanția baloanele în scenă. Acesta se află în zona podelei scenei. Are o componentă de tip BoxCollider,​ în volumul căreia trebuie instanțiate baloanele la locații random   * **BaloonSpawner** este obiectul care va instanția baloanele în scenă. Acesta se află în zona podelei scenei. Are o componentă de tip BoxCollider,​ în volumul căreia trebuie instanțiate baloanele la locații random
   * **BaloonController** (nu se regăsește în ierarhie, este un script atașat prefab-ului ‘Baloon’) reprezintă obiectul de tip balon – acesta trebuie să fie translatat pe Y și va conține logica de interacțiune cu reticle-ul player-ului   * **BaloonController** (nu se regăsește în ierarhie, este un script atașat prefab-ului ‘Baloon’) reprezintă obiectul de tip balon – acesta trebuie să fie translatat pe Y și va conține logica de interacțiune cu reticle-ul player-ului
   * **BalloonPopper** are atașat un script ce distruge baloanele dacă există overlap cu collider-ul obiectelor de tip balon. Acesta este definit în zona de tavan a scenei   * **BalloonPopper** are atașat un script ce distruge baloanele dacă există overlap cu collider-ul obiectelor de tip balon. Acesta este definit în zona de tavan a scenei
-  * **ScoreCanvas** conține logică pentru scor și poate seta textul unui element de UI definit în worldspace+  * **ScoreCanvas** conține logică pentru scor și poate seta textul unui element de UI definit în world space
  
 ==== Task-uri ==== ==== Task-uri ====
  
-  - Realizați un build folosind scena sample din plugin ​– validați funcționarea corectă a acestui build – ar trebui sa aveți un render stereoscopicsă se realizeze head tracking-ul, iar obiectul ‘Treasure’ din scenă ar trebui să-și schimbe culoarea dacă reticle-ul player-ului interacționează cu aceasta +  - Realizați un build folosind scena sample din plugin. Validați funcționarea corectă a acestui build
-  - Instanțiați obiectele de tip balon din script-ul de spawnerCalculați, de asemenea, poziția acestora de instanțiere +    * Ar trebui sa aveți un render stereoscopic 
-  - Realizați translația baloanelor instanțiate ​– în cel mai simplu mod, translatați-le cu o viteză constantă pe axa Y +    * Ar trebui ​să se realizeze head tracking-ul 
-  - Implementați mecanica de spargere a baloanelor ​– întâi, setați flag-ul ce denotă faptul că un balon este privit ​(targeted)iar apoi, implementați logica de timerÎn esență, atât timp cât balonul ​este privitacest timer trebuie incrementat – daca timpul contorizat este mai mare decât o limită impusă, spargeți balonul ​folosind metodele deja implementate +    * Obiectul 'Treasure' ​din scenă ar trebui să-și schimbe culoarea dacă reticle-ul player-ului interacționează cu aceasta 
-  - Implementați funcționalitatea de scor – un balon spart de player reprezintă un punct primit, un balon spart de catre BalloonPopper reprezintă un punct scăzut. ​**ScoreController** și **BalloonPopper*conțin todo-urile relevante acestui task +  - Importați scheletul de laborator 
- +    * Din toolbar-ul editor-ului,​ **Assets -> Import Package -> Custom Package** 
 +    * Selectați ultima versiune a pachetului ''​IRVA_L1_VR_GoogleCardboard_Skeleton''​ care se găsește în folder-ul **UnityPackages** din folder-ul root al proiectului 
 +  - Instanțiați obiectele de tip balon  
 +    * Instanțiați obiectele ​din script-ul de spawner ​la o poziție random in volumul ''​BoxCollider''​-ului atașat de obiectul spawner 
 +    * Calculați, de asemenea, poziția acestora de instanțiere 
 +  - Realizați translația baloanelor instanțiate 
 +    * În cel mai simplu mod, translatați-le cu o viteză constantă pe axa Y 
 +  - Implementați mecanica de spargere a baloanelor 
 +    * Aveți în script-ul ce controlează baloanele metodele ''​OnPointerEnter''​ și ''​OnPointerExit'',​ care sunt apelate în mod automat atunci când un balon este privit ​sau când se încheie privirea acestuia 
 +    * **Cât timp** un balon este **targeted**incrementați timer-ul intern 
 +    * **În momentul** în care un balon **nu mai este targeted**restetați ​timer-ul intern 
 +    * Dacă timer-ul intern **depășește** valoarea maximă definită (variabila ''​requiredTimeToPop''​)**spargeți balonul** 
 +  - Implementați funcționalitatea de **scor**  
 +    * Un balon spart de jucător va **incrementa** scorul 
 +    * Un balon spart de tavan (ratat de jucător) va **decrementa** scorul 
 +    ​Folosiți-vă de ''​ScoreController''​ pentru a ține cont de scor și pentru a actualiza componenta text 
irva/laboratoarevr/01.1728416519.txt.gz · Last modified: 2024/10/08 22:41 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