This is an old revision of the document!


Laborator VR 01. Google Cardboard

Înainte de a începe laboratorul...

  • Vă recomandăm să studiați aici câteva concepte generale ce țin de realitatea virtuală
  • Înainte de a începe implementarea laboratorului:
    • Asigurați-vă că îndepliniți cerințele tehnice deschise aici
    • Aveți setup-ul pentru Unity realizat, puteți studia acesta aici
  • Vă recomandăm să urmăriți pașii descriși în acest ghid pentru setup-ul proiectului împreună cu Git. Vă va ușura munca pe parcursul semestrului.

Link către repo-ul de git: <LINK_WIP>

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

Aceste dispozitive de tip holder se pot achiziționa de la diverse brand-uri – se pot achiziționa, de asemenea, controller-e de tip joystick ce comunică pe Bluetooth cu telefonul, pentru a avea un control sporit în scenele virtuale (de exemplu, se poate implementa movement-ul sau diferite interacțiuni folosing aceste controller-e).

În continuare puteți studia un demo ce prezintă laboratorul cu task-urile rezolvate (fără bonus-uri):

<VIDEO_WIP>

Higlights tehnologie

  • Compatibilitate: Există suport atât pentru Android cât și pentru iOS
  • Integrare seamless: Se folosește de framework-ul de XR din Unity, facilitând astfel dezvoltarea rapidă a aplicațiilor de tip VR
  • Feature-uri: Suport pentru head tracking (folosind senzorii giroscopici și accelerometrele găsite în telefoane), randare stereoscopică (un render pentru fiecare ochi – se desenează fiecare render pe jumătate din ecranul dispozitivului), precum și diverse metode implementate în software, precum gaze interaction, ce permite interacțiunea cu diverse obicte prin simpla privire a acestora

În mod evident, soluțiile dedicate pentru VR (HTC Vive, Meta Quest 2/3, Meta Pro, etc.) oferă o experiență virtuală mult superioară procesării posibile pe un smartphone, dar acest plugin ne permite să avem un prim sneak peek al tehnologiei VR într-un mod accesibil.

Overview laborator

În cadrul acestui laborator:

  • Prezentăm pe scurt modalitatea de integrare a plugin-ului într-un proiect de Unity
  • Testăm demo sample-ul pentru a valida funcționarea corectă a plugin-ului
  • Implementăm cateva feature-uri pentru un joc simplu (balloon popper), ce funcționează pe conceptul de gaze interaction

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

În continuare puteți studia un demo ce prezintă laboratorul cu task-urile rezolvate (fără bonus-uri):

<VIDEO_WIP>

Integrare Google Cardboard XR Plugin în proiect

Întrucât pașii pentru integrarea acestui pachet sunt bine descriși în acest acest ghid, vă recomandăm să-l urmați și voi - cel mai probabil veți face acești pași împreună cu asistenul de laborator.

⚠️ 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:

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

Pre-build setup

Îndată ce se încheie instalarea pachetului Google Cardboard XR Plugin, ar trebui să vă apară în toolbar-ul (de sus) din Unity un nou menu item, pe care va trebui să-l folosiți pentru a seta o serie de dependințe ce țin de bibliotecile XR.

În proiectul Unity de VR veți include, pe parcursul laboratoarelor, diverse SDK-uri necesare pentru rezolvarea acestora. Întrucât integrarea tuturor acestora într-un singur proiect poate crea unele probleme, a fost implementat un editor script custom (accesat din acest meniu) care se ocupă de configurarea soluției dependent de laboratorul pentru care doriți să faceți build.

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.

Pentru acest laborator va trebui să setați activă opțiunea Set Cardboard XR Loader. Funcționarea este marcată în felul următor:

  • Mesajele de tip info denotă o configurație aplicată cu succes
  • Mesajele de tip warning denotă faptul că probabil nu aveți un anume SDK instalat - este normal pentru acest prim laborator de VR!
  • Mesajele de tip eroare indică o posibilă problemă

Testarea scenei sample

  • 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ă (folosing checkbox-ul) în panoul de Scenes In Build

  • Vom realiza un build acum pe smartphone! Pașii următori sunt specifici unui telefon Android:
    • Conectați-vă telefonul prin cablu la laptop / PC
    • Puneți telefonul în modul de transfer de fișiere
  • În continuare, puteți crea un Build pe care să-l testați pe telefon. Pentru a realiza acest build, din acesași panoul (Build Settings), selectați Build sau Build And Run:
    • Build va crea un fișier .apk pe care-l va trebui apoi manual să-l copiați pe telefon și să-l instalați
    • Build And Run va crea un fișier .apk, și-l va instala automat pe telefon

Build And Run e destul de picky și câteodata s-ar putea să nu funcționeze conform așteptărilor. Din acest motiv, vă recomandăm în general Build și instalarea manuală.

Scena demo sample:

Ierarhia scenei sample:

Testarea scenei sample

  • CubeRoom reprezinta modelul environment-ului scenei
  • Treasure reprezinta un obiect interactibil – daca îl studiați în inspector, veți observa că are atașat un script de tip ObjectController
  • Camera are un obiect copil numit CardboardReticlePointer ce reprezintă reticle-ul / crosshair-ul direcției de vizualizare. Script-ul atașat pe acesta interacționează cu script-urile de tip ObjectController, căruia îi transmite mesaje de tip OnPoinerEnter și OnPointerExit, ceea ce denotă acțiunea de gaze (privire) asupra obiectelor

Implementarea jocului

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

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

Task-uri

  1. Realizați un build folosing scena sample din plugin – validați funcționarea corectă a acestui build – ar trebui sa aveți un render stereoscopic, să 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
  2. Instanțiați obiectele de tip balon din script-ul de spawner. Calculați, de asemenea, poziția acestora de instanțiere
  3. Realizați translația baloanelor instanțiate – în cel mai simplu mod, translatați-le cu o viteză constantă pe axa Y
  4. 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 privit, acest timer trebuie incrementat – daca timpul contorizat este mai mare decât o limită impusă, spargeți balonul folosind metodele deja implementate
  5. 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
irva/laboratoarevr/01.1728416303.txt.gz · Last modified: 2024/10/08 22:38 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