Laborator VR ​04. Meta XR. Setup și interacțiuni de bază ​

Dispozitivele dezvoltate de către Meta (în trecut, cunoscute ca și Oculus) sunt soluții `all-in-one` ce permit dezvoltarea aplicațiilor de realitate virtuală și oferă suport pentru cele mai recente funcționalități din acest domeniu, precum hand tracking, realitate mixtă (MR), audio spațializat, eye și body tracking.

Dispozitive

În mod curent, în seria Quest, regăsim 4 astfel de dispozitive ce oferă suport activ pentru dezvoltarea aplicațiilor VR, anume:

  • Meta Quest 2 reprezintă încă o alegere bună pentru dezvoltarea (și consumul de content) VR
  • Meta Quest 3 vine cu o serie de îmbunătățiri față de Meta Quest 2 precum o rezoluție mai bună, o nouă generație de chipset (SD XR2 Gen1 vs Gen2) și suport sporit pentru realitate mixtă
  • Meta Quest 3S este o variantă mai puțin performantă decât Meta Quest 3, având o rezoluție mai mică și alt tip de lentile
  • Meta Quest Pro are un display panel mai bun, un upgrade de memorie RAM, dar avantajele principale sunt reprezentate de suport pentru face și eye tracking, precum și un design mai ergonomic. În plus, Meta Quest 3 și Meta Quest Pro vin cu controller-e ce au suport pentru feedback haptic mai avansat

O comparație mai detaliată o puteți studia aici.

Integrări

Pentru dezvoltarea aplicațiilor de VR, există suport pentru OpenXR (aplicații native), sau SDK-uri ce oferă integrare cu game engine-urile standard, precum Unity și Unreal Engine.

Vom lucra folosind integrarea din Unity. Cel mai probabil puteți lucra pe oricare platformă, în următoarele link-uri aveți informații despre integrările folosind OpenXR sau Unreal Engine.

Tehnologii disponibile

Integrarea SDK-ului vine cu suport pentru diverse feature-uri pe care le putem utiliza, în funcție de necesitățile aplicației pe care dorim s-o dezvoltăm:

  • Meta XR Core SDK: Funcționalități esențiale precum headset tracking, hand tracking, passthrough, ancore spațiale, etc.
  • Meta XR Interaction SDK: Funcționalități de interacțiune cu controller-ele sau mâinile, precum ray, poke, grab, etc. Pe acestea le vom studia în acest laborator!
  • Meta XR Audio SDK: Suport pentru sunet spațializat
  • Meta XR Haptics SDK: Suport pentru redare haptică avansată
  • Meta XR Voice SDK
  • Meta XR Platform SDK: Aspecte sociale / networking: Matchmaking, In-App Purchasing (IAP), Cloud Storage, etc.
  • Meta XR Simulator

Setup mediu de dezvoltare

În imaginea de mai jos puteți studia un flow generalizat al dezvoltării aplicațiilor de VR folosind dispozitivele celor de la Meta.

Cerințe pentru setup

  • Dispozitiv Meta Quest 2, 3, 3S, sau Pro
  • Meta Quest App
  • Configurare Quest Link wired sau wireless

Configurarea celor enunțate anterior a fost deja descrisă în Laborator VR 02. SteamVR. Setup și interacțiuni de bază! În cazul în care nu aveți acest setup făcut, urmăriți pașii din subcapitolele Meta Quest App, Quest Link (cablu) și Air Link.

Meta Quest Developer Hub (MQDH)

Aplicația vă oferă setări adiționale pentru un dispozitiv Quest conectat la calculator. Folosind MQDH puteți să:

  • Vizualizați log-uri ale dispozitivului pentru a face debugging
  • Screen cast, screen recording
  • Instalare/deploy aplicații pe cască

Setup Meta XR

În cele ce urmează vom prezenta modalitatea de integrare a SDK-ului Meta XR în Unity. Veți avea și voi de integrat Meta XR în proiectul Unity suport.

  • Dispozitivele Meta rulează pe Android, așadar setați această platformă ca fiind cea activă din build settings

XR Loader

  • Din meniul XR Loader Settings selectați activă opțiunea Set Meta XR Loader

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

Meta XR All-in-One SDK folosind Unity Package Manager (UPM)

Până în Octombrie 2023, pachetul oficial, care se putea descărca de pe Unity Asset Store era Oculus Integration SDK. Atenție, acesta a fost deprecated începând cu versiunea 57. Nu o să-l folosim pe acesta, dar pentru suport legacy acesta se poate încă descărca de pe Asset Store de aici.

Începând cu versiunea 59, pachetul de integrare se folosește de UPM (Unity Package Manager), oferind astfel o modalitate mai ușoară de integrare, realizarea rapidă a upgrade-urilor, iar probabil cel mai important, un management ușor în alegerea pachetelor esențiale de folosit (Core, Integration, Audio, etc.). Versiunea up-to-date la momentul redactării acestui text este 69.0.0.

Oculus XR Plugin

Acest plugin include backend-ul necesar pentru a dezvolta și face build-uri folosind Meta XR.

  • Din Package Manager apăsați pe (+), selecați Add package from git URL, introduceți com.unity.xr.oculus

Meta XR Project Setup Tool

În Unity Editor ar trebui să aveți un buton nou cu iconița companiei Meta în colțul din dreata jos.

De aici puteți deschide Project Setup Tool, care vă permite să vă configurați proiectul de Unity pentru a fi compatibil cu cerințele SDK-ului.

  • Treceți prin fiecare platformă și rezolvați problemele descrise

  • Aveți aici detalii legate de cum trebuie configurat proiectul de Unity
  • Este probabil ca setări ulterioare și alte integrări să ridice probleme în acest tool, așadar reveniți și rezolvați probleme de ori câte ori este nevoie

Import scene demo

În continuare vom importa câteva scene demo din SDK-ul de interacțiuni pentru a vă prezenta și familiariza cu feature-urile incluse.

Pachetul instalat Meta XR All-in-One SDK nu mai conține scene sample, dar acestea se pot instala de pe pachelete individuale:

  • Din Package Manager filtrați după Packages: In Project și căutați Meta XR Interaction SDK
  • Instalați (cel puțin) Example Scenes din tab-ul de sample-uri
  • Intrați în modul Link pe headset
  • În proiectul suport, deschideți și testați scenele (prin Play în editor):
    • Assets → Samples → Meta XR Interaction ​SDK → <versiune> → Example Scenes → HandGrabExamples
    • Assets → Samples → Meta XR Interaction ​SDK → <versiune> → Example Scenes → ComprehensiveRigExample

În următorul GIF este prezentat feature-ul de tip desktop virtual – puteți astfel controla PC-ul pe care l-ați conecat cu casca. În GIF proiectul este rulat din Unity prin acest desktop virtual.

Realizare build-uri

Sistemul de operare al acestor device-uri se bazează pe Android, așadar, procesul de build al unei aplicații este similar cu cel prezentat în laboratorul de Cardboard XR.

Puteți realiza build-uri în cel mai simplu mod folosiți opțiunea de Build And Run din meniul de Build Settings din Unity Editor. La finalul build-ului, aplicația este instalată pe headset și pornită în mod automat. Aplicația se poate apoi regăsi în următorul submeniu:

Pentru alte variante de build, în urma creării APK-ului din Unity (așadar Build simplu, nu Build And Run), se pot folosi Meta Quest Developer Hub sau SideQuest pentru instalarea acestor aplicații pe headset (proces cunsocut ca și sideloading).

  • Task-ul vostru implică să realizați și să testați un build pentru oricare din scenele demo prezentate anterior

Aveți aici un ghid pentru folosirea MQDH.

Erori build Gradle

S-ar putea ca setarea Project Settings → Player → Other Settings → Target API Level, care în mod implicit este pe Automatic (highest installed), să nu fie suficientă, așadar recomandăm să testați API Level-uri 31+ (setați-le manual).

Setup laborator

Import schelet laborator

  • Importați ultima versiune a pachetului IRVA_L4_VR_MetaXR_Skeleton care se găsește în folder-ul UnityPackages din folder-ul root al proiectului

Building Blocks

Veți învăța în continuare cum se pot integra diverse componente ale SDK-ului aplicația voastră: headset-ul virtual, controller-ele, hand tracking-ul, funcționalitatea de passthrough, etc.

SDK-ul a introdus recent o nouă modalitate de setup a acestor elemente printr-un meniu de Building Blocks.

  • Acest nou meniu prezintă funcționalități care se pot adăga prin drag-and-drop în oricare scenă din Unity
  • Pentru a-l deschide aveți două variante
    • De la iconița Meta din dreapta jos a ferestrei de editor
    • Din toolbar, Meta → Tools → Building Blocks

  • Înainte de introducerea acestor Building Blocks, elementele necesare ale unei scene trebuiau incluse manual - în esență, acest meniu abstractizează procesul de căutare de prefab-uri, adăugare și parentare corectă a acestora în scenă
  • Totuși, rețineți că acest meniu nu este comprehensiv, întrucât abtractizează includerea elementelor pe care Meta le consideră cele mai utile; unele funcționalități tot vor necesita setup manual
  • Pentru acest laborator ne este suficient acest meniu

În continuare vom configura, explica și integra o serie de funcționalități ale SDK-ului folosind acest meniu.

Vă recomandăm să faceți drag-and-drop pentru building block-uri din meniul dedicat către ierarhia scenei și nu către Scene View, întrucât unele elemente s-ar putea parenta greșit.

Camera Rig

  • Deschideți scena suport a laboratorului. Aceasta momentan nu conține niciun element care permite rularea folosind Quest Link
  • Includeți în primul rând în scenă prin drag-and-drop building block-ul Camera Rig
  • În scenă ar trebui să vă apară obiectul [BuildingBlock] Camera Rig. Acesta include în scenă toată logica necesară camerei virtuale și head tracking-ului

  • De interes (pentru voi pe viitor dacă veți crea aplicații folosind acest SDK) este script-ul atașat OVR Manager, care conține numeroase setări ce țin de headset, tracking, suport pentru hand, body, eye tracking, etc.
  • Conectați-vă headset-ul în modul Link și dați Play din editor - ar trebui să vă puteți roti în scena virtuală, fapt ce indică o funcționare corectă

Controller Tracking

  • Includeți în scenă building block-ul Controller Tracking
  • Acesta va include în scenă elementele necesare activării funcționalității de tracking a controller-elor
  • Observați cum a fost modificată ierarhia - au fost adăgate obiectele și script-urile necesare în mod automat. În scenă ar trebui să vă apară și câteva modele 3D ce reprezintă controller-ele

  • Conectați-vă headset-ul în modul Link și dați Play din editor - ar trebui să vă apară controller-ele în mână, să le puteți roti, etc., fapt ce indică o funcționare corectă

Hand Tracking

  • Includeți în scenă building block-ul Hand Tracking
  • Acesta va include în scenă elementele necesare activării funcționalității de tracking a mâinilor
  • Observați cum a fost modificată ierarhia

Acest building block introduce un mod de vizualizare al hand tracking-ului precum și modalitatea de comunicare cu backend-ul SDK-ului pentru a capta informațiile și a le randa. Pentru a putea interacționa cu diverse elemente interactibile va trebui să extindem această funcționalitate prin mâini sintetice.

  • Conectați-vă headset-ul în modul Link și dați Play din editor - ar trebui să vă apară modele pentru mâini care urmăresc mișcările voastre, fapt ce indică o funcționare corectă

Virtual (Synthetic) Hands

  • Includeți în scenă building block-ul Virtual Hands
  • Acesta va include în scenă elementele necesare extinderii funcționalității de tracking a mâinilor prin adăugarea unor mâini sintetice
  • Observați cum a fost modificată ierarhia

  • A fost introdus un nou obiect [BuildingBlock] Interaction, care va fi părintele obiectelor ce vor defini diversele tipuri de interacțiuni posibile. Script-ul atașat acestuia, OVRCameraRigRef, realizează o referință către Camera Rig-ul creat anterior
  • Obiectele [BuildingBlock] Synthetic Left Hand și [BuildingBlock] Synthetic Right Hand reprezintă noile mâini virtuale / sintetice, un model pentru acestea se poate observa în scenă
  • Obiectele LeftHand și RightHand implementează script-ul Hand, o clasă de bază ce se ocupă de prelucrearea datelor de la headset și transformarea acestei informații în date relevante developer-ului
  • Observați pentru moment faptul că obiectele HandInteractorsLeft și HandInteractorsRight nu au nici un copil
  • Conectați-vă headset-ul în modul Link și dați Play din editor - ar trebui să vă apară mâinile sintetice

Grab Interaction

  • Includeți în scenă building block-ul Grab Interaction
  • Acesta va include în scenă:
    • Un nou obiect interactibil (cub). Plasați-l pe masă
    • Intractorii necesari pentru a interacționa cu acest tip de obiect
  • Observați elementele noi adăugate în ierarhie

Interacțiuni, interactor, interactibil

Vom învăța despre acestea în detaliu în următorul laborator, ce este esențial de știut pe moment este:

  • Un interactibil (ex. cubul tocmai adăugat) răspunde evenimentelor unui interactor (controller, mâini)
  • Interacțiunea reprezintă comunicarea interactor ↔ interactibil
  • Există diverse tipuri de interacțiuni: grab, distance grab, touch, etc.

Interactorii adăugați

  • Observați noii interactori adăgați în scenă (4 în total):
    • Câte un HandGrabInteractor pentru fiecare mână sintentică și câte un GrabInteractor pentru fiecare controller

Interactibilul adăugat (cubul)

  • Observați script-urile atașate obiectului [BuildingBlock] HandGrab:
    • Grabbable reprezintă o clasă de bază ce indică faptul că acest obiect răspunde interacțiunilor de tip grab
    • GrabInteractable indică faptul că acesta poate răspune unui interactor de tip grab al controller-ului (anume acei interactori GrabInteractor menționați anterior)
    • HandGrabInteractable indică faptul că acesta poate răspune unui interactor de tip grab al mâinii (anume acei interactori HandGrabInteractor menționați anterior)

GIF-ul de mai jos prezintă acese funcționalități. Pentru a face switch între controller-e și hand tracking, pur și simplu lăsați din mână controller-ele, întindeți mâinile în fața headset-ului și așteptați câteva secunde.

Tasks

  1. Urmăriți pașii desciși în laborator pentru a face setup SDK-ului Meta XR: Meta Quest App, Quest Link, Meta XR Unity package
  2. Importați și testați în modul Quest Link scenele sample
  3. Realizați și testați un build pe headset al uneia dintre aceste scene sample
  4. Implementați în scena suport din laborator building block-urile prezentate:
    • Camera Rig
    • Controller Tracking
    • Hand Tracking
    • Virtual (Synthetic) Hands
    • Grab Interaction
irva/laboratoarevr/04.txt · Last modified: 2024/11/12 12:28 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