Partilhar via


Rastreamento de mãos em Unreal

O sistema de rastreamento de mãos usa as palmas das mãos e os dedos de uma pessoa como entrada. Dados sobre a posição e rotação de cada dedo, toda a palma da mão e gestos das mãos estão disponíveis. A partir da Unreal 4.26, o rastreamento de mãos é baseado no plug-in Unreal HeadMountedDisplay e usa uma API comum em todas as plataformas e dispositivos XR. A funcionalidade é a mesma para os sistemas Windows Mixed Reality e OpenXR.

Pose de mão

A pose de mão permite rastrear e usar as mãos e os dedos de seus usuários como entrada, que pode ser acessada em Blueprints e C++. A API Unreal envia os dados como um sistema de coordenadas, com ticks sincronizados com o Unreal Engine.

Imagem do esqueleto da mão com sobreposição de articulaçõesEsqueleto da mão

A hierarquia é descrita por EHandKeypoint enum:

Imagem das opções de bluprint do ponto chave da mão

Você pode obter todos esses dados das mãos de um usuário usando a função Get Motion Controller Data . Essa função retorna uma estrutura XRMotionControllerData . Abaixo está um exemplo de script Blueprint que analisa a estrutura XRMotionControllerData para obter localizações de juntas manuais e desenha um sistema de coordenadas de depuração no local de cada junta.

Blueprint da função get gaze data conectada ao rastreamento de linha por função de canal

É importante verificar se a estrutura é válida e se é uma mão. Caso contrário, você pode obter um comportamento indefinido no acesso a posições, rotações e matrizes de raios.

As poses das mãos são expostas à animação usando o plug-in Live Link.

Se os plug-ins do Windows Mixed Reality e do Live Link estiverem ativados:

  1. Selecione Window > Live Link para abrir a janela do editor Live Link.
  2. Selecione Origem e ative a Origem de Rastreamento de Mãos do Windows Mixed Reality

Fonte do Live Link

Depois de habilitar a origem e abrir um ativo de animação, expanda a seção Animação na guia Visualizar cena e veja opções adicionais.

Animação Live Link

A hierarquia de animação manual é a mesma que em EWMRHandKeypoint. A animação pode ser redirecionada usando WindowsMixedRealityHandTrackingLiveLinkRemapAsset:

Animação Live Link 2

Também pode ser subclassificado no editor:

Remapeamento de link ao vivo

Malha de Mão

Importante

A malha manual requer OpenXR.

O plug-in Microsoft OpenXR deve ser usado, disponível no Unreal Marketplace ou GitHub.

Malha manual como geometria rastreada

Importante

Obter malhas manuais como uma geometria rastreada no OpenXR requer que você chame set Use Hand Mesh with Enabled Tracking Geometry.

Para ativar esse modo, você deve chamar set Use Hand Mesh with Enabled Tracking Geometry:

Blueprint do evento começar a jogar conectado para definir usar a função de malha manual com o modo de geometria de rastreamento ativado

Nota

Não é possível que ambos os modos sejam ativados ao mesmo tempo. Se você ativar um, o outro será automaticamente desativado.

Acessando dados de malha manual

Malha de Mão

Antes de poder acessar os dados de malha manual, você precisará:

  • Selecione seu ativo ARSessionConfig , expanda as configurações de AR -> World Mapping e marque Gerar dados de malha a partir de geometria rastreada.

Abaixo estão os parâmetros de malha padrão:

  1. Usar dados de malha para oclusão
  2. Gerar colisão para dados de malha
  3. Gerar malha de navegação para dados de malha
  4. Render Mesh Data in Wireframe – parâmetro de depuração que mostra a malha gerada

Esses valores de parâmetro são usados como os padrões de malha de mapeamento espacial e malha manual. Você pode alterá-los a qualquer momento em Blueprints ou código para qualquer malha.

Referência da API C++

Use EEARObjectClassification para encontrar valores de malha manual em todos os objetos rastreáveis.

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

Os seguintes delegados são chamados quando o sistema deteta qualquer objeto rastreável, incluindo uma malha manual.

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

Certifique-se de que seus manipuladores delegados sigam a assinatura de função abaixo:

void UARHandMeshComponent::OnTrackableAdded(UARTrackedGeometry* Added)

Você pode acessar dados de malha através do UARTrackedGeometry::GetUnderlyingMesh:

UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()

Referência da API do Blueprint

Para trabalhar com malhas manuais em Blueprints:

  1. Adicionar um componente ARTrackableNotify a um ator do Blueprint

ARTrackable Notificar

  1. Vá para o painel Detalhes e expanda a seção Eventos .

ARTrackable Notificar 2

  1. Substitua em Adicionar/Atualizar/Remover Geometria Controlada com os seguintes nós no Gráfico de Eventos:

No ARTrackable Notificar

Visualização de malha manual no OpenXR

A maneira recomendada de visualizar a malha manual é usar o plug-in XRVisualization da Epic junto com o plug-in Microsoft OpenXR.

Em seguida, no editor de blueprint, você deve usar a função set Use Hand Mesh do plug-in Microsoft OpenXR com XRVisualization ativado como parâmetro:

Blueprint do evento começar a jogar conectado para definir usar a função de malha de mão com o modo xrvisualization ativado

Para gerenciar o processo de renderização, você deve usar o Render Motion Controller do XRVisualization:

Modelo de obter a função de dados do controlador de movimento conectada para renderizar a função do controlador de movimento

O resultado:

Imagem da mão digital sobreposta a uma mão humana real

Se você precisar de algo mais complicado, como desenhar uma malha de mão com um sombreador personalizado, você precisa obter as malhas como uma geometria rastreada.

Raios de mão

Fazer pose de mão funciona para interações próximas, como agarrar objetos ou pressionar botões. No entanto, às vezes você precisa trabalhar com hologramas que estão longe de seus usuários. Isso pode ser feito com raios de mão, que podem ser usados como dispositivos apontadores em C++ e Blueprints. Você pode desenhar um raio de sua mão até um ponto distante e, com alguma ajuda do traçado de raios Unreal, selecionar um holograma que, de outra forma, estaria fora de alcance.

Importante

Como todos os resultados da função mudam a cada quadro, todos eles são chamáveis. Para obter mais informações sobre funções puras e impuras ou chamáveis, consulte o guia de usuário do Blueprint sobre funções.

Para obter os dados para os raios de mão, você deve usar a função Get Motion Controller Data da seção anterior. A estrutura retornada contém dois parâmetros que você pode usar para criar um raio de mão – Posição da mira e Rotação da mira. Estes parâmetros formam um raio dirigido pelo cotovelo. Você deve levá-los e encontrar um holograma sendo apontado.

Abaixo está um exemplo de determinar se um raio de mão atinge um Widget e definir um resultado de acerto personalizado:

Modelo da função de dados do controlador de movimento

Gestos

O HoloLens 2 rastreia gestos espaciais, o que significa que você pode capturar esses gestos como entrada. O rastreamento de gestos é baseado em um modelo de assinatura. Você deve usar a função "Configurar gestos" para informar ao dispositivo quais gestos você deseja rastrear. Você pode encontrar mais detalhes sobre gestos no documento de uso básico do HoloLens 2.

Windows Mixed Reality

Blueprint de evento começar a jogar conectado para configurar a função de gestos

Em seguida, você deve adicionar código para se inscrever nos seguintes eventos:

Modelo de gestos de retenção de entrada espacial do Windows, toque e manipulação à esquerdaCaptura de ecrã da entrada espacial do Windows Opções de gestos de toque no painel de detalhes

OpenXR

No OpenXR, os eventos de gestos são rastreados através do pipeline de entrada. Usando a interação com as mãos, o dispositivo pode reconhecer automaticamente os gestos Tocar e segurar, mas não os outros. Eles são nomeados como mapeamentos OpenXRMsftHandInteraction Select e Grip. Você não precisa habilitar a assinatura, você deve declarar os eventos em Configurações do projeto/Motor/Entrada, assim como:

Captura de tela dos mapeamentos de ação OpenXR

Próximo ponto de verificação de desenvolvimento

Se você está seguindo a jornada de desenvolvimento da Unreal que estabelecemos, está no meio da exploração dos principais blocos de construção do MRTK. A partir daqui, você pode continuar para o próximo bloco de construção:

Ou pule para os recursos e APIs da plataforma de Realidade Mista:

Você sempre pode voltar aos pontos de verificação de desenvolvimento da Unreal a qualquer momento.