Laboratorul 07. HTC Vive

Pentru laboratoarele de VR va trebui să descărcați acest repo: https://github.com/Andrei-Lapusteanu/IRVA_VR. We strongly recommend să vă clonați repo-ul (nu download .zip) întrucât vor exsita update-uri la acesta!

HTC Vive este unul dintre cele mai populare sisteme de realitate virtuală. Este considerat un standard al realității virtuale. Acesta asigură tracking cât mai exact atât al HMD-ului (head mounted display) și al controllerelor,​ cât și al multiplelor accesorii care pot fi adăugate în plus, precum trackere.

Hardware

Pentru a fi funcțional,​ HTC Vive presupune o serie de componente de bază:

  • HMD
  • 2 x controller
  • 2 x base station (stații care emit raze infraroșu pentru a detecta casca VR și controllerele aferente)

În plus, sistemului îi pot fi adăugate o serie de accesorii, în funcție de aplicație:

  • Trackers
  • Tracker facial
  • Tracker pentru încheietură
  • Adaptor wireless

Software

SteamVR

Pentru a putea dezvolta aplicații pentru HTC Vive, folosind Unity, putem folosi SteamVR. SteamVR este o aplicație propietară Steam, care este folosită atât de utilizatorii obișnuiți care doresc să se joace jocuri VR, cât și de dezvoltatori în dezvoltarea acestor jocuri. SteamVR oferă suport pentru multiple HMD-uri, precum Valve Index, HTC Vive, Oculus Rift sau Windows Mixed Reality.

Pentru a putea folosi SteamVR, este necesar să avem un cont pe Steam și să aveam Steam instalat pe calculator. Pe urmă, putem instala SteamVR.

Setup Unity

Odată instalat SteamVR, putem să ne jucăm orice joc VR. Cu toate astea, ca să putem crea propriile aplicații, este nevoie și de un plugin pentru Unity. Din Unity Asset Store trebuie să importăm SteamVR Plugin.

Odată instalat pluginul, acceptăm setările default pentru SteamVR. Pe urmă, setăm proiectul pentru un proiect VR, nu AR: Edit → Project Settings → XR Plug-in Management → PC → OpenVR Loader.

Ultimul pas în configurarea proiectului este să generăm acțiunile specifice pentru input-ul VR:Window → SteamVR Input. Acceptăm setările default și le salvăm (Save and Generate).

Player. Camera

Pentru a putea avea control asupra HMD-ului si a controllerelelor, trebuie să adăugăm în scena default Unity prefab-ul Player. Acesta conține printre altele, componentele specifice mâinilor (controllerelelor) și ale HMD-ului. Cum orice joc VR este first person, jucătorul are o cameră asociată. Drept urmare, camera default din Unity nu este necesară. Aceasta trebuie ștearsă. Odată adăugat prefab-ul, putem testa aplicația. Observăm cum jucătorul din VR se mișcă în funcție de mișcările noastre.

Deplasare în VR

O problemă importantă în aplicațiile VR este deplasarea. Pe de o parte, dacă în lumea reală ne deplasăm, ne deplasăm automat și în VR. Pe de altă parte, de obicei este indicat să nu facem acest lucru mai mult de câțiva pași, deoarece este foarte ușor să ne rănim. Drept urmare, deplasarea în VR pe distanțe mai mari trebuie făcută din cod.

Dacă am implementa deplasarea în mod clasic, ca în orice joc pe calculator (cât timp țin apăsat pe tasta W merg înainte), utilizatorul ar suferi de rău de mișcare (corpul nu se mișcă; cu toate astea ochii percep mișcare). Așadar, această soluție nu este fezabilă. În schimb, în aplicațiile VR s-a încetățenit ideea de teleportare pentru a parcurge distanțe mari.

Pentru a implementa teleportarea, în primul rând este necesar să adăugăm prefab-ul Teleporting. Acest prefab conține toată logica din spatele conceptului de teleportare. Cu toate acestea, dacă testăm acum aplicația, o să vedem că încă nu ne putem teleporta. Asta pentru că, pentru a ne putea teleporta, avem nevoie să definim zonele în care avem voie să mergem. Acest lucru se poate face în 2 moduri:

  1. Teleport Points
  2. Teleport Area

Un teleport point este un punct în spațiul 3D în care ne putem teleporta. Jucătorul este limitat strict la coordonatele acelui punct. Pentru a implementa mișcarea folosind astfel de puncte de teleportare, adăugăm în scenă prefab-ul TeleportingPoint de câte ori avem nevoie. Pe urmă, poziționăm fiecare instanță la poziția la care jucătorul se poate teleporta.

Un teleport area este o suprafață în care jucătorul se poate teleporta. De data aceasta, jucătorul nu mai este limitat să se teleporteze într-un singur punct, ci se poate teleporta oriunde pe acea suprafață. Pentru a adăuga o astfel de zonă de teleportare, mai întâi trebuie să adaăugam un plan simplu în scenă, căruia îi setăm ce poziție și dimensiune dorim. Pe urmă, pe acest plan, adăugăm scriptul Teleport Area, care va transforma întregul plan într-o zonă de teleportare.

Interacțiunea cu Obiectele în VR

Pentru a interacționa cu obiectele în VR (să le luăm în mână de exemplu), este suficient să atașăm scriptul Interactable pe ele. Mai mult, dacă vrem să aplicăm legile fizice pe aceste obiecte sau dacă vrem să le putem arunca, putem atașa și scriptul Throwable, care automat atașează obiectului un RigidBody.

Adăugarea unui Tracker

Dacă dorim să folosim și accesorii HTC Vive, este suficient să le facem pair din SteamVR. Odată setate, avem acces la oricând la ele în Unity. Ca să le putem vizualiza în aplicație, trebuie să atașăm scriptul Steam VR_Tracked Object pe obiectul 3D care va reprezenta tracker-ul (de exemplu, un cub). Odată atașat, trebuie specificat ce device vrem să reprezinte obiectul 3D. Astfel, vom modifica parametrul Index al scriptului.

Pentru a știi ce valoare dăm acestui index, ne uităm la device-urile conectate din SteamVR. Primul device, este HMD-ul în sine, deci acestuia îi va corespunde index-ul 1; al doilea device este un controller, deci indexul 2 este pentru unul din controollere; etc. Astfel, observăm că pentru tracker, trebuie să setăm index-ul 5.

Tasks

Setup-ul pentru SteamVR in Unity a fost deja facut in proiectul suport (https://github.com/Andrei-Lapusteanu/IRVA_VR). Nu uitati sa luati ultimele update-uri!

  1. Realizați setup-ul necesar rularii proiectului in VR: Update repository, instalare SteamVR (pachet in Unity), conexiune hardware intre casca si calculator. Veti avea de implementat cateva functionalitati in scena Assets → L7_HTCVive → Scenes → HTCViveLab
  2. Adaugati in scena prefab-ul Player. Testati head tracking-ul si controller-ele prin rularea proiectului (play din Unity Editor)
  3. Adaugati cateva zone de teleportare pentru a putea urca treptele. Plasati ultima zona de teleportare intre mesele de pe platforma superioara. Nu uitati sa va adaugati prefab-ul Teleporting pentru a putea folosi functia de teleportare intre obiectele TeleportPoint
  4. Adaugati mai multe obiecte de tip throwable (optional, testati diferite scale-uri, setari de rigidbody, etc. pentru acestea)

Bonus:

  • Folosind oricare dintre cele doua butoane portocalii de pe mese puteti instantia un proiectil care este lansat in directia voastra. Implementati si adaugati in scena un obiect (baseball bat, o paleta, etc.) pe care o puteti tine (ancora) de mana, cu ajutorul careia sa loviti proiectilul. Puteti studia diverse obiecte interactibile in scena Assets → SteamVR → InteractionSystem - > Samples → Interactions_Example pentru a vedea pentru ce tipuri de obiecte exista suport.
irva/laboratoare/07.txt · Last modified: 2023/12/06 18:22 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