Delen via


Handtracering in Unreal

Het handtraceringssysteem gebruikt de handpalmen en vingers van een persoon als invoer. Gegevens over de positie en draaiing van elke vinger, de hele palm en handbewegingen zijn beschikbaar. Vanaf Unreal 4.26 is handtracking gebaseerd op de Unreal HeadMountedDisplay-invoegtoepassing en wordt een algemene API gebruikt op alle XR-platforms en -apparaten. De functionaliteit is hetzelfde voor zowel Windows Mixed Reality- als OpenXR-systemen.

Handhouding

Met de handhouding kunt u de handen en vingers van uw gebruikers bijhouden en gebruiken als invoer, die toegankelijk is in zowel Blauwdrukken als C++. De Unreal-API verzendt de gegevens als een coördinaatsysteem, met tikken die zijn gesynchroniseerd met de Unreal Engine.

Afbeelding van handskelet met gewrichten overlayHandskelet

De hiërarchie wordt beschreven door EHandKeypoint opsomming:

Afbeelding van hand-toetspunt bluprintopties

U kunt al deze gegevens ophalen uit de handen van een gebruiker met behulp van de functie Get Motion Controller Data . Deze functie retourneert een XRMotionControllerData-structuur . Hieronder ziet u een blauwdrukscript dat de XRMotionControllerData-structuur parseert om gezamenlijke locaties met de hand te krijgen en een coördinaatsysteem voor foutopsporing op de locatie van elke joint tekent.

Blauwdruk van gegevensfunctie ophalen die is verbonden met lijntracering per kanaalfunctie

Het is belangrijk om te controleren of de structuur geldig is en of het een hand is. Anders krijgt u mogelijk niet-gedefinieerd gedrag in toegang tot posities, rotaties en radiimatrices.

Handhoudingen worden blootgesteld aan Animatie met behulp van de Live Link-invoegtoepassing.

Als de invoegtoepassingen Windows Mixed Reality en Live Link zijn ingeschakeld:

  1. Selecteer Window > Live Link om het editorvenster van Live Link te openen.
  2. Bron selecteren en Handtraceringsbron voor Windows Mixed Reality inschakelen

Livekoppelingsbron

Nadat u de bron hebt ingeschakeld en een animatie-asset hebt geopend, vouwt u de sectie Animatie op het tabblad Voorbeeld van scène ook extra opties weer.

Livekoppelingsanimatie

De handanimatiehiërarchie is hetzelfde als in EWMRHandKeypoint. Animatie kan opnieuw worden getraind met WindowsMixedRealityHandTrackingLiveLinkRemapAsset:

Live Link Animatie 2

Het kan ook worden subklassen in de editor:

Live Link Remap

Handmesje

Belangrijk

Hand-mesh vereist OpenXR.

De Microsoft OpenXR-invoegtoepassing moet worden gebruikt, beschikbaar via de Unreal Marketplace of GitHub.

Hand mesh als een getraceerde geometrie

Belangrijk

Voor het verkrijgen van hand-meshes als een bijgehouden geometrie in OpenXR moet u Set Use Hand Mesh met Enabled Tracking Geometry aanroepen.

Als u deze modus wilt inschakelen, moet u Set Use Hand Mesh met Enabled Tracking Geometry aanroepen:

Blauwdruk van gebeurtenis wordt afgespeeld die is verbonden met het instellen van de hand-mesh-functie met ingeschakelde volggeometriemodus

Notitie

Het is niet mogelijk om beide modi tegelijkertijd in te schakelen. Als u een optie inschakelt, wordt de andere automatisch uitgeschakeld.

Toegang tot Hand mesh-gegevens

Handmesje

Voordat u toegang hebt tot hand-mesh-gegevens, moet u het volgende doen:

  • Selecteer uw ARSessionConfig-asset, vouw de AR-Instellingen -> World Mapping-instellingen uit en controleer Mesh-gegevens genereren vanuit Tracked Geometry.

Hieronder ziet u de standaardparameters voor mesh:

  1. Mesh-gegevens gebruiken voor occlusie
  2. Botsing genereren voor Mesh-gegevens
  3. Nav Mesh genereren voor Mesh-gegevens
  4. Mesh-gegevens weergeven in Wireframe : parameter voor foutopsporing die gegenereerde mesh weergeeft

Deze parameterwaarden worden gebruikt als de standaardinstellingen voor ruimtelijke toewijzings-mesh en hand-mesh. U kunt deze op elk gewenst moment wijzigen in Blauwdrukken of code voor elke mesh.

Naslaginformatie over C++ API

Gebruik EEARObjectClassification deze functie om hand-mesh-waarden te vinden in alle bijgehouden objecten.

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

De volgende gemachtigden worden aangeroepen wanneer het systeem een traceerbaar object detecteert, inclusief een hand-mesh.

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

Zorg ervoor dat uw gedelegeerde handlers de onderstaande functiehandtekening volgen:

void UARHandMeshComponent::OnTrackableAdded(UARTrackedGeometry* Added)

U hebt toegang tot mesh-gegevens via het UARTrackedGeometry::GetUnderlyingMeshvolgende:

UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()

Naslaginformatie over blauwdruk-API

Werken met Hand Meshes in Blauwdrukken:

  1. Een ARTrackableNotify-onderdeel toevoegen aan een blauwdrukacteur

ARTrackable Notify

  1. Ga naar het deelvenster Details en vouw de sectie Gebeurtenissen uit.

ARTrackable Notify 2

  1. Overschrijven bij toevoegen/bijwerken/verwijderen van bijgehouden geometrie met de volgende knooppunten in uw gebeurtenisgrafiek:

Op ARTrackable Notify

Hand Mesh-visualisatie in OpenXR

De aanbevolen manier om hand-mesh te visualiseren, is door de XRVisualization-invoegtoepassing van Epic samen met de Microsoft OpenXR-invoegtoepassing te gebruiken.

Vervolgens moet u in de blauwdrukeditor de functie Hand Mesh instellen gebruiken vanuit de Microsoft OpenXR-invoegtoepassing met XRVisualization ingeschakeld als parameter:

Blauwdruk van gebeurtenis wordt afgespeeld die is verbonden met het instellen van de hand-mesh-functie met ingeschakelde xrvisualisatiemodus

Als u het renderingproces wilt beheren, moet u Render Motion Controller van XRVisualization gebruiken:

Blauwdruk van get motion controller data function connected to render motion controller function

Het resultaat:

Afbeelding van digitale hand overlay op een echte menselijke hand

Als u iets ingewikkelder nodig hebt, zoals het tekenen van een handgaas met een aangepaste arcering, moet u de meshes als een bijgehouden geometrie krijgen.

Handstralen

Het krijgen van handhouding werkt voor nauwe interacties, zoals het pakken van objecten of drukken op knoppen. Soms moet u echter werken met hologrammen die zich ver van uw gebruikers bevinden. Dit kan worden bereikt met handstralen, die kunnen worden gebruikt als aanwijsapparaten in zowel C++ als Blauwdrukken. U kunt een ray van uw hand naar een ver punt tekenen en, met hulp van Unreal ray tracing, een hologram selecteren dat anders buiten bereik zou zijn.

Belangrijk

Omdat alle functieresultaten elk frame wijzigen, worden ze allemaal aangeroepen. Zie de gebruikers-guid blauwdruk voor functies voor meer informatie over pure en onzuivere of aanroepbare functies.

Als u de gegevens voor de handstralen wilt ophalen, moet u de functie Get Motion Controller Data uit de vorige sectie gebruiken. De geretourneerde structuur bevat twee parameters die u kunt gebruiken om een handstraal te maken : Doelpositie en Doelrotatie. Deze parameters vormen een straal die door uw elleboog wordt geleid. U moet ze nemen en een hologram vinden dat wordt verwezen door.

Hieronder ziet u een voorbeeld van het bepalen of een handstraal een widget raakt en een aangepast hitresultaat instelt:

Blauwdruk van de gegevensfunctie get motion controller

Gebaren

De HoloLens 2 houdt ruimtelijke bewegingen bij, wat betekent dat u deze bewegingen kunt vastleggen als invoer. Bewegingen bijhouden is gebaseerd op een abonnementsmodel. Gebruik de functie Bewegingen configureren om het apparaat te laten weten welke bewegingen u wilt volgen. Meer informatie over bewegingen vindt u in het document Basisgebruik van HoloLens 2.

Windows Mixed Reality

Blauwdruk van gebeurtenis wordt afgespeeld die is verbonden met het configureren van de functie Bewegingen

Vervolgens moet u code toevoegen om u te abonneren op de volgende gebeurtenissen:

Blauwdruk van ruimtelijke invoer van Windows, tikken en bewegingen voor bewerken aan de linkerkantSchermopname van opties voor ruimtelijke invoer in Windows op beweging in het detailvenster

OpenXR

In OpenXR worden gebarengebeurtenissen bijgehouden via de invoerpijplijn. Met behulp van interactie met de hand kan het apparaat tikken en vasthouden automatisch herkennen, maar niet de anderen. Ze hebben de naam OpenXRMsftHandInteraction Select en Grip-toewijzingen. U hoeft het abonnement niet in te schakelen. U moet de gebeurtenissen declareren in Project Instellingen/Engine/Input, net zoals deze:

Schermopname van de actietoewijzingen van OpenXR

Volgend controlepunt voor ontwikkeling

Als u het Unreal-ontwikkeltraject volgt dat we hebben opgesteld, bevindt u zich midden in het verkennen van de bouwstenen van de MRTK-kern. Vanaf hier kunt u doorgaan naar de volgende bouwsteen:

Of ga naar de mogelijkheden en API's van het Mixed Reality-platform:

U kunt altijd op elk gewenst moment teruggaan naar de Controlepunten voor onrealontwikkeling.