Compartir a través de


Seguimiento de las manos en Unreal

El sistema de seguimiento de manos usa las palma 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 le permite realizar un seguimiento y usar las manos y los dedos de los usuarios como entrada, a las que se puede acceder tanto en Planos técnicos como en C++. La API de Unreal envía los datos como un sistema de coordenadas, con tics sincronizados con el motor de Unreal.

Imagen de esqueleto de mano con superposición de articulacionesEsqueleto de mano

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

Imagen de las opciones de bluprint de 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 ubicaciones de unión manual y dibuja un sistema de coordenadas de depuración en la ubicación de cada articulación.

Plano técnico de obtención de la función de datos de mirada conectada a seguimiento de línea 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 radii.

Las posturas de mano se exponen a animation mediante el complemento Live Link.

Si los complementos de 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 origen de seguimiento de manos de Windows Mixed Reality.

Origen de Live Link

Después de habilitar el origen y abrir un recurso de animación, expanda la sección Animación de la pestaña Vista previa escena 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 reasignar mediante WindowsMixedRealityHandTrackingLiveLinkRemapAsset:

Animación de vínculo en directo 2

También se puede subclasificar 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 manual como geometría rastreada

Importante

Para obtener mallas de mano como geometría rastreada en OpenXR, es necesario llamar a Set Use Hand Mesh with Enabled Tracking Geometry (Establecer uso de 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 del evento comienza a reproducirse 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 Configuración -> Asignación mundial y active Generar datos de malla a partir de geometría rastreada.

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

  1. Usar 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. Representación de 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 manual. 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 manual 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 .

ARTrackable Notify 2

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

En ARTrackable Notify

Visualización de malla de mano en OpenXR

La manera recomendada de visualizar malla manual es usar el complemento XRVisualization de Epic junto con el complemento De 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 una geometría de seguimiento.

Haces de mano

Obtener posición de mano funciona para interacciones cercanas, como agarrar objetos o presionar botones. Sin embargo, a veces necesita 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 en C++ y 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 de 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 determinar si un rayo de mano alcanza un Widget y establece un resultado de posicionamiento personalizado:

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

Gestos

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 un seguimiento. 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 los gestos de suspensión, pulsación y manipulación izquierda de la entrada espacial 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 los gestos pulsar y mantener presionado, pero no los demás. Se denominan asignaciones select y grip de OpenXRMsftHandInteraction. No es necesario habilitar la suscripción; debe declarar los eventos en Project Configuración/Engine/Input, 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.