Systém sledování rukou používá jako vstup dlaně a prsty osoby. K dispozici jsou data o poloze a otočení každého prstu, celé dlaně a gest rukou. Od verze Unreal 4.26 je sledování rukou založené na modulu plug-in Unreal HeadMountedDisplay a používá společné rozhraní API na všech platformách a zařízeních XR. Funkce jsou stejné pro systémy Windows Mixed Reality i OpenXR.
Pozice rukou
Pozice rukou umožňuje sledovat a používat ruce a prsty uživatelů jako vstup, který je přístupný jak v podrobných plánech, tak v jazyce C++. Unreal API odesílá data jako souřadnicový systém s zaškrtnutím synchronizovaným 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í strukturu XRMotionControllerData . Níže je ukázkový skript podrobného plánu, který parsuje strukturu XRMotionControllerData, aby získal umístění spojení rukou a nakresluje ladicí souřadnicový systém v umístění každého spojení.
Je důležité zkontrolovat, jestli je struktura platná a jestli je to ruka. V opačném případě můžete získat nedefinované chování v přístupu k pozicím, otočením a polím poloměrů.
Výčet EWMRHandKeypoint popisuje kostní hierarchii ruky. Jednotlivé klíčové body ruky 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 v této funkci nedoporučuje používat těžkou logiku.
Tady je rozpis parametrů funkce GetHandJointTransform:
Hand – může být uživatel levou nebo pravou rukou.
Keypoint – kost ruky.
Transformovat – 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í špička kosti dává konec distální.
**Radius – poloměr základny kosti.
**Návratová hodnota – true, pokud je kost sledována v tomto snímku, false, pokud kost není sledována.
Pokud jsou povolené moduly plug-in Windows Mixed Reality a Live Link:
Výběrem možnosti Windows > Live Link otevřete okno editoru Live Link.
Vyberte zdroj a povolte Windows Mixed Reality zdroj sledování rukou.
Po povolení zdroje a otevření animačního assetu rozbalte oddíl Animace na kartě Náhled scény a podívejte se také na další možnosti.
Hierarchie ručních animací je stejná jako v EWMRHandKeypointnástroji . Animaci je možné změnit pomocí windowsMixedRealityHandTrackingLiveLinkRemapAsset:
Získání ručních sítí jako sledované geometrie v OpenXR vyžaduje volání nastavení použít síť rukou s povolenou geometrií sledování.
Pokud chcete tento režim povolit, měli byste volat Nastavit použít síť rukou s povolenou geometrií sledování:
Poznámka
Není možné povolit oba režimy současně. Pokud povolíte jeden, druhý se automaticky zakáže.
Přístup k datům hand mesh
Než budete moct získat přístup k datům z ruční sítě, budete muset:
Vyberte prostředek ARSessionConfig , rozbalte nastavení Ar Settings –> World Mapping a zaškrtněte políčko Generovat data sítě ze sledované geometrie.
Níže jsou uvedeny výchozí parametry sítě:
Použití dat sítě pro okluzi
Generování kolize pro data sítě
Generování navigační sítě pro data sítě
Vykreslení dat sítě v wireframe – parametr ladění, který zobrazuje vygenerovanou síť
Tyto hodnoty parametrů se používají jako výchozí hodnoty sítě prostorového mapování a sítě rukou. Můžete je kdykoli změnit v podrobných plánech nebo kódu pro libovolnou síť.
Referenční informace k rozhraní API jazyka C++
Slouží EEARObjectClassification k vyhledání hodnot ručních sítí ve všech sledovatelných objektech.
enum class EARObjectClassification : uint8
{
// Other types
HandMesh,
};
Následující delegáti se volají, když systém zjistí jakýkoli sledovatelný objekt, včetně ruční sítě.
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í podpis funkce níže:
Referenční informace k rozhraní API podrobného plánu
Práce s mřížkami 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ři přidání, aktualizaci nebo odebrání sledované geometrie přepište následující uzly v grafu událostí:
Vizualizace hand mesh v OpenXR
Doporučeným způsobem, jak vizualizovat síť rukou, je použít modul plug-in XRVisualization společnosti Epic společně s modulem plug-in Microsoft OpenXR.
Pak byste v editoru podrobného plánu měli jako parametr použít funkci Set Use Hand Mesh z modulu plug-in Microsoft OpenXR s povolenou funkcí XRVisualization :
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 nakreslit ruční síť pomocí vlastního shaderu, musíte mít sítě jako sledovanou geometrii.
Paprsky rukou
Získání pozice rukou funguje při těsné interakci, jako je uchopení objektů nebo stisknutí tlačítek. Někdy ale potřebujete pracovat s hologramy, které jsou daleko od uživatelů. Toho lze dosáhnout pomocí paprsků rukou, které se dají použít jako polohovací zařízení v C++ i v podrobných plánech. Můžete nakreslit paprsek z ruky do vzdáleného bodu a s určitou pomocí z unreal ray tracingu vybrat 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, je možné je volat. Další informace o čistých a nečistých nebo volatelných funkcích najdete v tématu Identifikátor GUID uživatele podrobného plánu pro funkce.
Pokud chcete získat data pro paprsky rukou, měli byste 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í ručního paprsku – pozici cíle a otočení cíle. Tyto parametry tvoří paprsek směrovaný vaším loktem. Měli byste je vzít a najít hologram, který ukazuje.
Níže je příklad určení, jestli paprsek ruky zasáhne widget, a nastavení vlastního výsledku hitu:
Pokud chcete v podrobných plánech používat paprsky rukou, vyhledejte některou z akcí v části Windows Mixed Reality HMD:
Chcete-li k nim získat přístup v jazyce C++, zahrňte WindowsMixedRealityFunctionLibrary.h do horní části souboru s kódem volání.
Výčet
Máte také přístup ke vstupním případům v části EHMDInputControllerButtons, které se dají 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 uveden rozpis dvou použitelných případů výčtu:
Select – Událost Select aktivovaná uživatelem.
Aktivuje se v HoloLens 2 klepnutím, pohledem a potvrzením nebo vyslovením možnosti Vybrat s povoleným hlasovým vstupem.
Uchopení – Uživatel aktivoval událost uchopení.
Aktivuje se v HoloLens 2 zavřením prstů uživatele na hologramu.
Ke stavu sledování sítě rukou v jazyce C++ se dostanete pomocí výčtu EHMDTrackingStatus uvedeného níže:
enum class EHMDTrackingStatus : uint8
{
NotTracked,
//......
Tracked
};
Níže je uveden rozpis dvou použitelných případů výčtu:
NotTracked – ruka není viditelná
Sledování – ruka je plně sledována
Struktura
Struktura PointerPoseInfo vám může poskytnout informace o následujících datech rukou:
Původ – původ ruky
Směr – směr ruky
Nahoru – nahoru vektor ruky
Orientace – orientační kvaternion
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í informovat, která gesta chcete sledovat. Další podrobnosti o gestech najdete v dokumentu HoloLens 2 Základní používání.
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. Pomocí interakce rukou může zařízení automaticky rozpoznat gesta klepnutí a podržení, ale ne ostatní. Mají názvy Mapování OpenXRMsftHandInteraction Select a Grip. Předplatné nemusíte povolovat. Události byste měli deklarovat v nastavení projektu, modulu nebo vstupu, stejně jako v tomto případě:
V části Windows Mixed Reality Spatial Input najdete funkci Podrobný plán a funkci C++ přidáním WindowsMixedRealitySpatialInputFunctionLibrary.h do souboru volajícího kódu.
Funkci můžete povolit nebo zakázat zachytávání CaptureGestures gest. Když povolené gesto aktivuje vstupní události, funkce se vrátí true , pokud bylo zachycení gest úspěšné a false pokud dojde k chybě.
Pokud sledujete cestu unreal developmentu, kterou jsme vytyložili, jste uprostřed zkoumání základních stavebních bloků MRTK. Odtud můžete pokračovat k dalšímu stavebnímu bloku: