Śledzenie rąk w Unreal

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.

Obraz szkieletu ręki z nakładkąRęka Szkielet

Hierarchia jest opisana przez EHandKeypoint wyliczenie:

Obraz przedstawiający opcje bluprint punktu klucza ręcznego

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.

Strategia pobierania funkcji danych przeglądania połączonego z funkcją śledzenia linii według kanału

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.

Pozy ręczne są widoczne dla animacji przy użyciu wtyczki Live Link.

Jeśli wtyczki Windows Mixed Reality i Live Link są włączone:

  1. Wybierz pozycję Link na żywo okna>, aby otworzyć okno edytora linków na żywo.
  2. Wybierz pozycję Źródło i włącz źródło śledzenia rąk Windows Mixed Reality

Źródło linku na żywo

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.

Animacja linku na żywo

Hierarchia animacji ręcznej jest taka sama jak w pliku EWMRHandKeypoint. Animacja może być ponownie ukierunkowana przy użyciu windowsMixedRealityHandTrackingLiveLinkRemapAsset:

Animacja linku na żywo 2

Można go również podklasować w edytorze:

Ponowne mapowanie linku na żywo

Siatka ręczna

Ważne

Siatka ręczna wymaga biblioteki OpenXR.

Należy użyć wtyczki Microsoft OpenXR dostępnej w witrynie Unreal Marketplace lub GitHub.

Siatka ręczna jako geometria śledzona

Ważne

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:

Strategia rozpoczęcia odtwarzania zdarzeń połączonych w celu ustawienia używania funkcji siatki ręcznej z włączonym trybem geometrii ś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

Siatka ręczna

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:

  1. Korzystanie z danych usługi Mesh na potrzeby oklusionu
  2. Generowanie kolizji dla danych usługi Mesh
  3. Generowanie siatki nawigacji dla danych usługi Mesh
  4. 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:

void UARHandMeshComponent::OnTrackableAdded(UARTrackedGeometry* Added)

Dostęp do danych siatki można uzyskać za pośrednictwem polecenia UARTrackedGeometry::GetUnderlyingMesh:

UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()

Dokumentacja interfejsu API strategii

Aby pracować z siatkami ręcznymi w strategiach:

  1. Dodawanie składnika ARTrackableNotify do aktora strategii

Powiadomienie ARTrackable

  1. Przejdź do panelu Szczegóły i rozwiń sekcję Zdarzenia .

ArTrackable Notify 2

  1. Zastąp polecenie Dodaj/Aktualizuj/Usuń śledzone geometrie następującymi węzłami w grafie zdarzeń:

W usłudze ARTrackable Notify

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:

Strategia rozpoczęcia odtwarzania zdarzenia połączonego w celu ustawienia użycia funkcji siatki ręcznej z włączonym trybem xrvisualization

Aby zarządzać procesem renderowania, należy użyć funkcji Render Motion Controller z poziomu funkcji XRVisualization:

Strategia funkcji danych kontrolera ruchu połączonej z funkcją renderowania kontrolera ruchu

Wynik:

Obraz cyfrowej ręki nakładki na prawdziwą ludzką rękę

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:

Strategia funkcji pobierania danych kontrolera ruchu

Gestów

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.

Windows Mixed Reality

Strategia rozpoczęcia odtwarzania zdarzenia połączonego z konfigurowaniem funkcji gestów

Następnie należy dodać kod, aby zasubskrybować następujące zdarzenia:

Strategia przechowywania, naciśnięcia i lewego gestu manipulowania danymi wejściowymi systemuWindows Zrzut ekranu przedstawiający opcje gestu naciśnięcia przestrzennego w systemie Windows w panelu szczegółów

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:

Zrzut ekranu przedstawiający mapowania akcji OpenXR

Następny punkt kontrolny programowania

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:

Możesz też przejść do Mixed Reality możliwości platformy i interfejsów API:

Zawsze możesz wrócić do punktów kontrolnych programowania Unreal w dowolnym momencie.