System śledzenia dłoni używa dłoni i palców jako danych wejściowych. Dostępne są dane dotyczące położenia i rotacji 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 dla systemów Windows Mixed Reality, jak i OpenXR.
Pozowanie ręczne
Pozycja ręka 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 C++. Interfejs API Unreal wysyła dane jako układ współrzędnych, a znaczniki zsynchronizowane z aparatem Unreal Engine.
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, aby uzyskać wspólne lokalizacje i rysuje układ współrzędnych debugowania w każdej lokalizacji wspólnej.
Ważne jest, aby sprawdzić, czy struktura jest prawidłowa i że jest to ręka. W przeciwnym razie możesz uzyskać niezdefiniowane zachowanie w dostępie do pozycji, rotacji i tablic promieniowych.
Wyliczenie EWMRHandKeypoint opisuje hierarchię kości Ręka. Każdy punkt klucza 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ś w ramce, zwracane wartości są buforowane. Nie zaleca się posiadania dużej logiki w tej funkcji ze względów wydajności.
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 poprosić o podstawę następnej kości, aby uzyskać dane przekształcenia na końcu kości. Specjalna kość końcówki 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.
Jeśli wtyczki Windows Mixed Reality i Live Link są włączone:
Wybierz pozycję Link na żywo okna>, aby otworzyć okno edytora linków na żywo.
Wybierz pozycję Źródło i włącz źródło śledzenia rąk Windows Mixed Reality
Po włączeniu źródła i otwarciu elementu zawartości animacji rozwiń sekcję Animacja na karcie Scena podglądu również zobacz dodatkowe opcje.
Hierarchia animacji ręcznej jest taka sama jak w pliku EWMRHandKeypoint. Animacja może być ponownie ukierunkowana przy użyciu windowsMixedRealityHandTrackingLiveLinkRemapAsset:
Uzyskiwanie siatki ręcznej 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 usługi Hand Mesh
Przed uzyskaniem dostępu do danych siatki ręcznej należy wykonać następujące czynności:
Wybierz zasób ARSessionConfig , rozwiń ustawienia AR —> mapowanie ś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 oklusionu
Generowanie kolizji dla danych usługi Mesh
Generowanie siatki nawigacji dla danych usługi Mesh
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 śledzony, w tym siatkę ręczną.
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 procedury 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 Dodaj/Aktualizuj/Usuń śledzone geometrie następującymi węzłami 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 wraz 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 poziomu funkcji XRVisualization:
Wynik:
Jeśli potrzebujesz czegoś bardziej skomplikowanego, takiego jak rysowanie siatki ręcznej z niestandardowym cieniowaniem, musisz uzyskać siatki jako śledzonej geometrii.
Promienie dłoni
Uzyskiwanie pozy ręczne działa w przypadku bliskich interakcji, takich jak chwytanie obiektów lub naciśnięcie przycisków. Czasami jednak trzeba pracować z hologramami, które są dalekie od użytkowników. Można to osiągnąć za pomocą promieni dłoni, które mogą być używane jako urządzenia wskazujące zarówno w języku C++, jak i w strategii. Możesz wyciągnąć promienie z ręki do dalekiego punktu i, z pomocą Unreal ray tracing, wybierz 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 czystych i nieczytelnych lub wywoływanych funkcji, 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 rotacji celu. Te parametry tworzą promienie skierowane przez łokcie. Należy je wziąć i znaleźć hologram jest wskazywany przez.
Poniżej przedstawiono przykład określania, czy promienie ręczne uderza w widżet i ustawiają niestandardowy wynik trafienia:
Aby użyć promieni ręcznych w strategii, wyszukaj dowolną z akcji w Windows Mixed Reality HMD:
Aby uzyskać dostęp do nich w języku C++, dołącz WindowsMixedRealityFunctionLibrary.h 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 klasy wyliczenia EHMDInputControllerButtons :
enum class EHMDInputControllerButtons : uint8
{
Select,
Grasp,
//......
};
Poniżej przedstawiono podział dwóch odpowiednich przypadków wyliczenia:
Wybierz — użytkownik wyzwolony wybierz zdarzenie.
Wyzwalane w HoloLens 2 przez naciśnięcie powietrza, spojrzenie i zatwierdzenie lub powiedzenie "Wybierz" z włączonym wejściem głosowym.
Chwyć — zdarzenie chwytania wyzwalane przez użytkownika.
Wyzwalane w HoloLens 2 przez zamknięcie palców użytkownika na hologramie.
Możesz uzyskać dostęp do stanu śledzenia siatki ręcznej w języku C++ za pośrednictwem wyliczenia pokazanego EHMDTrackingStatus 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:
Pochodzenie – pochodzenie 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:
HoloLens 2 śledzi gesty przestrzenne, co oznacza, że można przechwycić 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 podstawowego użycia HoloLens 2.
Następnie należy dodać kod, aby zasubskrybować następujące zdarzenia:
OpenXR
W programie OpenXR zdarzenia gestów są śledzone za pośrednictwem potoku wejściowego. Korzystając z interakcji ręcznej, urządzenie może automatycznie rozpoznawać gesty Naciśnij i Przytrzymaj, ale nie inne. Są one nazwane jako OpenXRMsftHandInteraction Select i Grip mapowania. Nie musisz włączać subskrypcji, należy zadeklarować zdarzenia w obszarze Ustawienia projektu/Aparat/Dane wejściowe, tak jak w następujący sposób:
Funkcję Blueprint można znaleźć w obszarze Windows Mixed Reality Dane wejściowe przestrzenne i funkcję C++, dodając WindowsMixedRealitySpatialInputFunctionLibrary.h element w pliku kodu wywołującego.
Możesz włączyć i wyłączyć przechwytywanie gestów za pomocą CaptureGestures funkcji. Gdy włączony gest powoduje wyzwolenie zdarzeń wejściowych, funkcja zwraca true wartość , jeśli przechwytywanie gestów powiodło się, a false jeśli wystąpi błąd.
Jeśli śledzisz określoną przez nas podróż dewelopera Unreal, jesteś w środku eksplorowania podstawowych bloków konstrukcyjnych zestawu narzędzi MRTK. W tym miejscu możesz przejść do następnego bloku konstrukcyjnego: