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. Funktionaliteten är densamma för både Windows Mixed Reality- och OpenXR-system.

Handposition

Med handposition 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 tick synkroniserade med Unreal Engine.

Handskelettbild med lederöverlägg handskelett

Hierarkin beskrivs med EHandKeypoint uppräkning:

Bild av bluprint-alternativ för handnyckelpunkt

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

Skiss för funktionen hämta blickdata ansluten till linjespårning efter 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 livelänk-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 Windows Mixed Reality handspårningskälla

Källa för livelänk

När du har aktiverat källan och öppnat en animeringstillgång expanderar du avsnittet Animering på fliken Förhandsgranskningsscen för att se ytterligare alternativ.

Animering av livelänkar

Hierarkin för handanimering är samma som i EWMRHandKeypoint. Animering kan omdirigeras med WindowsMixedRealityHandTrackingLiveLinkRemapAsset:

LiveLänkanimering 2

Den kan också underklassas i redigeraren:

Mappa om livelänk

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

Att hämta handnät som en spårad geometri i OpenXR kräver att du anropar Set Use Hand Mesh med aktiverad spårningsgeometri.

Om du vill aktivera det läget bör du anropa Set Use Hand Mesh with Enabled Tracking Geometry (Ange Använd handnät med aktiverad spårningsgeometri):

Skiss av händelse börjar spela upp ansluten för att ange använd handnätfunktion med aktiverat spårningsgeometriläge

Anteckning

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

Komma åt handnätsdata

Handnät

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

  • Välj din ARSessionConfig-tillgång , expandera AR Settings - World Mapping settings (AR-inställningar för> världsmappning ) och markera Generate Mesh Data from Tracked Geometry (Generera mesh-data 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 navnät 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 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 nätdata 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 skissaktör

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:

På ARTrackable Notify

Visualisering av handnät i OpenXR

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

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 för att hämta rörelsestyrenhetsdatafunktion ansluten för att rendera rörelsestyrenhetsfunktion

Resultatet:

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

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

Handstrålar

Att hämta handställning fungerar för nära interaktioner som att ta tag i objekt eller trycka på knappar. Ibland behöver 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 pekare 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 görs alla anropbara. Mer information om rena och orena eller anropbara 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 HoloLens 2 Grundläggande användning.

Windows Mixed Reality

Skiss av händelse börjar spela upp ansluten för att konfigurera gester funktion

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

Skiss av windows spatiala indata håll, tryck och vänster manipulation gesterSkärmbild av Windows rumsliga indata tryckgest alternativ 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 Projektinställningar/Motor/Indata, 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ärnbyggstenarna. Härifrån kan du fortsätta till nästa byggblock:

Eller gå vidare till Mixed Reality plattformsfunktioner och API:er:

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