Sledování rukou v Unreal

Systém sledování rukou používá jako vstup dlaně a prsty osoby. Data o poloze a otočení každého prstu, celé dlaně a gesty rukou jsou k dispozici. Od verze Unreal 4.26 je sledování rukou založené na modulu plug-in Unreal HeadMountedDisplay a používá společné rozhraní API pro všechny platformy a zařízení XR. Funkce jsou stejné pro systémy Windows Mixed Reality i OpenXR.

Hand pose

Ruční pozice umožňuje sledovat a používat ruce a prsty uživatelů jako vstup, ke kterým můžete přistupovat jak v blueprintech, tak v jazyce C++. Unreal API odesílá data jako souřadnicový systém s ticky synchronizovanými s Unreal Engine.

Ručně kostru obrázku s překrytím kloubůKostra ruky

Hierarchii popisuje EHandKeypoint výčet:

Obrázek možností rozostření klíčových bodů rukou

Všechna tato data můžete získat z rukou uživatele pomocí funkce Získat data kontroleru pohybu. Tato funkce vrátí XRMotionControllerData struktury. Níže je ukázkový skript podrobného plánu, který parsuje strukturu XRMotionControllerData, aby získala ručně společná umístění a nakreslí ladicí souřadnicový systém v umístění každého společného souboru.

Podrobný plán funkce získat pohled dat připojenou k trasování čar podle funkce kanálu

Je důležité zkontrolovat, jestli je struktura platná a že se jedná o ruku. V opačném případě můžete získat nedefinované chování v přístupu k pozicím, otočením a radiovým polím.

Hand poses are exposed to Animation using the Live Link plugin.

Pokud jsou povoleny moduly plug-in Windows Mixed Reality a Live Link:

  1. Výběrem možnosti Window > Live Link otevřete okno editoru Live Link.
  2. Výběr zdroje a povolení zdroje sledování rukou ve Windows Mixed Reality

Zdroj živého propojení

Po povolení zdroje a otevření animačního prostředku rozbalte oddíl Animace na kartě Náhled scény také další možnosti.

Animace živého odkazu

Hierarchie ruční animace je stejná jako v EWMRHandKeypoint. Animace se dá změnit pomocí WindowsMixedRealityHandTrackingLiveLinkRemapAsset:

Animace živého odkazu 2

Může být také podtříděn v editoru:

Přemapování živého odkazu

Ruční síť

Důležité

Ruční síť vyžaduje OpenXR.

Modul plug-in Microsoft OpenXR se musí použít, který je k dispozici na webu Unreal Marketplace nebo Na GitHubu.

Hand Mesh as a Tracked Geometry

Důležité

Získání rukou mřížky jako sledované geometrie v OpenXR vyžaduje, abyste volali nastavit použití hand mesh s povolenou geometrií sledování.

Chcete-li povolit tento režim, měli byste volat nastavit použití ruční sítě s povolenou geometrií sledování:

Podrobný plán události zahájit přehrávání připojené k nastavení funkce hand mesh s povoleným režimem geometrie sledování

Poznámka:

Oba režimy není možné povolit současně. Pokud ho povolíte, druhý se automaticky zakáže.

Přístup k datům hand mesh

Ruční síť

Než budete mít přístup k datům sítě rukou, budete muset:

  • Vyberte prostředek ARSessionConfig, rozbalte Nastavení AR –> Nastavení mapování světa a zaškrtněte možnost Generovat data sítě ze sledované geometrie.

Níže jsou uvedeny výchozí parametry sítě:

  1. Použití dat mesh pro okluzi
  2. Generování kolizí pro data mesh
  3. Generování navigační sítě pro data mesh
  4. Vykreslení dat mesh v wireframe – ladicí parametr, který zobrazuje vygenerovanou síť

Tyto hodnoty parametrů se používají jako výchozí hodnoty prostorového mapování a mřížky rukou. V podrobných plánech nebo kódu pro libovolnou síť je můžete kdykoli změnit.

Referenční informace k rozhraní API jazyka C++

Slouží EEARObjectClassification k vyhledání hodnot ručně spletu ve všech sledovaných objektech.

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

Následující delegáti se volají, když systém zjistí všechny sledované objekty, včetně mřížky rukou.

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

Ujistěte se, že obslužné rutiny delegáta dodržují následující podpis funkce:

void UARHandMeshComponent::OnTrackableAdded(UARTrackedGeometry* Added)

K datům sítě můžete přistupovat prostřednictvím UARTrackedGeometry::GetUnderlyingMesh:

UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()

Referenční informace k rozhraní API podrobného plánu

Práce se sítěmi rukou v podrobných plánech:

  1. Přidání komponenty ARTrackableNotify do objektu actor podrobného plánu

Oznámení ARTrackable

  1. Přejděte na panel Podrobnosti a rozbalte oddíl Události .

ARTrackable Notify 2

  1. Přepište při přidání, aktualizaci nebo odebrání sledované geometrie následujícími uzly v grafu událostí:

On ARTrackable Notify

Vizualizace Hand Mesh v OpenXR

Doporučeným způsobem vizualizace ruční sítě je použití modulu plug-in XRVisualization epic společně s modulem plug-in Microsoft OpenXR.

V editoru podrobných plánů byste měli použít funkci Set Use Hand Mesh z modulu plug-in Microsoft OpenXR s povolenou XRVisualization jako parametr:

Podrobný plán události zahájit přehrávání připojené k nastavení funkce hand mesh s povoleným režimem xrvisualizace

Ke správě procesu vykreslování byste měli použít Render Motion Controller z XRVisualization:

Podrobný plán funkce get motion controller data connected to render motion controller function

Výsledek:

Obrázek digitální ruky překryvné na skutečné lidské ruce

Pokud potřebujete něco složitějšího, například vykreslení ruční mřížky pomocí vlastního shaderu, musíte mřížky získat jako trasovanou geometrii.

Paprsky rukou

Získání pozice ruky funguje u blízkých interakcí, jako je uchopování objektů nebo stisknutí tlačítek. Někdy ale potřebujete pracovat s hologramy, které jsou daleko od uživatelů. Toho lze dosáhnout pomocí ručních paprsků, které lze použít jako bodovací zařízení v C++ i Blueprints. Můžete nakreslit paprsek z ruky na vzdálený bod a s určitou pomocí unreal ray tracing vyberte hologram, který by jinak byl mimo dosah.

Důležité

Vzhledem k tomu, že všechny výsledky funkce mění každý rámec, jsou všechny volatelné. Další informace o čistých a nečistých nebo volatelných funkcích najdete v uživatelském identifikátoru GUID podrobného plánu u funkcí.

K získání dat pro ruční paprsky byste měli použít funkci Získat data kontroleru pohybu z předchozí části. Vrácená struktura obsahuje dva parametry, které můžete použít k vytvoření paprsku ruky – Aim Position a Aim Rotation. Tyto parametry tvoří paprsek směrovaný vaším loketem. Měli byste je vzít a najít hologram, na který odkazuje.

Níže je příklad určení, jestli paprsek ruky dosáhne widgetu a nastaví výsledek vlastního hitu:

Podrobný plán funkce získat data kontroleru pohybu

Gesta

HoloLens 2 sleduje prostorová gesta, což znamená, že tato gesta můžete zachytit jako vstup. Sledování gest je založené na modelu předplatného. Pomocí funkce Konfigurovat gesta byste měli zařízení sdělit, která gesta chcete sledovat. Další podrobnosti o gestech najdete v dokumentu Základní použití HoloLens 2.

Windows Mixed Reality

Podrobný plán zahájení přehrávání události připojené ke konfiguraci funkce gest

Pak byste měli přidat kód pro přihlášení k odběru následujících událostí:

Podrobný plán gest prostorového vstupu Windows, klepnutí a levé manipulaceSnímek obrazovky s možnostmi gesta prostorového vstupu Windows na panelu podrobností

OpenXR

V OpenXR se události gest sledují prostřednictvím vstupního kanálu. Při interakci rukou může zařízení automaticky rozpoznávat gesta klepnutím a podržením, ale ne ostatní. Pojmenují se jako mapování OpenXRMsftHandInteraction Select a Grip. Nemusíte povolovat odběr, měli byste deklarovat události v Projectu Nastavení/ Engine/Input, stejně jako toto:

Snímek obrazovky s mapováním akcí OpenXR

Kontrolní bod dalšího vývoje

Pokud sledujete cestu k unreal developmentu, kterou jsme si rozložili, jste uprostřed zkoumání základních stavebních bloků MRTK. Odtud můžete pokračovat k dalšímu stavebnímu bloku:

Nebo přejděte na možnosti platformy a rozhraní API hybridní reality:

Kdykoli se můžete vrátit k kontrolním bodům unreal development.