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.
De hiërarchie wordt beschreven door EHandKeypoint enum:
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.
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.
De EWMRHandKeypoint opsomming beschrijft de bothiërarchie van de hand. U vindt elk handsleutelpunt dat wordt vermeld in uw blauwdrukken:
De volledige C++-opsomming wordt hieronder vermeld:
U kunt GetHandJointTransform gebruiken om ruimtelijke gegevens van de hand te retourneren. De gegevens worden elk frame bijgewerkt, maar als u zich in een frame bevindt, worden de geretourneerde waarden in de cache opgeslagen. Het wordt om prestatieredenen afgeraden om zware logica in deze functie te gebruiken.
Hier volgt een uitsplitsing van de functieparameters van GetHandJointTransform:
Hand – kan de linker- of rechterhand van de gebruiker zijn.
Sleutelpunt – het bot van de hand.
Transformatie – coördinaten en oriëntatie van de basis van het bot. U kunt de basis van het volgende bot aanvragen om de transformatiegegevens voor het einde van een bot op te halen. Een speciaal tip bot geeft het einde van distale.
**Radius: straal van de basis van het bot.
**Retourwaarde: waar als het bot dit frame wordt bijgehouden, onwaar als het bot niet wordt bijgehouden.
Als de invoegtoepassingen Windows Mixed Reality en Live Link zijn ingeschakeld:
Selecteer Venster > Livekoppeling om het venster Van de Live Link-editor te openen.
Selecteer Bron en schakel Windows Mixed Reality handtraceringsbron in
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.
De handanimatiehiërarchie is hetzelfde als in EWMRHandKeypoint. Animatie kan opnieuw worden getygeted met WindowsMixedRealityHandTrackingLiveLinkRemapAsset:
Het kan ook worden gesubklasseerd in de editor:
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:
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
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:
Mesh-gegevens gebruiken voor occlusie
Conflict genereren voor Mesh-gegevens
Nav-mesh genereren voor Mesh-gegevens
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:
Een ARTrackableNotify-onderdeel toevoegen aan een blueprint-actor
Ga naar het deelvenster Details en vouw de sectie Gebeurtenissen uit.
Overschrijf bij toevoegen/bijwerken/verwijderen van bijgehouden geometrie met de volgende knooppunten in uw gebeurtenisgrafiek:
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:
Als u het renderingproces wilt beheren, moet u De bewegingscontroller renderen vanuit XRVisualization gebruiken:
Het resultaat:
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:
Als u Handstralen in Blauwdrukken wilt gebruiken, zoekt u naar een van de acties onder Windows Mixed Reality HMD:
Als u deze wilt openen in C++, voegt WindowsMixedRealityFunctionLibrary.h u toe aan het begin van het bestand met aanroepende code.
Enum
U hebt ook toegang tot invoercases onder EHMDInputControllerButtons, die kunnen worden gebruikt in Blueprints:
Voor toegang in C++ gebruikt u de EHMDInputControllerButtons klasse enum:
enum class EHMDInputControllerButtons : uint8
{
Select,
Grasp,
//......
};
Hieronder volgt een uitsplitsing van de twee toepasselijke enum cases:
Select - Door gebruiker geactiveerde select-gebeurtenis.
Geactiveerd in HoloLens 2 door luchttikken, staren en doorvoeren, of door 'Selecteren' te zeggen met spraakinvoer ingeschakeld.
Grasp - Door gebruiker geactiveerde Grasp-gebeurtenis.
Geactiveerd in HoloLens 2 door de vingers van de gebruiker op een hologram te sluiten.
U hebt toegang tot de traceringsstatus van uw handgaas in C++ via de EHMDTrackingStatus onderstaande opsomming:
enum class EHMDTrackingStatus : uint8
{
NotTracked,
//......
Tracked
};
Hieronder volgt een uitsplitsing van de twee toepasselijke enum cases:
NotTracked - de hand is niet zichtbaar
Getraceerd – de hand wordt volledig getraceerd
Struct
De PointerPoseInfo-struct kan u informatie geven over de volgende handgegevens:
Oorsprong – oorsprong van de hand
Richting – richting van de hand
Omhoog – omhoog vector van de hand
Afdrukstand – oriëntatie-dia
Traceringsstatus : huidige traceringsstatus
U hebt toegang tot de pointerPoseInfo-struct via Blauwdrukken, zoals hieronder wordt weergegeven:
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.
Voeg vervolgens code toe om u te abonneren op de volgende gebeurtenissen:
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:
U vindt de blauwdrukfunctie in onder Windows Mixed Reality Ruimtelijke invoer en de functie C++ door toe te voegen WindowsMixedRealitySpatialInputFunctionLibrary.h in het aanroepende codebestand.
U kunt het vastleggen van bewegingen in- en uitschakelen met de CaptureGestures functie. Wanneer een ingeschakelde beweging invoergebeurtenissen start, retourneert true de functie of het vastleggen van gebaren is geslaagd en false als er een fout is opgetreden.
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: