Het handtraceringssysteem gebruikt de handpalmen en vingers van een persoon als invoer. Gegevens over positie en draaiing van elke vinger, de hele handpalm 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. Functionaliteit is hetzelfde voor zowel Windows Mixed Reality als OpenXR-systemen.
Handhouding
Met handhouding kunt u de handen en vingers van uw gebruikers bijhouden en gebruiken als invoer, die toegankelijk zijn in zowel Blauwdrukken als C++. De Unreal-API verzendt de gegevens als 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 voorbeeldscript voor blauwdruk dat de XRMotionControllerData-structuur parseert om gezamenlijke locaties met de hand te krijgen en een foutopsporingscoördinaatsysteem 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 bij toegang tot posities, rotaties en radiimatrices.
In EWMRHandKeypoint het enum 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 wordt niet aanbevolen 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.
Transformeren : 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 wordt bijgehouden dit frame, onwaar als het bot niet wordt bijgehouden.
Als de invoegtoepassingen Windows Mixed Reality en Live Link zijn ingeschakeld:
Selecteer Window > Live Link om het venster Live Link-editor te openen.
Bron selecteren en Windows Mixed Reality bron voor handtracking inschakelen
Nadat u de bron hebt ingeschakeld en een animatie-asset hebt geopend, vouwt u de sectie Animatie op het tabblad Voorbeeldscène ook extra opties uit.
De handanimatiehiërarchie is hetzelfde als in EWMRHandKeypoint. Animatie kan worden geretargeted met WindowsMixedRealityHandTrackingLiveLinkRemapAsset:
Het kan ook worden subklassen in de editor:
Hand Mesh
Hand Mesh als een getraceerde geometrie
Belangrijk
Als u handmaas als een bijgehouden geometrie in OpenXR wilt krijgen, moet u Set Use Hand Mesh aanroepen met ingeschakelde traceringsgeometrie.
Als u deze modus wilt inschakelen, moet u Set Use Hand Mesh aanroepen met ingeschakelde trackinggeometrie:
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 uit Bijgehouden geometrie.
Hieronder ziet u de standaard mesh-parameters:
Mesh Gegevens gebruiken voor occlusie
Conflict genereren voor Mesh-gegevens
Navigatie Mesh genereren voor Mesh-gegevens
Render Mesh Data in Wireframe : foutopsporingsparameter met gegenereerde mesh
Deze parameterwaarden worden gebruikt als de standaardwaarden voor ruimtelijke toewijzings-mesh en hand-mesh. U kunt deze op elk gewenst moment wijzigen in Blauwdrukken of code voor elk 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 bijgehouden 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 gemachtigde 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 Gebeurtenis Graph:
Hand Mesh visualisatie in OpenXR
De aanbevolen manier om hand mesh te visualiseren, is het gebruik van de XRVisualization-invoegtoepassing van Epic samen met de Microsoft OpenXR-invoegtoepassing.
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 shader, moet u de meshes ophalen als een bijgehouden geometrie.
Handstralen
Het verkrijgen van 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 zijn verwijderd. Dit kan worden bereikt met handstralen, die kunnen worden gebruikt als aanwijsapparaten in zowel C++ als Blauwdrukken. U kunt een straal van uw hand naar een ver punt tekenen en, met hulp van Unreal ray-tracering, een hologram selecteren dat anders buiten bereik zou zijn.
Belangrijk
Omdat alle functieresultaten elk frame wijzigen, worden ze allemaal aangeroepen. Zie de guid van de Blauwdrukgebruiker 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 : Positie en doelrotatie. Deze parameters vormen een straal die wordt geleid 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 een aangepast hitresultaat instelt:
Als u handstralen in blauwdrukken wilt gebruiken, zoekt u een van de acties onder Windows Mixed Reality HMD:
Als u deze wilt openen in C++, neemt u de WindowsMixedRealityFunctionLibrary.h bovenkant van het aanroepende codebestand op.
Enum
U hebt ook toegang tot invoercases onder EHMDInputControllerButtons, die kunnen worden gebruikt in Blueprints:
Gebruik de EHMDInputControllerButtons opsommingsklasse voor toegang in C++:
enum class EHMDInputControllerButtons : uint8
{
Select,
Grasp,
//......
};
Hieronder ziet u een uitsplitsing van de twee toepasselijke enumcases:
Selecteren : door gebruiker geactiveerde gebeurtenis Selecteren.
Geactiveerd in HoloLens 2 door luchttik, ogen en doorvoeren, of door 'Selecteren' te zeggen met spraakinvoer ingeschakeld.
Grasp - Door de 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 hand mesh in C++ via de EHMDTrackingStatus opsomming die hieronder wordt weergegeven:
enum class EHMDTrackingStatus : uint8
{
NotTracked,
//......
Tracked
};
Hieronder ziet 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 – afdrukstand , 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. Beweging bijhouden is gebaseerd op een abonnementsmodel. Gebruik de functie Gebaren configureren om het apparaat te laten weten welke bewegingen u wilt bijhouden. Meer informatie over bewegingen vindt u in het document HoloLens 2 Basisgebruik.
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 handinteractie kan het apparaat tik- en wachtbewegingen automatisch herkennen, maar niet de anderen. Ze hebben de naam OpenXRMsftHandInteraction Select and Grip mappings. U hoeft het abonnement niet in te schakelen. U moet de gebeurtenissen declareren in Project Instellingen/Engine/Input, net als deze:
U vindt de blauwdrukfunctie onder Windows Mixed Reality Spatial Input en de functie C++ door het aanroepende codebestand toe te voegenWindowsMixedRealitySpatialInputFunctionLibrary.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-ontwikkelingstraject volgt dat we hebben opgesteld, bevindt u zich midden in het verkennen van de basisbouwstenen van MRTK. Vanaf hier kunt u doorgaan naar de volgende bouwsteen: