Controlo manual no Unreal

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

Pose de mão

A pose manual permite-lhe controlar e utilizar as mãos e os dedos dos seus utilizadores como entrada, que podem ser acedidas tanto em Esquemas como em C++. A API Irreal envia os dados como um sistema de coordenadas, com tiques sincronizados com o Motor Irreal.

Imagem de esqueleto de mão com articulações sobrepõemEsqueleto da Mão

A hierarquia é descrita por EHandKeypoint enum:

Imagem das opções de bluprint de ponto de chave manual

Pode obter todos estes dados das mãos de um utilizador com a função Obter Dados do Controlador de Movimento . Essa função devolve uma estrutura XRMotionControllerData . Segue-se um script de esquema de exemplo que analisa a estrutura XRMotionControllerData para obter localizações de articulação manual e desenha um sistema de coordenadas de depuração na localização de cada articulação.

Esquema da função obter dados de olhar ligado ao rastreio de linhas por função de canal

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

As poses à mão são expostas à Animação com o plug-in Live Link.

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

  1. Selecione Windows > Live Link para abrir a janela do editor do Live Link.
  2. Selecione Origem e ative Windows Mixed Reality Origem de Controlo Manual

Origem do Live Link

Depois de ativar a origem e abrir um recurso de animação, expanda a secção Animação no separador Cena de Pré-visualização e veja também opções adicionais.

Animação de Ligação Em Direto

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

Animação de Ligação Dinâmica 2

Também pode ser subclasseado no editor:

Mapa do Live Link

Malha Manual

Importante

A malha manual requer OpenXR.

O plug-in do Microsoft OpenXR tem de ser utilizado, disponível no Unreal Marketplace ou no GitHub.

Malha Manual como geometria controlada

Importante

A obtenção de malhas manumétricas como geometria controlada no OpenXR requer que chame Definir Utilizar Malha Manual com Geometria de Controlo Ativada.

Para ativar esse modo, deve chamar Definir Utilizar o Hand Mesh com Geometria de Controlo Ativada:

O esquema do evento começa a ser reproduzido ligado para definir a função de malha manual com o modo de geometria de controlo ativado

Nota

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

Aceder a Dados do Hand Mesh

Malha Manual

Antes de poder aceder aos dados de malha manual, terá de:

  • Selecione o recurso ARSessionConfig , expanda as Definições de AR –> Definições de Mapeamento Mundial e selecione Gerar Dados de Malha a partir da Geometria Controlada.

Seguem-se os parâmetros de malha predefinidos:

  1. Utilizar Dados de Malha para Oclusão
  2. Gerar Colisão para Dados do Mesh
  3. Gerar o Nav Mesh para Dados do Mesh
  4. Render Mesh Data in Wireframe – parâmetro de depuração que mostra a malha gerada

Estes valores de parâmetros são utilizados como predefinições de malha de mapeamento espacial e malha manual. Pode alterá-los em qualquer altura em Esquemas ou código para qualquer malha.

Referência da API C++

Utilize EEARObjectClassification para localizar valores de malha manual em todos os objetos controláveis.

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

Os delegados seguintes são chamados quando o sistema deteta qualquer objeto controlá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 os processadores delegados seguem a assinatura da função abaixo:

void UARHandMeshComponent::OnTrackableAdded(UARTrackedGeometry* Added)

Pode aceder aos dados de malha através do UARTrackedGeometry::GetUnderlyingMesh:

UMRMeshComponent* UARTrackedGeometry::GetUnderlyingMesh()

Referência da API de Esquema

Para trabalhar com o Hand Meshes em Esquemas:

  1. Adicionar um Componente ARTrackableNotify a um ator do Blueprint

Notificações ARTrackable

  1. Aceda ao painel Detalhes e expanda a secção Eventos .

ArTrackable Notify 2

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

No ARTrackable Notify

Visualização do Hand Mesh no OpenXR

A forma recomendada de visualizar a malha manual é utilizar o plug-in XRVisualization da Epic juntamente com o plug-in Microsoft OpenXR.

Em seguida, no editor de esquemas, deve utilizar a função Definir Utilizar o Hand Mesh a partir do plug-in Microsoft OpenXR com XRVisualization Ativado como parâmetro:

Esquema de início de evento ligado para definir a utilização da função de malha manual com o modo de xrvisualização ativado

Para gerir o processo de composição, deve utilizar o Comando de Movimento de Composição do XRVisualização:

Esquema de obter a função de dados do controlador de movimento ligada para compor a função do controlador de movimento

O resultado:

Imagem de mão digital sobreposta numa verdadeira mão humana

Se precisar de algo mais complicado, como desenhar uma malha manual com um sombreado personalizado, tem de obter as malhas como geometria controlada.

Raios de mão

Obter a pose da mão funciona para interações próximas, como agarrar objetos ou premir botões. No entanto, por vezes precisa de trabalhar com hologramas que estão longe dos seus utilizadores. Isto pode ser feito com raios de mão, que podem ser utilizados como dispositivos apontadores em C++ e Blueprints. Pode desenhar um raio da sua mão para um ponto mais distante e, com alguma ajuda do rastreio de raios irreais, selecione um holograma que, de outra forma, estaria fora de alcance.

Importante

Uma vez que todos os resultados da função mudam todos os fotogramas, são todos chamados. Para obter mais informações sobre funções puras e impuras ou callable, veja o guid do utilizador do Esquema nas funções.

Para obter os dados dos raios manos, deve utilizar a função Obter Dados do Controlador de Movimento da secção anterior. A estrutura devolvida contém dois parâmetros que pode utilizar para criar um raio-mão – Posição do Objetivo e Rotação de Objetivos. Estes parâmetros formam um raio dirigido pelo cotovelo. Deve levá-los e encontrar um holograma a ser apontado.

Segue-se um exemplo de como determinar se um raio-mão atinge um Widget e define um resultado de êxito personalizado:

Esquema da função obter dados do controlador de movimento

Gestos

O HoloLens 2 monitoriza gestos espaciais, o que significa que pode capturar esses gestos como entrada. O controlo de gestos baseia-se num modelo de subscrição. Deve utilizar a função "Configurar Gestos" para indicar ao dispositivo quais os gestos que pretende controlar. Pode encontrar mais detalhes sobre gestos no documento HoloLens 2 Utilização Básica.

Windows Mixed Reality

Esquema do evento iniciar reprodução ligada para configurar a função gestos

Em seguida, deve adicionar código para subscrever os seguintes eventos:

Esquema da suspensão de entrada espacial do Windows, toque e gestos de manipulação à esquerdaCaptura de ecrã das opções de gestos de toque de entrada espacial do Windows no painel de detalhes

OpenXR

No OpenXR, os eventos de gestos são monitorizados através do pipeline de entrada. Através da interação manual, o dispositivo pode reconhecer automaticamente gestos de Toque e Suspensão, mas não os outros. São denominados mapeamentos OpenXRMsftHandInteraction Select e Grip. Não precisa de ativar a subscrição, deve declarar os eventos em Definições do Projeto/Motor/Entrada, da seguinte forma:

Captura de ecrã dos mapeamentos de ações OpenXR

Próximo Ponto de Verificação de Desenvolvimento

Se estiver a seguir a jornada de desenvolvimento Irreal que definimos, está no meio de explorar os principais blocos modulares do MRTK. A partir daqui, pode continuar para o bloco modular seguinte:

Em alternativa, avance para Mixed Reality capacidades e APIs da plataforma:

Pode sempre voltar aos pontos de verificação de desenvolvimento Irreal em qualquer altura.