Seguimiento de las manos en Unreal

El sistema de seguimiento de manos usa las palmas y los dedos de una persona como entrada. Los datos sobre la posición y rotación de cada dedo, toda la palma y los gestos de mano están disponibles. A partir de Unreal 4.26, el seguimiento de manos se basa en el complemento Unreal HeadMountedDisplay y usa una API común en todas las plataformas y dispositivos XR. La funcionalidad es la misma para los sistemas Windows Mixed Reality y OpenXR.

Posición de mano

La posición de mano permite realizar un seguimiento y usar las manos y los dedos de los usuarios como entrada, a las que se puede acceder tanto en Blueprints como en C++. La API de Unreal envía los datos como un sistema de coordenadas, con tics sincronizados con un motor de Unreal.

Imagen de esqueleto de mano con juntas superpuestasesqueleto de mano

La jerarquía se describe mediante EHandKeypoint la enumeración :

Imagen de las opciones de bluprint del punto de clave manual

Puede obtener todos estos datos de las manos de un usuario mediante la función Obtener datos del controlador de movimiento . Esa función devuelve una estructura XRMotionControllerData . A continuación se muestra un script de plano técnico de ejemplo que analiza la estructura XRMotionControllerData para obtener las ubicaciones de las articulaciones de mano y dibuja un sistema de coordenadas de depuración en la ubicación de cada articulación.

Plano técnico de la función de obtención de datos de mirada conectada a seguimiento de líneas por función de canal

Es importante comprobar si la estructura es válida y que es una mano. De lo contrario, puede obtener un comportamiento indefinido en el acceso a posiciones, rotaciones y matrices de radio.

Las posturas de mano se exponen a animación mediante el complemento Live Link.

Si los complementos Windows Mixed Reality y Live Link están habilitados:

  1. Seleccione Window > Live Link para abrir la ventana del editor de Live Link.
  2. Seleccione Origen y habilite Windows Mixed Reality origen de seguimiento de manos.

Origen del vínculo en directo

Después de habilitar el origen y abrir un recurso de animación, expanda la sección Animación de la pestaña Escena preliminar también vea opciones adicionales.

Animación de vínculo en directo

La jerarquía de animación de mano es la misma que en EWMRHandKeypoint. La animación se puede cambiar de destino mediante WindowsMixedRealityHandTrackingLiveLinkRemapAsset:

Animación de vínculo en directo 2

También se puede clasificar en subclases en el editor:

Reasignación de vínculos en directo

Malla de mano

Importante

La malla manual requiere OpenXR.

Se debe usar el complemento de Microsoft OpenXR (disponible en Unreal Marketplace o GitHub).

Malla de mano como geometría con seguimiento

Importante

La obtención de mallas de mano como geometría con seguimiento en OpenXR requiere llamar a Set Use Hand Mesh with Enabled Tracking Geometry (Establecer usar malla de mano con geometría de seguimiento habilitada).

Para habilitar ese modo, debe llamar a Set Use Hand Mesh with Enabled Tracking Geometry ( Establecer usar malla de mano con geometría de seguimiento habilitada):

Plano técnico de la reproducción de inicio del evento conectado para establecer la función de malla de mano con el modo de geometría de seguimiento habilitado

Nota

No es posible habilitar ambos modos al mismo tiempo. Si habilita una, la otra se deshabilita automáticamente.

Acceso a datos de malla de mano

Malla de mano

Para poder acceder a los datos de malla de mano, deberá hacer lo siguiente:

  • Seleccione el recurso ARSessionConfig , expanda la configuración de AR Settings - World Mapping (Configuración de AR:> asignación mundial ) y active Generate Mesh Data from Tracked Geometry (Generar datos de malla a partir de geometría con seguimiento).

A continuación se muestran los parámetros de malla predeterminados:

  1. Uso de datos de malla para la oclusión
  2. Generar colisión para datos de malla
  3. Generar malla de navegación para datos de malla
  4. Representar datos de malla en Wireframe: parámetro de depuración que muestra la malla generada

Estos valores de parámetro se usan como valores predeterminados de malla de asignación espacial y malla de mano. Puede cambiarlos en cualquier momento en Planos técnicos o código para cualquier malla.

Referencia de API de C++

Use EEARObjectClassification para buscar valores de malla de mano en todos los objetos rastreables.

enum class EARObjectClassification : uint8
{
    // Other types
	HandMesh,
};

Se llama a los siguientes delegados cuando el sistema detecta cualquier objeto rastreable, incluida una malla de mano.

class FARSupportInterface
{
    public:
    // Other params
	DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableAdded)
	DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableUpdated)
	DECLARE_AR_SI_DELEGATE_FUNCS(OnTrackableRemoved)
};

Asegúrese de que los controladores delegados siguen la firma de función siguiente:

void UARHandMeshComponent::OnTrackableAdded(UARTrackedGeometry* Added)

Puede acceder a los datos de malla a través de UARTrackedGeometry::GetUnderlyingMesh:

UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()

Referencia de la API de plano técnico

Para trabajar con mallas de mano en planos técnicos:

  1. Agregar un componente ARTrackableNotify a un actor de plano técnico

Notificación ARTrackable

  1. Vaya al panel Detalles y expanda la sección Eventos .

NOTIFICACIÓN ARTrackable 2

  1. Sobrescribir en Agregar, actualizar o quitar geometría de seguimiento con los nodos siguientes en el gráfico de eventos:

En ARTrackable Notify

Visualización de malla de mano en OpenXR

La manera recomendada de visualizar la malla manual es usar el complemento XRVisualization de Epic junto con el complemento Microsoft OpenXR.

A continuación, en el editor de planos técnicos, debe usar la función Set Use Hand Mesh del complemento Microsoft OpenXR con Enabled XRVisualization como parámetro:

Plano técnico del juego de inicio del evento conectado para establecer la función de malla de mano con el modo de xrvisualización habilitado

Para administrar el proceso de representación, debe usar Render Motion Controller desde XRVisualization:

Plano técnico de obtención de la función de datos del controlador de movimiento conectada a la función de controlador de movimiento de representación

El resultado es:

Imagen de la mano digital superpuesta en una mano humana real

Si necesita algo más complicado, como dibujar una malla de mano con un sombreador personalizado, debe obtener las mallas como geometría de seguimiento.

Rayos de las manos

La obtención de la posición de mano funciona para interacciones cercanas, como agarrar objetos o presionar botones. Sin embargo, a veces es necesario trabajar con hologramas que están lejos de los usuarios. Esto se puede lograr con rayos de mano, que se pueden usar como dispositivos apuntadores tanto en C++ como planos técnicos. Puede dibujar un rayo de la mano a un punto lejano y, con alguna ayuda del seguimiento de rayos de Unreal, seleccione un holograma que, de lo contrario, estaría fuera de alcance.

Importante

Dado que todos los resultados de la función cambian cada fotograma, todos se pueden llamar. Para obtener más información sobre las funciones puras e impures o invocables, consulte guid del usuario de Blueprint en las funciones.

Para obtener los datos de los rayos de mano, debe usar la función Obtener datos del controlador de movimiento de la sección anterior. La estructura devuelta contiene dos parámetros que puede usar para crear un rayo de mano: posición de objetivo y rotación de objetivo. Estos parámetros forman un rayo dirigido por el codo. Debe tomarlos y encontrar un holograma al que apunta.

A continuación se muestra un ejemplo de cómo determinar si un rayo de mano alcanza un widget y establece un resultado de acierto personalizado:

Plano técnico de obtención de la función de datos del controlador de movimiento

Gestos

El HoloLens 2 realiza un seguimiento de los gestos espaciales, lo que significa que puede capturar esos gestos como entrada. El seguimiento de gestos se basa en un modelo de suscripción. Debe usar la función "Configurar gestos" para indicar al dispositivo qué gestos desea realizar. Puede encontrar más detalles sobre los gestos en el documento uso básico de HoloLens 2.

Windows Mixed Reality

Plano técnico del evento comienza a reproducirse conectado para configurar la función de gestos

A continuación, debe agregar código para suscribirse a los siguientes eventos:

Plano técnico de la suspensión, pulsación y gestos de manipulación izquierda de WindowsCaptura de pantalla de las opciones de gestos de pulsación de entrada espacial de Windows en el panel de detalles

OpenXR

En OpenXR, se realiza un seguimiento de los eventos de gestos a través de la canalización de entrada. Con la interacción con la mano, el dispositivo puede reconocer automáticamente gestos de pulsación y suspensión, pero no los demás. Se denominan Asignaciones de selección y agarre de OpenXRMsftHandInteraction. No es necesario habilitar la suscripción; debe declarar los eventos en Configuración del proyecto,Motor/Entrada, de la siguiente manera:

Captura de pantalla de las asignaciones de acciones de OpenXR

Siguiente punto de control de desarrollo

Si sigue el recorrido de desarrollo de Unreal que hemos diseñado, significa que ya se encuentra en proceso de explorar los bloques de compilación principales de MRTK. Desde aquí, puede continuar con el siguiente bloque de compilación:

O bien puede saltar a las funcionalidades y las API de la plataforma de realidad mixta:

Puede volver a los puntos de control de desarrollo de Unreal en cualquier momento.