Dela via


Handspårning i Unreal

Handspårningssystemet använder en persons handflator och fingrar som indata. Data om position och rotation av varje finger, hela handflatan och handgester är tillgängliga. Från och med Unreal 4.26 baseras handspårning på plugin-programmet Unreal HeadMountedDisplay och använder ett gemensamt API på alla XR-plattformar och enheter. Funktionerna är desamma för både Windows Mixed Reality- och OpenXR-system.

Handställning

Med handställning kan du spåra och använda användarnas händer och fingrar som indata, som kan nås i både Skisser och C++. Unreal-API:et skickar data som ett koordinatsystem, med fästingar synkroniserade med Unreal Engine.

Handskelettbild med ledöverläggHandskelett

Hierarkin beskrivs med EHandKeypoint uppräkning:

Bild av bluprint-alternativ för handtangentpunkter

Du kan hämta alla dessa data från en användares händer med hjälp av funktionen Hämta rörelsekontrollantdata . Den funktionen returnerar en XRMotionControllerData-struktur . Nedan visas ett skissexempelskript som parsar XRMotionControllerData-strukturen för att hämta gemensamma handplatser och ritar ett felsökningskoordinatsystem på varje joint plats.

Skiss av funktionen hämta blickdata ansluten till linjespårning per kanalfunktion

Det är viktigt att kontrollera om strukturen är giltig och att den är en hand. Annars kan du få odefinierat beteende vid åtkomst till positioner, rotationer och radii-matriser.

Handställningar exponeras för animering med hjälp av Live Link-plugin-programmet.

Om plugin-programmet Windows Mixed Reality och Live Link är aktiverade:

  1. Välj Windows > Live Link för att öppna fönstret Live Link-redigeraren.
  2. Välj Källa och aktivera Handspårningskälla för Windows Mixed Reality

Live Link-källa

När du har aktiverat källan och öppnat en animeringstillgång expanderar du avsnittet Animeringfliken Förhandsversionsscen och ser även ytterligare alternativ.

Animering av livelänkar

Hierarkin för handanimering är densamma som i EWMRHandKeypoint. Animering kan visas på nytt med Hjälp av WindowsMixedRealityHandTrackingLiveLinkRemapAsset:

Animering av livelänk 2

Den kan också underklasseras i redigeraren:

Mappa om livelänken

Handnät

Viktigt!

Handnät kräver OpenXR.

Microsoft OpenXR-plugin-programmet måste användas, tillgängligt från Unreal Marketplace eller GitHub.

Handnät som en spårad geometri

Viktigt!

För att få handnät som en spårad geometri i OpenXR måste du anropa Set Use Hand Mesh with Enabled Tracking Geometry (Ange använd handnät med aktiverad spårningsgeometri).

Om du vill aktivera det läget bör du anropa Ange Använd handnät med aktiverad spårningsgeometri:

Skiss av händelse börjar spela upp ansluten för att ange använda hand mesh-funktion med aktiverat spårningsgeometriläge

Kommentar

Det går inte att aktivera båda lägena samtidigt. Om du aktiverar den ena inaktiveras den andra automatiskt.

Åtkomst till Hand Mesh-data

Handnät

Innan du kan komma åt handnätsdata måste du:

  • Välj din ARSessionConfig-tillgång, expandera AR-Inställningar -> World Mapping-inställningarna och kontrollera Generera meshdata från spårad geometri.

Nedan visas standardparametrarna för nät:

  1. Använda Mesh-data för ocklusion
  2. Generera kollision för Mesh-data
  3. Generera Nav Mesh för Mesh-data
  4. Rendera Mesh-data i Wireframe – felsökningsparameter som visar genererat nät

Dessa parametervärden används som standardvärden för nät för spatial mappning och handnät. Du kan ändra dem när som helst i Skisser eller kod för valfritt nät.

C++ API-referens

Använd EEARObjectClassification för att hitta handnätvärden i alla spårbara objekt.

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

Följande ombud anropas när systemet identifierar spårbara objekt, inklusive ett handnät.

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

Kontrollera att dina ombudshanterare följer funktionssignaturen nedan:

void UARHandMeshComponent::OnTrackableAdded(UARTrackedGeometry* Added)

Du kan komma åt mesh-data via UARTrackedGeometry::GetUnderlyingMesh:

UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()

Skiss-API-referens

Så här arbetar du med handnät i skisser:

  1. Lägga till en ARTrackableNotify-komponent i en skissskådespelare

ARTrackable Notify

  1. Gå till panelen Information och expandera avsnittet Händelser .

ARTrackable Notify 2

  1. Skriv över vid lägg till/uppdatera/ta bort spårad geometri med följande noder i händelsediagrammet:

Vid ARTrackable Notify

Hand Mesh-visualisering i OpenXR

Det rekommenderade sättet att visualisera handnät är att använda Epics XRVisualization-plugin-program tillsammans med Microsoft OpenXR-plugin-programmet.

I skissredigeraren bör du sedan använda funktionen Set Use Hand Mesh från Microsoft OpenXR-plugin-programmet med Aktiverad XRVisualization som parameter:

Skiss av händelse börjar spela upp ansluten för att ange använda hand mesh-funktion med aktiverat xrvisualiseringsläge

Om du vill hantera renderingsprocessen bör du använda Render Motion Controller från XRVisualization:

Skiss av funktionen hämta rörelsestyrenhetsdata ansluten för att rendera rörelsestyrenhetsfunktionen

Resultatet:

Bild av digital hand överlagrad på en riktig mänsklig hand

Om du behöver något mer komplicerat, till exempel att rita ett handnät med en anpassad skuggning, måste du få näten som en spårad geometri.

Handstrålar

Att få handställning fungerar för nära interaktioner som att ta tag i objekt eller trycka på knappar. Ibland måste du dock arbeta med hologram som är långt borta från användarna. Detta kan åstadkommas med handstrålar, som kan användas som pekande enheter i både C++ och Blueprints. Du kan rita en stråle från handen till en avlägsen punkt och, med lite hjälp från Unreal ray tracing, välja ett hologram som annars skulle vara utom räckhåll.

Viktigt!

Eftersom alla funktionsresultat ändrar varje bildruta blir de alla anropsbara. Mer information om rena och orena eller anropsbara funktioner finns i Skissanvändar-guid för funktioner.

Om du vill hämta data för handstrålarna bör du använda funktionen Hämta rörelsestyrenhetsdata från föregående avsnitt. Den returnerade strukturen innehåller två parametrar som du kan använda för att skapa en handstråle – Aim Position och Aim Rotation. Dessa parametrar bildar en stråle som styrs av armbågen. Du bör ta dem och hitta ett hologram som pekas av.

Nedan visas ett exempel på hur du avgör om en handstråle träffar en widget och anger ett anpassat träffresultat:

Skiss av funktionen hämta rörelsestyrenhetsdata

Gester

HoloLens 2 spårar rumsliga gester, vilket innebär att du kan fånga dessa gester som indata. Gestspårning baseras på en prenumerationsmodell. Du bör använda funktionen "Konfigurera gester" för att tala om för enheten vilka gester du vill spåra. Mer information om gester finns i dokumentet Grundläggande användning för HoloLens 2.

Windows Mixed Reality

Skiss av händelse börjar spelas upp ansluten för att konfigurera gestfunktionen

Sedan bör du lägga till kod för att prenumerera på följande händelser:

Skiss av windows spatiala indatagrepp, tryckningar och vänstermanipuleringsgesterSkärmbild av alternativ för gestgester för spatial inmatning i Windows i informationspanelen

OpenXR

I OpenXR spåras gesthändelser via indatapipelinen. Med hjälp av handinteraktion kan enheten automatiskt känna igen tryck- och hållgester, men inte de andra. De namnges som OpenXRMsftHandInteraction Select- och Grip-mappningar. Du behöver inte aktivera prenumerationen. Du bör deklarera händelserna i Project Inställningar/Engine/Input, precis så här:

Skärmbild av OpenXR-åtgärdsmappningar

Nästa kontrollpunkt för utveckling

Om du följer unreal-utvecklingsresan som vi har lagt fram är du mitt uppe i att utforska MRTK-kärnbyggnadsblocken. Härifrån kan du fortsätta till nästa byggblock:

Eller hoppa till funktioner och API:er för Mixed Reality-plattformen:

Du kan alltid gå tillbaka till kontrollpunkterna för Unreal-utveckling när som helst.