Calibragem ocular – MRTK2

Screenshot from eye calibration notification

Visão geral

Se o acompanhamento ocular for uma parte fundamental da experiência do aplicativo, convém garantir que a calibragem ocular do usuário seja válida. O principal motivo para ser inválido é que o usuário optou por ignorar a calibragem de acompanhamento ocular ao colocar o dispositivo.

Esta página aborda o seguinte:

  • Descreve como detectar que um usuário está calibrado nos olhos
  • Fornece um exemplo de como disparar uma notificação do usuário para instruir o usuário a percorrer a calibragem ocular
    • Ignorar automaticamente a notificação se a calibragem ocular se tornar válida
    • Ignorar manualmente a notificação se o usuário optar por continuar sem calibragem

Como detectar o estado de calibragem ocular

A configuração de acompanhamento ocular no MRTK é configurada por meio da IMixedRealityEyeGazeProvider interface.

O uso de CoreServices.InputSystem.EyeGazeProvider fornece a implementação padrão do provedor de foco registrado no kit de ferramentas no runtime. IMixedRealityEyeGazeProvider.IsEyeGazeValid retornará um bool? valor nulo se nenhuma informação do rastreador ocular ainda estiver disponível. Depois que os dados forem recebidos, ele retornará true ou false para indicar que a calibragem de rastreamento ocular do usuário é válida ou inválida.

Notificação de calibragem ocular de exemplo – passo a passo

  1. Abra o pacote de exemplo de acompanhamento ocular do MRTK (Assets/MRTK/Examples/Demos/EyeTracking)

  2. Carregar a cena EyeTrackingDemo-00-RootScene.unity

  3. Confira EyeCalibrationChecker:

    • Nesta cena, já temos um exemplo para detectar se o usuário atual está calibrado sob o objeto de jogo EyeCalibrationChecker. Ele simplesmente usa algumas malhas de texto e tem alguns gatilhos adicionais para mesclar a notificação dentro e fora. Isso inclui aumentar lentamente seu tamanho e opacidade na ativação. Depois que a notificação for descartada, ela diminuirá lentamente seu tamanho e desaparecerá.

    • Anexado ao objeto de jogo EyeCalibrationChecker está o script EyeCalibrationChecker que expõe dois Eventos do Unity:

      • OnEyeCalibrationDetected()
      • OnNoEyeCalibrationDetected()
    • Esses eventos só serão disparados se o status de calibragem for alterado. Portanto, se um usuário optar por ignorar a notificação, a notificação não será exibida novamente até que

      • O aplicativo é reiniciado
      • Um usuário válido foi detectado e, em seguida, um novo usuário não registrado colocou o dispositivo
    • Para testar se as animações e eventos são disparados corretamente, o script EyeCalibrationChecker possui um bool editorTestUserIsCalibrated sinalizador. Por exemplo, ao executar no Editor do Unity, é possível testar:

      1. Se a notificação é exibida automaticamente depois que o status de calibragem for alterado de true para false
      2. Se ele ignorará automaticamente a notificação novamente quando o status mudar de falso para true.
    private bool? prevCalibrationStatus = null;
    ...

   void Update()
   {
      // Get the latest calibration state from the EyeGazeProvider
      bool? calibrationStatus = CoreServices.InputSystem?.EyeGazeProvider?.IsEyeCalibrationValid;

      ...

      if (calibrationStatus != null)
      {
         if (prevCalibrationStatus != calibrationStatus)
         {
            if (calibrationStatus == false)
            {
               OnNoEyeCalibrationDetected.Invoke();
            }
         else
         {
            OnEyeCalibrationDetected.Invoke();
         }

         prevCalibrationStatus = calibrationStatus;
      }
   }

Veja também