Laboratorul 09. Meta Quest | Interacțiuni

Date de intrare

Headset-urile pe care le folosim se bazează pe Interaction SDK, care se ocupă de procesarea fluxului de date oferit de către hardware – în esență, datele de interes care pot fi folosite în aplicații sunt poziția și rotația atât a headset-ului cât și a controller-elor sau mâinilor. În implementări mai recente, există funcționalități ce permit și realizarea body și face tracking-ului (face tracking doar pe Meta Pro).

Aceste data de intrare sunt procesate de către Interaction SDK. De exemply, pentru hand tracking, datele de intrare sunt trecute printr-un filtru (pentru a minimiza jitter-ul), se creează o mână “sintetică” ce constrânge poziția/rotația mâinii (de exemplu, pentru a nu trece prin anumite obiecte) iar în final se creează reprezentarea vizuală.

Aceste interacțiuni se bazează pe comunicarea dintre un interactor și un interactibil. Putem defini această “comunicare” ca și o interacțiune, așadar lanțul de elemente de interes devine:

Interactor ↔ Interaction ↔ Interactable

LINK DETALII AICI

Interactor & interacțiuni

Interactorul reprezintă o componentă atașată de controller-e sau de mâini ce are rolul de a iniția acțiuni. Orice interacor implementează interfața IInteractor, care dictază acțiunile posibile. Un interactor poate schimba evenimente cu alți interactibili (detalii în următoarea secțiune).

Un interactor există pentru a defini interacțiuni, care sunt de mai multe tipuri:

  • Grab și distance grab, pentru a ‘prinde’ și deplasa obiecte prin scenă
  • Poke, pentru interacțiuni de atingere, cum ar fi apăsarea unui buton
  • Ray, pentru interacțini la distanță bazate pe raze
  • Locomotion, ce permite deplasarea printr-o scenă

Fiecare dintre aceste interacțiuni se poate implementa (în forma de bază) folosind prefab-uri și configurarea în inspector.

Puteți studia mai în detaliu aceste interacțiuni plecând de la acest link

Interactibil

Reprezintă o componentă care răspunde la evenimentele unui interactor. Interactibilul poată să răspunde unei interacțiuni specifice. Orice interactibil implementează interfața IInteractable, care dictază acțiunile posibile.

De exemplu, un interactibil de tip poke nu va răspunde (interacționa) cu un interactor de tip grab.

Este important de știut că elementele interactibile se pot regăsi intr-una din 4 stări posibile:

  • Disabled (inactiv)
  • Normal
  • Hover (apropiere)
  • Select (intracțiune)

În următorul GIF puteți observa interactibilul în stările Normal, Hover și Select.

Pentru realizarea acestor interacțiuni este necesară configurarea ambelor părți. De exemplu, pentru o interacțiune de tip Poke folosing hand tracking-ul, obiectele de tip mână din ierarhie for avea atașate obiecte de tip HandPokeInteractor, iar elementele interactibile vor avea atașate o componentă de tip PokeInteractible (care poate răspunde atât la poke-uri de la controller cât și de la mâini).

Sumar interacțiuni

Un flow simplificat al Interaction SDK-ului poate fi următorul:

  • Se preia input-ului iar în urma procesării și filtrării se randează controller-ele/mâinile
  • Controller-ele/mâinile sunt interactori care așteaptă/ascultă interacțiunea cu elemente interactibile
  • Dacă interactorul este în proximitatea unui interactibil, iar cele 2 elemente implementează o interacțiune comună (poke, grab), are loc evenimentul de hover
  • Interacțiunea efectivă are loc atunci când interactibilul este selectat de către interactor

Basic setup | Headset, controllers, hands

Vom realiza în continuare cnfigurarea de bază prin care putem plasa în scenă un headset, precum și controller-e și mâini virtuale. Puteți urmări în detaliu pașii la acest link, vom prezenta succint pașii și în continuare.

  • Deschideți scena Assets → L9_MetaQuest → Scenes → L9_MQ2_BasicSetup
  • Adăugați în scenă pregab-ul OVRCameraRig. Acesta este prefab-ul de bază ce permite tracking-ul atât al headset-ului cât și al interactorilor
  • Studiați setările din inspector. Asigurați-vă că tipul de input (Hand Tracking Support) este Controllers and Hands, iar Hand Tracking Version este V2
  • Atașați prefab-ul OVRInteraction ca și copil la OVRCameraRig. Acest prefab este cel de bază pentru controller-e sau mâini
  • Setup controlller-e: Adăgați prefab-ul OVRControllers ca și copil la OVRInteraction. Acesta se ocupă de inteacțiunile posibile precum și partea vizuală a controller-elor
  • Realizați un build sau testați in-editor folosing Quest Link. Ar trebui să apară controller-ele în scenă (și să fie tracked)
  • Setup hand tracking: Urmați pașii descriși aici în secțiunea Set Up Hands
    • ⚠️ Atenție, mâinile vor avea atașate niște physics capsules necesare interacțiunilor, dar implementarea din documentație este (încă) broken, așadar nu faceți pasul 6
    • Realizați, de asemenea, pașii descriși în subsecțiunea Add OVRHands Prefab – atașați prefab-ul OVRHands ca și copil la OVRInteraction
    • Pentru a repara problema cu physics capsules, navigați întâi în ierarhie la OVRCameraRig → OVRInteraction → OVRInteraction. Atât pe LeftHand cât și pe RightHand atașați script-ul HandPhysicsCapsule și asignați în inspector field-urile necesare (primele 3)
    • Realizați un build sau testați in-editor folosing Quest Link. Ar trebui să funcționeze atât controller-ele cât și hand tracking-ul și să puteți face switch între cele 2 la run-time

Task-uri

  1. Implementați setup-ul descris în capitorul “Basic setup | Headset, controllers, hands”, pentru a implementa tracking-ul headset-ului, precum și suport pentru controller-e și hand tracking
  2. Implementați o interacțiune de tip Grab. Întrucât pașii descriși în documentație sunt suficient de detaliați, urmăriți modelul prezentat la acest link. Puteți lucra în scena curentă
  3. Bonus: Fiți creativi și implementați un alt tip de interacțiune (altceva decât grab) – plecați tot de la exemplele din documentație. De exemplu, un buton care aprinde/stinge o lumina, sau realizați un obiect pe care îl puteți arunca – sau orice alt exemplu relevant care vă ajută să înțelegi mai bine modul de funcționare interactor ↔ interacțiune
irva/laboratoare/09.txt · Last modified: 2024/01/09 11:33 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