Navegação com suporte para olhos no MRTK — MRTK2

MRTK

Imagine que você esteja lendo informações sobre uma lousa e quando chegar ao final do texto exibido, o texto rolará automaticamente para cima para revelar mais conteúdo. Ou você pode ampliar fluentemente onde você está olhando. O mapa também ajusta automaticamente o conteúdo para manter os itens de interesse dentro do campo de exibição. Outro aplicativo interessante é a observação de mãos livres de hologramas 3D trazendo automaticamente as partes do holograma que você está olhando para a frente. Esses são alguns dos exemplos descritos nesta página no contexto de navegação com suporte ocular.

As descrições a seguir pressupõem que você já esteja familiarizado com como configurar o acompanhamento ocular em sua cena do MRTK e com as noções básicas de como acessar dados de rastreamento ocular no MRTK Unity. Os exemplos discutidos a seguir fazem parte da EyeTrackingDemo-03-Navigation cena (Assets/MRTK/Examples/Demos/EyeTracking/Scenes/EyeTrackingDemo-03-Navigation).

Resumo: Rolagem automática de texto, painel com suporte para olhar e zoom de um mapa virtual, rotação 3D direcionada por foco sem mãos.

Rolagem automática

A rolagem automática permite que o usuário role os textos sem levantar um dedo. Basta continuar a leitura e o texto rolará automaticamente para cima ou para baixo, dependendo de onde o usuário estiver procurando. Você pode começar com o exemplo fornecido em EyeTrackingDemo-03-Navigation (Assets/MRTK/Examples/Demos/EyeTracking/Scenes). Este exemplo usa um componente TextMesh para permitir o carregamento flexível e a formatação de novo texto. Para habilitar a rolagem automática, basta adicionar os dois scripts a seguir ao componente do colisor da caixa de texto:

ScrollRectTransf

Para rolar por um TextMesh ou, de modo mais geral, um componente RectTransform , você pode usar o script ScrollRectTransf . Se você quiser rolar por uma textura em vez de uma RectTransform, use ScrollTexture em vez de ScrollRectTransf. No seguinte, os parâmetros de ScrollRectTransf que estão disponíveis no Editor do Unity são explicados com mais detalhes:

Parâmetros Descrição
LimitPanning Se habilitado, interromperá o conteúdo rolável em seu limite.
RectTransfToNavigate Referência ao RectTransform para rolar.
RefToViewport Referência ao RectTransform pai do conteúdo rolável para determinar o deslocamento e o limite corretos.
AutoGazeScrollIsActive Se habilitado, o texto rolará automaticamente se o usuário examinar uma região ativa (por exemplo, a parte superior e inferior do painel de rolagem se a velocidade de rolagem vertical não for zero).
ScrollSpeed_x Se definido como um valor diferente de zero, a rolagem horizontal será habilitada. Valores negativos significam uma alteração na direção da rolagem: da esquerda para a direita versus da direita para a esquerda.
ScrollSpeed_y Se definido como um valor diferente de zero, a rolagem vertical será habilitada. Valores negativos significam uma alteração na direção da rolagem: para cima para baixo versus para baixo para cima.
MinDistFromCenterForAutoScroll Distância mínima normalizada em x e y do centro da caixa de ocorrência do destino (0, 0) para rolar. Assim, os valores devem variar entre 0 (sempre rolagem) e 0,5 (sem rolagem).
UseSkimProofing Se habilitado, ele impede movimentos repentinos de rolagem ao olhar rapidamente ao redor. Isso pode fazer com que a rolagem se sinta menos responsiva. Ele pode ser ajustado com o valor SkimProofUpdateSpeed .
SkimProofUpdateSpeed Quanto menor o valor, mais lenta a rolagem acelerará após o skimming. Valor recomendado: 5.

Configuração de rolagem com suporte para olhos no Unity

EyeTrackingTarget

Anexar o componente EyeTrackingTarget permite manipular de forma flexível eventos relacionados ao olhar. O exemplo de rolagem demonstra o texto de rolagem que começa quando o usuário olha para o painel e para quando o usuário está olhando para longe dele. Configuração de rolagem com suporte para olhos no Unity: EyeTrackingTarget

Painel com suporte para foco e zoom

Quem não usou um mapa virtual antes para procurar sua casa ou explorar lugares totalmente novos? O rastreamento ocular permite que você se aprofunde diretamente nas partes que você está interessado e, uma vez ampliado, você pode seguir sem problemas o curso de uma rua para explorar seu bairro! Isso não é apenas útil para explorar mapas geográficos, mas também para conferir detalhes em fotografias, visualizações de dados ou até mesmo imagens médicas transmitidas ao vivo. Usar essa funcionalidade em seu aplicativo é fácil! Para conteúdo renderizado em uma Textura (por exemplo, uma foto, dados transmitidos), basta adicionar o script PanZoomTexture . Para um RectTransform , use PanZoomRectTransf. Estendendo a funcionalidade de Rolagem Automática , basicamente habilitamos a rolagem vertical e horizontal ao mesmo tempo e ampliamos o conteúdo ao redor do ponto de foco atual do usuário.

Parâmetros Descrição
LimitPanning Se habilitado, interromperá o conteúdo rolável em seu limite.
HandZoomEnabledOnStartup Indica se os gestos manuais são habilitados automaticamente para executar um gesto de zoom. Talvez você queira desabilitá-lo no início para evitar disparar acidentalmente ações de zoom.
RendererOfTextureToBeNavigated Renderizador referenciado da textura a ser navegada.
Zoom_Acceleration Aceleração de zoom definindo a inclinação do mapeamento de função de velocidade logística.
Zoom_SpeedMax Velocidade máxima de zoom.
Zoom_MinScale Escala mínima da textura para ampliar - por exemplo, 0,5f (metade do tamanho original).
Zoom_MaxScale Escala máxima da textura para ampliar - por exemplo, 1f (o tamanho original) ou 2,0f (o dobro do tamanho original).
Zoom_TimeInSecToZoom Zoom cronometrado: uma vez disparado, uma redução/redução será executada pelo tempo determinado em segundos.
Zoom_Gesture Tipo de gesto de mão a ser usado para ampliar/reduzir.
--- ---
Pan_AutoScrollIsActive Se habilitado, o texto rolará automaticamente se o usuário examinar uma região ativa (por exemplo, a parte superior e inferior do painel de rolagem se a velocidade de rolagem vertical não for zero).
Pan_Speed_x Se definido como um valor diferente de zero, a rolagem horizontal será habilitada. Valores negativos significam uma alteração na direção da rolagem: da esquerda para a direita versus da direita para a esquerda.
Pan_Speed_y Se definido como um valor diferente de zero, a rolagem vertical será habilitada. Valores negativos significam uma alteração na direção da rolagem: para cima para baixo versus para baixo para cima.
Pan_MinDistFromCenter Distância mínima normalizada em x e y do centro da caixa de ocorrência do destino (0, 0) para rolar. Assim, os valores devem variar entre 0 (sempre rolagem) e 0,5 (sem rolagem).
UseSkimProofing Se habilitado, ele impede movimentos repentinos de rolagem ao olhar rapidamente ao redor. Isso pode fazer com que a rolagem se sinta menos responsiva. Ele pode ser ajustado com o valor SkimProofUpdateSpeed .
SkimProofUpdateSpeed Quanto menor o valor, mais lenta a rolagem acelerará após o skimming. Valor recomendado: 5.

Configuração de panorâmica e zoom com suporte ocular no Unity

Rotação 3D baseada em atenção

Imagine olhar para um objeto 3D e as partes que você deseja ver mais de perto magicamente se voltam em sua direção - como se o sistema lesse sua mente e saiba virar o item em sua direção! Essa é a ideia para rotações 3D baseadas em atenção que permitem investigar todos os lados de um holograma sem levantar um dedo. Para habilitar esse comportamento, basta adicionar o script OnLookAtRotateByEyeGaze à parte do GameObject com um componente Collider . Você pode ajustar vários parâmetros listados abaixo para limitar a rapidez e em quais direções o holograma será girado.

Como você pode imaginar, ter esse comportamento ativo o tempo todo pode rapidamente se tornar bastante perturbador em uma cena lotada. É por isso que talvez você queira começar com esse comportamento desabilitado e habilitá-lo rapidamente usando comandos de voz. Como alternativa, adicionamos um exemplo em EyeTrackingDemo-03-Navigation (Assets/MRTK/Examples/Demos/EyeTracking/Scenes) para usar TargetMoveToCamera para o qual você pode selecionar um destino focado e ele voa na sua frente - basta dizer "Venha para mim".

Uma vez no modo próximo, o modo de rotação automática é habilitado automaticamente. Nesse modo, você pode observá-lo de todos os lados simplesmente inclinando-se para trás e olhando para ele, andando em torno dele ou estendendo a mão para agarrá-lo e girá-lo com a mão. Quando você ignorar o destino (olhe & pinçar ou diga "Enviar de volta"), ele retornará ao seu local original e deixará de reagir a você de longe.

Parâmetros Descrição
Speedx Velocidade de rotação horizontal.
Rápida Velocidade de rotação vertical.
InverseX Para inverter a direção de rotação horizontal.
Inverso Para inverter a direção de rotação vertical.
RotationThreshInDegrees Se o ângulo entre 'Olhar para o Destino' e 'Câmera para Destino' for menor que esse valor, não faça nada. Isso é para evitar pequenas rotações de tremulação.
MinRotX Ângulo mínimo de rotação horizontal. Isso é para limitar a rotação em direções diferentes.
MaxRotX Ângulo máximo de rotação horizontal. Isso é para limitar a rotação em direções diferentes.
MinRotY Ângulo mínimo de rotação vertical para limitar a rotação ao redor do eixo x.
MaxRotY Ângulo máximo de rotação vertical para limitar a rotação ao redor do eixo y.

Configuração de rotação 3D com suporte ocular no Unity

Em resumo, os scripts acima devem permitir que você comece a usar o olhar para várias tarefas de navegação de entrada, como textos de rolagem, texturas de zoom e movimento panorâmico, bem como girar a investigação de hologramas 3D.

Confira também


De volta ao "Acompanhamento ocular no MixedRealityToolkit"