Condividi tramite


Tracciamento mano in Unreal

Il sistema di tracciamento della mano usa i palmi e le dita di una persona come input. Sono disponibili dati sulla posizione e sulla rotazione di ogni dito, l'intero palmo e i movimenti della mano. A partire da Unreal 4.26, il tracciamento manuale si basa sul plug-in Unreal HeadMountedDisplay e usa un'API comune in tutte le piattaforme e i dispositivi XR. La funzionalità è la stessa per i sistemi Windows Realtà mista e OpenXR.

Posa della mano

La posa manuale consente di tenere traccia e usare le mani e le dita degli utenti come input, a cui è possibile accedere sia in Blueprint che in C++. L'API Unreal invia i dati come sistema di coordinate, con tick sincronizzati con il motore Unreal.

Immagine scheletro mano con sovrapposizione delle articolazioniScheletro mano

La gerarchia è descritta dall'enumerazione EHandKeypoint :

Immagine delle opzioni bluprint dei punti chiave della mano

È possibile ottenere tutti questi dati dalle mani di un utente usando la funzione Get Motion Controller Data . Questa funzione restituisce una struttura XRMotionControllerData . Di seguito è riportato uno script blueprint di esempio che analizza la struttura XRMotionControllerData per ottenere posizioni comuni a mano e disegna un sistema di coordinate di debug in corrispondenza della posizione di ogni joint.

Progetto della funzione get gaze data connected to line trace by channel function

È importante verificare se la struttura è valida e che si tratta di una mano. In caso contrario, è possibile ottenere un comportamento non definito nell'accesso a posizioni, rotazioni e matrici di raggi.

Le pose della mano vengono esposte all'animazione usando il plug-in Live Link.

Se i plug-in Windows Realtà mista e Live Link sono abilitati:

  1. Selezionare Window Live Link (Collegamento live finestra>) per aprire la finestra dell'editor di Live Link.
  2. Selezionare Source (Origine) e abilitare Windows Realtà mista Hand Tracking Source (Origine rilevamento manuale)

Origine collegamento live

Dopo aver abilitato l'origine e aperto un asset di animazione, espandere la sezione Animazione nella scheda Anteprima scena per visualizzare anche altre opzioni.

Animazione collegamento live

La gerarchia dell'animazione manuale è uguale a in EWMRHandKeypoint. L'animazione può essere ridestinata usando WindowsMixedRealityHandTrackingLiveLinkRemapAsset:

Animazione collegamento live 2

Può anche essere sottoclassata nell'editor:

Live Link Remap

Mesh a mano

Importante

La mesh manuale richiede OpenXR.

Il plug-in Microsoft OpenXR deve essere usato, disponibile in Unreal Marketplace o GitHub.

Mesh a mano come geometria tracciata

Importante

Per ottenere mesh a mano come geometria rilevata in OpenXR, è necessario chiamare Set Use Hand Mesh with Enabled Tracking Geometry (Imposta utilizzo mesh manuale con geometria di rilevamento abilitata).

Per abilitare tale modalità, è necessario chiamare Set Use Hand Mesh with Enabled Tracking Geometry (Imposta usa mesh manuale con geometria di rilevamento abilitato):

Progetto dell'evento inizia la riproduzione connessa per impostare l'uso della funzione mesh manuale con la modalità geometry di rilevamento abilitata

Nota

Non è possibile abilitare entrambe le modalità contemporaneamente. Se ne abiliti uno, l'altro viene disabilitato automaticamente.

Accesso ai dati hand mesh

Mesh a mano

Prima di poter accedere ai dati della mesh manuale, è necessario:

  • Selezionare l'asset ARSessionConfig, espandere le impostazioni AR Impostazioni -> Mapping globale e selezionare Generate Mesh Data from Tracked Geometry (Genera dati mesh dalla geometria rilevata).

Di seguito sono riportati i parametri di mesh predefiniti:

  1. Usare i dati mesh per l'occlusione
  2. Generare collisioni per i dati mesh
  3. Generare mesh di spostamento per i dati mesh
  4. Eseguire il rendering dei dati mesh in Wireframe : parametro di debug che mostra la mesh generata

Questi valori di parametro vengono usati come valori predefiniti della mesh di mapping spaziale e della mesh manuale. È possibile modificarli in qualsiasi momento in Blueprints o nel codice per qualsiasi mesh.

Informazioni di riferimento sulle API C++

Usare EEARObjectClassification per trovare i valori della mesh manuale in tutti gli oggetti rilevabili.

enum class EARObjectClassification : uint8
{
    // Other types
	HandMesh,
};

I delegati seguenti vengono chiamati quando il sistema rileva qualsiasi oggetto rilevabile, inclusa una mesh a mano.

class FARSupportInterface
{
    public:
    // Other params
	DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableAdded)
	DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableUpdated)
	DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableRemoved)
};

Assicurarsi che i gestori delegati seguano la firma della funzione seguente:

void UARHandMeshComponent::OnTrackableAdded(UARTrackedGeometry* Added)

È possibile accedere ai dati mesh tramite UARTrackedGeometry::GetUnderlyingMesh:

UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()

Informazioni di riferimento sulle API di progetto

Per lavorare con mesh manuali nei progetti:

  1. Aggiungere un componente ARTrackableNotify a un attore di progetto

ARTrackable Notify

  1. Passare al pannello Dettagli ed espandere la sezione Eventi .

ARTrackable Notify 2

  1. Sovrascrivere in Add/Update/Remove Tracked Geometry with the following nodes in Your Event Graph:Overwrite On Add/Update/Remove Tracked Geometry with the following nodes in your Event Graph:

In ARTrackable Notify

Visualizzazione Mesh manuale in OpenXR

Il modo consigliato per visualizzare la mesh manuale consiste nell'usare il plug-in XRVisualization di Epic insieme al plug-in Microsoft OpenXR.

Nell'editor di progetti è quindi consigliabile usare la funzione Set Use Hand Mesh dal plug-in Microsoft OpenXR con Enabled XRVisualization come parametro:

Progetto di evento inizia la riproduzione connessa per impostare l'uso della funzione mesh manuale con la modalità di xrvisualizzazione abilitata

Per gestire il processo di rendering, è necessario usare Render Motion Controller da XRVisualization:

Progetto di get motion controller data function connected to render motion controller function

Ecco il risultato:

Immagine della mano digitale sovrapposta a una mano umana reale

Se hai bisogno di qualcosa di più complicato, ad esempio disegnando una mesh a mano con uno shader personalizzato, devi ottenere le mesh come geometria tracciata.

Raggi della mano

Ottenere la posa della mano funziona per le interazioni vicine, ad esempio afferrare oggetti o premere i pulsanti. Tuttavia, a volte è necessario lavorare con gli ologrammi lontani dagli utenti. Questa operazione può essere eseguita con i raggi della mano, che possono essere usati come dispositivi di puntamento sia in C++ che in Blueprints. È possibile disegnare un raggio dalla mano a un punto lontano e, con qualche aiuto da Unreal Ray Tracing, selezionare un ologramma che altrimenti sarebbe fuori portata.

Importante

Poiché tutti i risultati della funzione cambiano ogni fotogramma, tutti sono resi chiamabili. Per altre informazioni sulle funzioni pure e impure o chiamabili, vedere guid utente di Blueprint sulle funzioni.

Per ottenere i dati per i raggi della mano, è necessario usare la funzione Get Motion Controller Data della sezione precedente. La struttura restituita contiene due parametri che è possibile usare per creare un raggio della mano: Posizione obiettivo e Rotazione obiettivo. Questi parametri formano un raggio diretto dal gomito. Dovresti prenderli e trovare un ologramma puntato da.

Di seguito è riportato un esempio di determinazione se un raggio della mano raggiunge un widget e imposta un risultato di hit personalizzato:

Progetto della funzione di dati get motion controller

Gesti

HoloLens 2 tiene traccia dei movimenti spaziali, il che significa che è possibile acquisire tali movimenti come input. Il rilevamento dei movimenti si basa su un modello di sottoscrizione. È consigliabile usare la funzione "Configura movimenti" per indicare al dispositivo quali movimenti si desidera tenere traccia. Per altre informazioni sui movimenti, vedere il documento Utilizzo di base di HoloLens 2.

Windows Mixed Reality

Progetto dell'evento inizia la riproduzione connessa per configurare la funzione dei movimenti

È quindi necessario aggiungere il codice per sottoscrivere gli eventi seguenti:

Progetto di movimenti di manipolazione a sinistra, tocco e blocco dell'input spaziale di WindowsScreenshot delle opzioni di movimento tocco dell'input spaziale di Windows nel pannello dei dettagli

OpenXR

In OpenXR gli eventi di movimento vengono rilevati tramite la pipeline di input. Usando l'interazione manuale, il dispositivo può riconoscere automaticamente i movimenti Tap e Hold, ma non gli altri. Vengono denominati come mapping OpenXRMsftHandInteraction Select e Grip. Non è necessario abilitare la sottoscrizione, è necessario dichiarare gli eventi in Project Impostazioni/Engine/Input, esattamente come segue:

Screenshot dei mapping delle azioni OpenXR

Successivo checkpoint di sviluppo

Se si segue il percorso delineato per lo sviluppo con Unreal, tenere presente che si stanno esplorando i blocchi predefiniti fondamentali di MRTK. Da qui, è possibile passare al blocco predefinito successivo:

In alternativa, passare alle API e alle funzionalità della piattaforma di realtà mista:

È sempre possibile tornare ai checkpoint per lo sviluppo con Unreal in qualsiasi momento.