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 handtracering gebaseerd op de Unreal HeadMountedDisplay-invoegtoepassing en wordt een algemene API gebruikt voor 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 Blueprints als C++. De Unreal-API verzendt de gegevens als een coördinatensysteem, waarbij tikken worden gesynchroniseerd met de Unreal-engine.

Handskeletafbeelding met gewrichten overlayHandskelet

De hiërarchie wordt beschreven door EHandKeypoint enum:

Afbeelding van opties voor bluprinten met handsleutelpunt

U kunt al deze gegevens uit de handen van een gebruiker ophalen met behulp van de functie Bewegingscontrollergegevens ophalen . Deze functie retourneert een XRMotionControllerData-structuur . Hieronder ziet u een voorbeeld van een blauwdrukscript waarmee de structuur XRMotionControllerData wordt geparseerd om hand-gezamenlijke locaties op te halen en een foutopsporingscoördinaatsysteem op de locatie van elke joint te tekenen.

Blauwdruk van de functie Get Gaze-gegevens 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 bij toegang tot posities, rotaties en radii-matrices.

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 Venster > Livekoppeling om het venster Van de Live Link-editor te openen.
  2. Selecteer Bron en schakel Windows Mixed Reality handtraceringsbron in

Bron van livekoppeling

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

Animatie van livekoppeling

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

Live Link Animation 2

Het kan ook worden gesubklasseerd in de editor:

Opnieuw toewijzen van livekoppeling

Handgaas

Belangrijk

Hand mesh vereist OpenXR.

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

Handgaas als getraceerde geometrie

Belangrijk

Voor het verkrijgen van handgaas als een bijgehouden geometrie in OpenXR moet u Set Use Hand Mesh with Enabled Tracking Geometry aanroepen.

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

Blauwdruk van de gebeurtenis die is verbonden met het instellen van de functie Handgaas gebruiken met ingeschakelde volggeometriemodus

Notitie

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

Toegang tot Hand Mesh-gegevens

Handgaas

Voordat u toegang hebt tot gegevens van handgaas, moet u het volgende doen:

  • Selecteer uw ARSessionConfig-asset , vouw de ar-instellingen -> Wereldtoewijzingsinstellingen uit en schakel Mesh-gegevens genereren uit getraceerde geometrie in.

Hieronder ziet u de standaard mesh-parameters:

  1. Mesh-gegevens gebruiken voor occlusie
  2. Conflict genereren voor Mesh-gegevens
  3. Nav-mesh genereren voor Mesh-gegevens
  4. Mesh-gegevens weergeven in wireframe - foutopsporingsparameter die gegenereerde mesh weergeeft

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

Naslaginformatie over C++ API

Gebruik EEARObjectClassification deze optie om waarden voor handgaas te vinden in alle volgbare objecten.

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

De volgende gemachtigden worden aangeroepen wanneer het systeem een traceerbaar object detecteert, inclusief een handgaas.

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 de UARTrackedGeometry::GetUnderlyingMesh:

UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()

Naslaginformatie over blauwdruk-API

Werken met handgaas in blauwdrukken:

  1. Een ARTrackableNotify-onderdeel toevoegen aan een blueprint-actor

ARTrackable Notify

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

ARTrackable Notify 2

  1. Overschrijf 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 te gebruiken in combinatie met de Microsoft OpenXR-invoegtoepassing.

Vervolgens moet u in de blauwdrukeditor de functie Hand mesh instellen van de Microsoft OpenXR-invoegtoepassing met Ingeschakelde XRVisualization als parameter gebruiken:

Blauwdruk van gebeurtenis die is verbonden met het instellen van de functie Hand mesh gebruiken met ingeschakelde xrvisualization-modus

Als u het renderingproces wilt beheren, moet u De bewegingscontroller renderen vanuit XRVisualization gebruiken:

Blauwdruk voor het ophalen van de bewegingscontrollergegevensfunctie die is verbonden met de bewegingscontrollerfunctie weergeven

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 getraceerde geometrie gebruiken.

Handstralen

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

Belangrijk

Omdat alle functieresultaten elk frame wijzigen, worden ze allemaal aanroepbaar gemaakt. Zie de Gebruikers-GUID van Blauwdruk voor functies voor meer informatie over zuivere 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 gericht door uw elleboog. U moet ze nemen en een hologram vinden dat wordt gericht door.

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

Blauwdruk van de bewegingscontrollergegevensfunctie ophalen

Bewegingen

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

Windows Mixed Reality

Blauwdruk van de gebeurtenis die is verbonden met afspelen om de functie Bewegingen te configureren

Voeg vervolgens code toe om u te abonneren op de volgende gebeurtenissen:

Blauwdruk van windows-bewegingen voor ruimtelijk vasthouden, tikken en linkse manipulatieSchermafbeelding van de opties voor tikbewegingen voor ruimtelijke windows-invoer in het detailvenster

OpenXR

In OpenXR worden gebarengebeurtenissen bijgehouden via de invoerpijplijn. Met behulp van handinteractie kan het apparaat automatisch tik- en wachtbewegingen herkennen, maar niet de andere. Ze hebben de naam OpenXRMsftHandInteraction Select- en Grip-toewijzingen. U hoeft het abonnement niet in te schakelen. U moet de gebeurtenissen als volgt declareren in Projectinstellingen/Engine/Invoer:

Schermopname van de OpenXR-actietoewijzingen

Volgend controlepunt voor ontwikkeling

Als u het Unreal-ontwikkelingstraject volgt dat we hebben uitgetekend, bent u bezig met het verkennen van de basisbouwstenen van MRTK. Vanaf hier kunt u doorgaan naar de volgende bouwsteen:

Of ga naar Mixed Reality platformmogelijkheden en API's:

U kunt altijd op elk gewenst moment teruggaan naar de Controlepunten voor Unreal-ontwikkeling .