Śledzenie rąk w Unreal

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.

Obraz szkieletu ręki z nakładką stawówSzkielet dłoni

Hierarchia jest opisana przez EHandKeypoint wyliczenie:

Obraz przedstawiający opcje bluprint punktu kluczowego

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.

Strategia pobierania funkcji danych spojrzenia połączona z funkcją śledzenia linii według kanału

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.

Pozy ręczne są widoczne dla animacji za pomocą wtyczki Live Link.

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

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

Źródło łącza na żywo

Po włączeniu źródła i otwarciu elementu zawartości animacji rozwiń sekcję Animacja na karcie Scena podglądu i zobacz dodatkowe opcje.

Animacja łącza na żywo

Hierarchia animacji ręcznej jest taka sama jak w pliku EWMRHandKeypoint. Animacja może być ponownie przeznaczona za pomocą polecenia WindowsMixedRealityHandTrackingLiveLinkRemapAsset:

Animacja łącza 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

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:

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 siatki ręcznej

Siatka ręczna

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:

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

void UARHandMeshComponent::OnTrackableAdded(UARTrackedGeometry* Added)

Dostęp do danych siatki można uzyskać za pośrednictwem elementu 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 z możliwością rozwiązania ARTrackable

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

ArTrackable Notify 2

  1. Zastąp polecenie W przypadku dodawania/aktualizowania/usuwania śledzonej geometrii przy użyciu następujących węzłów w grafie zdarzeń:

Po powiadomieniu z możliwością rozwiązania ARTrackable

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:

Strategia rozpoczęcia odtwarzania zdarzeń połączonych 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 funkcji XRVisualization:

Strategia funkcji pobierania danych kontrolera ruchu podłączonej do funkcji renderowania kontrolera ruchu

Wynik:

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

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:

Strategia funkcji pobierania danych kontrolera ruchu

Gestów

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.

Windows Mixed Reality

Strategia zdarzenia rozpoczyna odtwarzanie połączone w celu skonfigurowania funkcji gestów

Następnie należy dodać kod do subskrybowania następujących zdarzeń:

Strategia przechowywania danych wejściowych przestrzennych systemu Windows, naciśnięcia i gestów manipulacji po lewej stronieZrzut ekranu przedstawiający opcje gestu naciśnięcia danych przestrzennych systemu Windows w panelu szczegółów

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:

Zrzut ekranu przedstawiający mapowania akcji OpenXR

Następny punkt kontrolny programowania

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:

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

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