Tracciamento mano in Unreal

Il sistema di rilevamento delle mani usa i palmi e le dita di una persona come input. I dati sulla posizione e sulla rotazione di ogni dito, l'intero palmo e i movimenti delle mani sono disponibili. A partire da Unreal 4.26, il rilevamento delle mani 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 sia Windows Mixed Reality che OpenXR.

Posa a mano

La posa della mano 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 i tick sincronizzati con il motore Unreal.

Immagine dello scheletro della mano con sovrapposizione di articolazioniScheletro mano

La gerarchia è descritta da EHandKeypoint enumerazione:

Immagine delle opzioni bluprint del punto di mano

È possibile ottenere tutti questi dati dalle mani di un utente usando la funzione Get Motion Controller Data.You can get this data from a user's using the Get Motion Controller Data function. Tale funzione restituisce una struttura XRMotionControllerData . Di seguito è riportato uno script di progetto di esempio che analizza la struttura XRMotionControllerData per ottenere posizioni comuni di mano e disegna un sistema di coordinate di debug in corrispondenza della posizione di ogni comune.

Progetto della funzione di dati di sguardo connesso alla traccia linea per funzione canale

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

Le pose delle mani vengono esposte all'animazione usando il plug-in Live Link.

Se i plug-in Windows Mixed Reality e Live Link sono abilitati:

  1. Selezionare Collegamento live finestra > per aprire la finestra dell'editor di collegamento live.
  2. Selezionare Origine e abilitare Windows Mixed Reality origine rilevamento mano

Origine collegamento live

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

Animazione collegamento live

La gerarchia dell'animazione della mano è uguale a in EWMRHandKeypoint. L'animazione può essere retargetata usando WindowsMixedRealityHandTrackingLiveLinkRemapAsset:

Animazione collegamento live 2

Può anche essere sottoclassata nell'editor:

Rimap collegamento live

Mesh a mano

Importante

La mesh a mano richiede OpenXR.

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

Mesh di mano come geometria tracciata

Importante

Ottenere le mesh di mano come geometria tracciata in OpenXR richiede di chiamare Set Use Hand Mesh with Enabled Tracking Geometry(

Per abilitare tale modalità, è consigliabile chiamare Set Use Hand Mesh with Enabled Tracking Geometry(

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

Nota

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

Accesso ai dati di Hand Mesh

Mesh a mano

Prima di poter accedere ai dati della mesh a mano, sarà necessario:

  • Selezionare l'asset ARSessionConfig , espandere le impostazioni del mapping AR -> World Mapping e selezionare Genera dati mesh dalla geometria tracciata.

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 mesh di mapping spaziale e mesh di mano predefiniti. È possibile modificarli in qualsiasi momento in Blueprints o codice per qualsiasi mesh.

Informazioni di riferimento sulle API C++

Usare EEARObjectClassification per trovare i valori della mesh della mano in tutti gli oggetti tracciabili.

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

I delegati seguenti vengono chiamati quando il sistema rileva qualsiasi oggetto rilevabile, inclusa una mesh di 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 seguono 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 usare mesh di mano nei progetti:

  1. Aggiungere un componente ARTrackableNotify a un attore di progetto

Notifica ARTrackable

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

ARTrackable Notify 2

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

In ARTrackable Notify

Visualizzazione Hand Mesh in OpenXR

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

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

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

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

Progetto della funzione di dati get motion controller connessa per il rendering della funzione del controller di movimento

Ecco il risultato:

Immagine della mano digitale sovrapposta a una mano umana reale

Se è necessario qualcosa di più complicato, ad esempio disegnare una mesh a mano con uno shader personalizzato, è necessario ottenere le mesh come geometria tracciata.

Raggi mano

Ottenere la posa della mano funziona per interazioni vicine, ad esempio afferrare oggetti o premere 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 dalla traccia dei raggi Unreal, 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 per le funzioni.

Per ottenere i dati per i raggi della mano, è consigliabile 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 a cui punta.

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

Progetto della funzione di dati get motion controller

Movimenti

Il 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 HoloLens 2 documento Utilizzo di base.

Windows Mixed Reality

Progetto dell'evento di inizio riproduzione connessa per configurare la funzione movimenti

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

Progetto delle opzioni di movimento di tocco di input spaziale di Windows, tocco e sinistraScreenshot delle opzioni del movimento di 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 con la mano, 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 Impostazioni progetto/Motore/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.