System śledzenia rąk używa dłoni i palców osoby jako danych wejściowych. Dostępne są dane dotyczące położenia i obrotu każdego palca, całej dłoni i gestów dłoni. Począwszy od wersji Unreal 4.26, śledzenie ręczne jest oparte na wtyczce Unreal HeadMountedDisplay i używa wspólnego interfejsu API na wszystkich platformach I urządzeniach XR. Funkcjonalność jest taka sama zarówno w systemach Windows Mixed Reality, jak i OpenXR.
Pozuj ręcznie
Funkcja Hand pose umożliwia śledzenie i używanie rąk i palców użytkowników jako danych wejściowych, do których można uzyskać dostęp zarówno w strategiach, jak i W języku C++. Interfejs API Unreal wysyła dane jako układ współrzędnych z znacznikami zsynchronizowanymi z aparatem Unreal.
Hierarchia jest opisana przez EHandKeypoint wyliczenie:
Wszystkie te dane można pobrać z rąk użytkownika przy użyciu funkcji Pobierz dane kontrolera ruchu . Ta funkcja zwraca strukturę XRMotionControllerData . Poniżej znajduje się przykładowy skrypt strategii, który analizuje strukturę XRMotionControllerData w celu uzyskania wspólnych lokalizacji i rysuje układ współrzędnych debugowania w każdej lokalizacji wspólnego.
Ważne jest, aby sprawdzić, czy struktura jest prawidłowa i czy jest to ręka. W przeciwnym razie można uzyskać niezdefiniowane zachowanie w dostępie do pozycji, rotacji i tablic promieniowych.
Wyliczenie EWMRHandKeypoint opisuje hierarchię kości Ręka. Każdy punkt kluczy można znaleźć na liście strategii:
Możesz użyć polecenia GetHandJointTransform , aby zwrócić dane przestrzenne z ręki. Dane aktualizują każdą ramkę, ale jeśli jesteś wewnątrz ramki, zwracane wartości są buforowane. Nie zaleca się posiadania dużej logiki w tej funkcji ze względu na wydajność.
Oto podział parametrów funkcji GetHandJointTransform:
Ręka — może być użytkownikami po lewej lub prawej stronie.
Punkt kluczowy — kość ręki.
Transform — współrzędne i orientacja podstawy kości. Możesz zażądać podstawy następnej kości, aby uzyskać dane przekształcenia na końcu kości. Specjalna kość Porada daje koniec dystalu.
**Promień — promień podstawy kości.
**Wartość zwracana — prawda, jeśli kość jest śledzona w tej ramce, wartość false, jeśli kość nie jest śledzona.
Animacja linku na żywo
Pozy ręczne są widoczne dla animacji za pomocą wtyczki Live Link.
Jeśli włączono wtyczki Windows Mixed Reality i Live Link:
Wybierz pozycję Link dynamiczny okna>, aby otworzyć okno Edytor linków na żywo.
Wybierz pozycję Źródło i włącz źródło śledzenia ręcznego środowiska Windows Mixed Reality
Po włączeniu źródła i otwarciu elementu zawartości animacji rozwiń sekcję Animacja na karcie Scena podglądu i zobacz dodatkowe opcje.
Hierarchia animacji ręcznej jest taka sama jak w pliku EWMRHandKeypoint. Animacja może być ponownie przeznaczona za pomocą polecenia WindowsMixedRealityHandTrackingLiveLinkRemapAsset:
Pobieranie siatki dłoni jako śledzonej geometrii w programie OpenXR wymaga wywołania funkcji Set Use Hand Mesh z włączoną geometrią śledzenia.
Aby włączyć ten tryb, należy wywołać metodę Set Use Hand Mesh z włączoną geometrią śledzenia:
Uwaga
Nie można jednocześnie włączyć obu trybów. Jeśli włączysz tę opcję, druga zostanie automatycznie wyłączona.
Uzyskiwanie dostępu do danych siatki ręcznej
Aby uzyskać dostęp do danych siatki ręcznej, należy wykonać następujące czynności:
Wybierz zasób ARSessionConfig, rozwiń Ustawienia AR —> ustawienia mapowania świata i zaznacz pole Wyboru Generuj dane siatki z śledzonej geometrii.
Poniżej przedstawiono domyślne parametry siatki:
Korzystanie z danych usługi Mesh na potrzeby okluzji
Generowanie kolizji dla danych siatki
Generowanie siatki nawigacji dla danych siatki
Render Mesh Data in Wireframe — parametr debugowania przedstawiający wygenerowaną siatkę
Te wartości parametrów są używane jako domyślne siatki mapowania przestrzennego i siatki ręcznej. Można je zmienić w dowolnym momencie w strategii lub kodzie dla dowolnej siatki.
Dokumentacja interfejsu API języka C++
Służy EEARObjectClassification do znajdowania wartości siatki ręcznej we wszystkich obiektach możliwych do śledzenia.
enum class EARObjectClassification : uint8
{
// Other types
HandMesh,
};
Następujące delegaty są wywoływane, gdy system wykryje dowolny obiekt z możliwością śledzenia, w tym siatkę dłoni.
class FARSupportInterface
{
public:
// Other params
DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableAdded)
DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableUpdated)
DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableRemoved)
};
Upewnij się, że programy obsługi delegatów są zgodne z poniższym podpisem funkcji:
Dodawanie składnika ARTrackableNotify do aktora strategii
Przejdź do panelu Szczegóły i rozwiń sekcję Zdarzenia .
Zastąp polecenie W przypadku dodawania/aktualizowania/usuwania śledzonej geometrii przy użyciu następujących węzłów w grafie zdarzeń:
Wizualizacja usługi Hand Mesh w narzędziu OpenXR
Zalecanym sposobem wizualizacji siatki ręcznej jest użycie wtyczki XRVisualization firmy Epic razem z wtyczką Microsoft OpenXR.
Następnie w edytorze strategii należy użyć funkcji Set Use Hand Mesh z wtyczki Microsoft OpenXR z włączoną funkcją XRVisualization jako parametr:
Aby zarządzać procesem renderowania, należy użyć funkcji Render Motion Controller z funkcji XRVisualization:
Wynik:
Jeśli potrzebujesz czegoś bardziej skomplikowanego, takiego jak rysowanie siatki ręcznej z niestandardowym cieniowaniem, musisz uzyskać siatki jako geometrię śledzonej.
Promienie dłoni
Pozowanie ręczne działa w przypadku bliskich interakcji, takich jak chwytanie obiektów lub naciśnięcie przycisków. Jednak czasami trzeba pracować z hologramami, które są dalekie od użytkowników. Można to zrobić z promieniami ręcznymi, które mogą być używane jako urządzenia wskazujące zarówno w języku C++, jak i strategii. Możesz narysować promienie z ręki do dalekiego punktu i, z pomocą śledzenia unreal ray, wybrać hologram, który w przeciwnym razie byłby poza zasięgiem.
Ważne
Ponieważ wszystkie wyniki funkcji zmieniają każdą ramkę, wszystkie są wywoływane. Aby uzyskać więcej informacji na temat funkcji czystych i nieczytelnych lub wywoływanych, zobacz identyfikator GUID użytkownika strategii w funkcjach.
Aby uzyskać dane dla promieni dłoni, należy użyć funkcji Pobierz dane kontrolera ruchu z poprzedniej sekcji. Zwrócona struktura zawiera dwa parametry, których można użyć do utworzenia promienia ręki — pozycji celu i obrotu celu. Te parametry tworzą promienie skierowane przez łokcie. Należy je wziąć i znaleźć hologram wskazywany przez.
Poniżej przedstawiono przykład określania, czy ray dłoni uderza w widżet i ustawia niestandardowy wynik trafienia:
Aby użyć promieni ręcznych w strategiach, wyszukaj dowolną z akcji w obszarze Windows Mixed Reality HMD:
Aby uzyskać dostęp do nich w języku C++, dołącz WindowsMixedRealityFunctionLibrary.h go do góry pliku kodu wywołującego.
Wyliczenie
Masz również dostęp do przypadków wejściowych w obszarze EHMDInputControllerButtons, które mogą być używane w strategiach:
Aby uzyskać dostęp w języku C++, użyj EHMDInputControllerButtons klasy wyliczenia:
enum class EHMDInputControllerButtons : uint8
{
Select,
Grasp,
//......
};
Poniżej przedstawiono podział dwóch odpowiednich przypadków wyliczenia:
Wybierz — użytkownik wyzwolony wybierz zdarzenie.
Wyzwolony na urządzeniu HoloLens 2 przez naciśnięcie powietrza, spojrzenie i zatwierdzenie lub powiedzenie "Wybierz" z włączonym wejściem głosowym.
Chwyć — zdarzenie chwycenia wyzwalane przez użytkownika.
Wyzwalane na urządzeniu HoloLens 2 przez zamknięcie palców użytkownika na hologramie.
Możesz uzyskać dostęp do stanu śledzenia siatki dłoni w języku C++ za pomocą wyliczenia EHMDTrackingStatus pokazanego poniżej:
enum class EHMDTrackingStatus : uint8
{
NotTracked,
//......
Tracked
};
Poniżej przedstawiono podział dwóch odpowiednich przypadków wyliczenia:
NotTracked — ręka nie jest widoczna
Śledzone — ręka jest w pełni śledzona
Struktura
Struktura PointerPoseInfo może zawierać informacje na temat następujących danych:
Początek — początek ręki
Kierunek – kierunek ręki
W górę — wektor ręki
Orientacja — quaternion orientacji
Stan śledzenia — bieżący stan śledzenia
Dostęp do struktury PointerPoseInfo można uzyskać za pomocą strategii, jak pokazano poniżej:
Urządzenie HoloLens 2 śledzi gesty przestrzenne, co oznacza, że można przechwytywać te gesty jako dane wejściowe. Śledzenie gestów jest oparte na modelu subskrypcji. Należy użyć funkcji "Konfiguruj gesty", aby poinformować urządzenie o gestach, które chcesz śledzić. Więcej szczegółów na temat gestów można znaleźć w dokumencie Podstawowe użycie urządzenia HoloLens 2.
Następnie należy dodać kod do subskrybowania następujących zdarzeń:
OpenXR
W programie OpenXR zdarzenia gestów są śledzone przez potok wejściowy. Korzystając z interakcji ręcznej, urządzenie może automatycznie rozpoznawać gesty naciśnięcia i blokady, ale nie inne. Są one nazwane jako OpenXXRMsftHandInteraction Select i Grip mapowania. Nie musisz włączać subskrypcji, należy zadeklarować zdarzenia w programie Project Ustawienia/Engine/Input w następujący sposób:
Funkcję Blueprint można znaleźć w obszarze Windows Mixed Reality Spatial Input i funkcję C++, dodając WindowsMixedRealitySpatialInputFunctionLibrary.h plik kodu wywołującego.
Możesz włączyć i wyłączyć przechwytywanie gestów za CaptureGestures pomocą funkcji . Gdy włączony gest uruchamia zdarzenia wejściowe, funkcja zwraca true informację, czy przechwytywanie gestów powiodło się, a false jeśli wystąpi błąd.
Jeśli podążasz za podróżą deweloperów Unreal, którą ułożyliśmy, jesteś w środku eksplorowania podstawowych bloków konstrukcyjnych zestawu NARZĘDZI MRTK. W tym miejscu możesz przejść do następnego bloku konstrukcyjnego: