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.
De hiërarchie wordt beschreven door EHandKeypoint opsomming:
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.
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.
In EWMRHandKeypoint de opsomming wordt de bothiërarchie van de hand beschreven. U vindt elk handsleutelpunt dat wordt vermeld in uw blauwdrukken:
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 is niet raadzaam om zware logica in deze functie te hebben om prestatieredenen.
Hier volgt een uitsplitsing van de functieparameters van GetHandJointTransform:
Hand – kan de gebruikers links of rechts 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 tipbeen geeft het einde van distale.
**Radius: straal van de basis van het bot.
**Retourwaarde: waar als het bot dit frame bijhoudt, onwaar als het bot niet wordt bijgehouden.
Als de invoegtoepassingen Windows Mixed Reality en Live Link zijn ingeschakeld:
Selecteer Window > Live Link om het editorvenster van Live Link te openen.
Bron selecteren en Handtraceringsbron voor Windows Mixed Reality inschakelen
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.
De handanimatiehiërarchie is hetzelfde als in EWMRHandKeypoint. Animatie kan opnieuw worden getraind met WindowsMixedRealityHandTrackingLiveLinkRemapAsset:
Het kan ook worden subklassen in de editor:
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:
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
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:
Mesh-gegevens gebruiken voor occlusie
Botsing genereren voor Mesh-gegevens
Nav Mesh genereren voor Mesh-gegevens
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:
Een ARTrackableNotify-onderdeel toevoegen aan een blauwdrukacteur
Ga naar het deelvenster Details en vouw de sectie Gebeurtenissen uit.
Overschrijven 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 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:
Als u het renderingproces wilt beheren, moet u Render Motion Controller van 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 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.
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:
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++, neemt WindowsMixedRealityFunctionLibrary.h u deze op tot het begin van het aanroepende codebestand.
Enum
U hebt ook toegang tot invoercases onder EHMDInputControllerButtons, die kunnen worden gebruikt in Blauwdrukken:
Gebruik de EHMDInputControllerButtons enum-klasse voor toegang in C++:
enum class EHMDInputControllerButtons : uint8
{
Select,
Grasp,
//......
};
Hieronder vindt u een uitsplitsing van de twee toepasselijke enumcases:
Selecteren : door gebruiker geactiveerde gebeurtenis Selecteren.
Geactiveerd in HoloLens 2 door luchttik, staren en doorvoeren, of door 'Selecteren' te zeggen met spraakinvoer ingeschakeld.
Grijp - Door gebruiker geactiveerde Grasp-gebeurtenis .
Geactiveerd in HoloLens 2 door de vingers van de gebruiker op een hologram te sluiten.
U kunt de traceringsstatus van uw handgaas in C++ openen via de EHMDTrackingStatus opsomming die hieronder wordt weergegeven:
enum class EHMDTrackingStatus : uint8
{
NotTracked,
//......
Tracked
};
Hieronder vindt u een uitsplitsing van de twee toepasselijke enumcases:
NotTracked - de hand is niet zichtbaar
Bijgehouden -- de hand is volledig bijgehouden
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- afdrukstand
Traceringsstatus : huidige traceringsstatus
U kunt de PointerPoseInfo-struct openen via Blauwdrukken, zoals hieronder wordt weergegeven:
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.
Vervolgens moet u code toevoegen om u te abonneren op de volgende gebeurtenissen:
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:
U vindt de blauwdrukfunctie onder Ruimtelijke invoer van Windows Mixed Reality en de C++-functie door het aanroepende codebestand toe te voegen WindowsMixedRealitySpatialInputFunctionLibrary.h .
U kunt het vastleggen van bewegingen in- en uitschakelen met de CaptureGestures functie. Wanneer een ingeschakelde beweging invoergebeurtenissen afvuurt, retourneert true de functie of het vastleggen van bewegingen is geslaagd en false of er een fout is opgetreden.
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: