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.
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.
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.
Výčet EWMRHandKeypoint popisuje kostní hierarchii ruky. Jednotlivé klíčové body najdete v podrobných plánech:
K vrácení prostorových dat z ruky můžete použít GetHandJointTransform . Data se aktualizují každý rámec, ale pokud jste uvnitř rámce, vrácené hodnoty se ukládají do mezipaměti. Z důvodů výkonu se nedoporučuje mít v této funkci velkou logiku.
Tady je rozpis parametrů funkce GetHandJointTransform:
Ruka – může to být levá nebo pravá ruka.
Klíčové body – kost ruky.
Transformace – souřadnice a orientace základu kosti. Můžete požádat o základ další kosti, abyste získali transformační data pro konec kosti. Speciální tip kosti dává konec distal.
**Poloměr – poloměr základu kosti.
**Návratová hodnota – true, pokud je kost sledována v tomto rámečku, nepravda, pokud kost není sledována.
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í:
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
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ě:
Použití dat mesh pro okluzi
Generování kolizí pro data mesh
Generování navigační sítě pro data mesh
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:
Referenční informace k rozhraní API podrobného plánu
Práce se sítěmi rukou v podrobných plánech:
Přidání komponenty ARTrackableNotify do objektu actor podrobného plánu
Přejděte na panel Podrobnosti a rozbalte oddíl Události .
Přepište při přidání, aktualizaci nebo odebrání sledované geometrie následujícími uzly v grafu událostí:
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:
Ke správě procesu vykreslování byste měli použít Render Motion Controller z XRVisualization:
Výsledek:
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:
Pokud chcete v podrobných plánech používat paprsky rukou, vyhledejte některou z akcí v HMD windows Mixed Reality:
Pokud k nim chcete získat přístup v jazyce C++, zahrňte WindowsMixedRealityFunctionLibrary.h je do horní části souboru volajícího kódu.
Výčet
Máte také přístup ke vstupním případům v rámci EHMDInputControllerButtons, které lze použít v podrobných plánech:
Pro přístup v jazyce C++ použijte třídu výčtu EHMDInputControllerButtons :
enum class EHMDInputControllerButtons : uint8
{
Select,
Grasp,
//......
};
Níže je rozpis dvou použitelných případů výčtu:
Select – Uživatel aktivoval událost Select.
Aktivované v HoloLensu 2 vzduchovým klepnutím, pohledem a potvrzením nebo tím, že řeknete "Vybrat" s povoleným hlasovým vstupem.
Uchopte – uživatel aktivoval událost uchopení.
Aktivované v HoloLensu 2 zavřením prstů uživatele na hologramu.
Stav sledování sítě rukou v jazyce C++ můžete získat pomocí výčtu EHMDTrackingStatus uvedeného níže:
enum class EHMDTrackingStatus : uint8
{
NotTracked,
//......
Tracked
};
Níže je rozpis dvou použitelných případů výčtu:
NotTracked – ruka není viditelná
Tracked –- ruka je plně sledována
Struktura
Struktura PointerPoseInfo vám může poskytnout informace o následujících ručních datech:
Původ – původ ruky
Směr – směr ruky
Nahoru – nahoru vektor ruky
Orientace – kvaternion orientace
Stav sledování – aktuální stav sledování
Ke struktuře PointerPoseInfo můžete přistupovat prostřednictvím podrobných plánů, jak je znázorněno níže:
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.
Pak byste měli přidat kód pro přihlášení k odběru následujících událostí:
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:
Funkci Podrobného plánu najdete v části Windows Mixed Reality Spatial Input a funkci C++ přidáním WindowsMixedRealitySpatialInputFunctionLibrary.h do souboru kódu volání.
Funkci můžete povolit a zakázat zachytávání CaptureGestures gest. Když povolené gesto aktivuje vstupní události, funkce se vrátí true , pokud bylo zachycení gesta úspěšné a false pokud dojde k chybě.
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: