Table of Contents

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:

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:

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

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.

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