Partilhar via


Entrada 210 do HoloLens (1.ª geração): Gaze

Importante

Os tutoriais Mixed Reality Academy foram concebidos com HoloLens (1.ª geração), Unity 2017 e Mixed Reality Headsets Envolventes em mente. Como tal, consideramos importante deixar estes tutoriais em vigor para os programadores que ainda estão à procura de orientação no desenvolvimento desses dispositivos. Estes tutoriais não serão atualizados com os conjuntos de ferramentas ou interações mais recentes utilizados para HoloLens 2 e poderão não ser compatíveis com versões mais recentes do Unity. Serão mantidas para continuarem a trabalhar nos dispositivos suportados. Foi publicada uma nova série de tutoriais para HoloLens 2.

Gaze é a primeira forma de entrada e revela a intenção e a consciência do utilizador. O MR Input 210 (também conhecido como Project Explorer) é uma descrição aprofundada dos conceitos relacionados com o olhar para Windows Mixed Reality. Vamos adicionar consciência contextual ao nosso cursor e hologramas, tirando o máximo partido do que a sua aplicação sabe sobre o olhar do utilizador.

Temos aqui um astronauta amigável para o ajudar a aprender conceitos de olhar atento. No MR Basics 101, tivemos um cursor simples que acabou de seguir o seu olhar. Hoje, vamos avançar um passo para além do cursor simples:

  • Estamos a tornar o cursor e os nossos hologramas atentos: ambos mudarão com base no local onde o utilizador está a procurar ou onde o utilizador não está a procurar. Isto torna-os conscientes do contexto.
  • Vamos adicionar feedback ao nosso cursor e hologramas para dar ao utilizador mais contexto sobre o que está a ser visado. Este feedback pode ser áudio e visual.
  • Vamos mostrar-lhe técnicas de filtragem para ajudar os utilizadores a atingir alvos mais pequenos.
  • Vamos mostrar-lhe como chamar a atenção do utilizador para os seus hologramas com um indicador direcional.
  • Vamos ensinar-lhe técnicas para levar os seus hologramas com o utilizador à medida que se desloca no seu mundo.

Importante

Os vídeos incorporados em cada um dos capítulos abaixo foram gravados com uma versão mais antiga do Unity e do Mixed Reality Toolkit. Embora as instruções passo a passo sejam precisas e atuais, poderá ver scripts e elementos visuais nos vídeos correspondentes desatualizados. Os vídeos permanecem incluídos para a posteridade e porque os conceitos abrangidos ainda se aplicam.

Suporte de dispositivos

Curso HoloLens Headsets envolventes
Entrada MR 210: Olhar ✔️ ✔️

Antes de começar

Pré-requisitos

Ficheiros de projeto

  • Transfira os ficheiros necessários para o projeto. Requer o Unity 2017.2 ou posterior.
  • Remova o arquivo dos ficheiros para o seu ambiente de trabalho ou outra localização fácil de aceder.

Nota

Se quiser ver o código fonte antes de transferir, este estará disponível no GitHub.

Errata e Notas

  • No Visual Studio, "Just My Code" tem de ser desativado (desmarcado) em Ferramentas-Opções-Depuração>> para atingir pontos de interrupção no seu código.

Capítulo 1 - Configuração do Unity

Objetivos

  • Otimize o Unity para o desenvolvimento do HoloLens.
  • Importe recursos e configure o cenário.
  • Veja o astronauta no HoloLens.

Instruções

  1. Inicie o Unity.
  2. Selecione New Project (Novo Projeto).
  3. Atribua o nome ModelExplorer ao projeto.
  4. Introduza a localização como a pasta Gaze que anmitiu anteriormente.
  5. Certifique-se de que o projeto está definido como 3D.
  6. Clique em Create Project (Criar Projeto).

Definições do Unity para o HoloLens

Temos de informar o Unity de que a aplicação que estamos a tentar exportar deve criar uma vista envolvente em vez de uma vista 2D. Fazemos isso ao adicionar o HoloLens como um dispositivo de realidade virtual.

  1. Aceda a Editar Leitor > de Definições do > Projeto.
  2. No Painel de Inspetor para Definições do Leitor, selecione o ícone Loja Windows .
  3. Expanda o grupo Definições XR .
  4. Na secção Composição , selecione a caixa de verificação Realidade Virtual Suportada para adicionar uma nova lista de SDKs de Realidade Virtual .
  5. Verifique se Windows Mixed Reality aparece na lista. Caso contrário, selecione o + botão na parte inferior da lista e selecione Windows Holographic.

Em seguida, temos de definir o nosso back-end de scripting para .NET.

  1. Aceda a Editar Leitor > de Definições > do Projeto (ainda pode ter isto em cima do passo anterior).
  2. No Painel de Inspetor para Definições do Leitor, selecione o ícone Loja Windows .
  3. Na secção Configuração de Outras Definições , certifique-se de que o Back-end de Scripting está definido como .NET

Por fim, vamos atualizar as nossas definições de qualidade para obter um desempenho rápido no HoloLens.

  1. Aceda a Editar > Qualidade das Definições > do Projeto.
  2. Clique na seta para baixo na linha Predefinida sob o ícone loja Windows.
  3. Selecione Muito Baixa para Aplicações da Loja Windows.

Importar recursos do projeto

  1. Clique com o botão direito do rato na pasta Recursos no painel Projeto .
  2. Clique em Importar Pacote > Personalizado.
  3. Navegue para os ficheiros do projeto que transferiu e clique em ModelExplorer.unitypackage.
  4. Clique em Abrir.
  5. Após o carregamento do pacote, clique no botão Importar .

Configurar o cenário

  1. Na Hierarquia, elimine a Câmara Principal.
  2. Na pasta HoloToolkit , abra a pasta Entrada e, em seguida, abra a pasta Prefabs .
  3. Arraste e largue a prefab MixedRealityCameraParent da pasta Prefabs para a Hierarquia.
  4. Clique com o botão direito do rato na Luz Direcional na Hierarquia e selecione Eliminar.
  5. Na pasta Hologramas , arraste e largue os seguintes recursos na raiz da Hierarquia:
    • AstroMan
    • Lights
    • SpaceAudioSource
    • SpaceBackground
  6. Inicie o Modo ▶ de Reprodução para ver o astronauta.
  7. Clique novamente em Modo ▶ de Reprodução para Parar.
  8. Na pasta Hologramas , localize o recurso Fitbox e arraste-o para a raiz da Hierarquia.
  9. Selecione a Caixa de Ajuste no painel Hierarquia .
  10. Arraste a coleção AstroMan da hierarquia para a propriedade Coleção de Hologramas da Fitbox no painel Inspetor .

Guardar o projeto

  1. Guarde a nova cena: Cenário guardar ficheiro > como.
  2. Clique em Nova Pasta e dê um nome às Cenas da pasta.
  3. Dê o nome "ModelExplorer" ao ficheiro e guarde-o na pasta Cenas .

Compilar o projeto

  1. No Unity, selecione Definições de Compilação de Ficheiros>.
  2. Clique em Adicionar Cenas Abertas para adicionar a cena.
  3. Selecione Plataforma Universal do Windows na lista Plataforma e clique em Mudar de Plataforma.
  4. Se estiver a desenvolver especificamente para o HoloLens, defina o Dispositivo de destino como HoloLens. Caso contrário, deixe-o em Qualquer dispositivo.
  5. Certifique-se de que o Tipo de Compilação está definido como D3D e que o SDK está definido como Mais Recente instalado (que deve ser o SDK 16299 ou mais recente).
  6. Clique em Compilar.
  7. Crie uma Nova Pasta com o nome "Aplicação".
  8. Clique apenas na pasta Aplicação .
  9. Prima Selecionar Pasta.

Quando o Unity terminar, será apresentada uma janela Explorador de Ficheiros.

  1. Abra a pasta Aplicação .
  2. Abra a ModelExplorer Visual Studio Solution.

Se estiver a implementar no HoloLens:

  1. Ao utilizar a barra de ferramentas superior no Visual Studio, altere o destino de Depuração para Versão e de ARM para x86.
  2. Clique na seta pendente junto ao botão Máquina Local e selecione Máquina Remota.
  3. Introduza o endereço IP do dispositivo HoloLens e defina o Modo de Autenticação como Universal (Protocolo Não Encriptado). Clique em Selecionar. Se não souber o endereço IP do seu dispositivo, consulte Definições Rede & Opções Avançadas > da Internet>.
  4. Na barra de menus superior, clique em Depurar –> Iniciar Sem depuração ou prima Ctrl + F5. Se esta for a primeira vez que implementa no seu dispositivo, terá de o emparelhar com o Visual Studio.
  5. Quando a aplicação tiver sido implementada, dispense a Caixa de Ajuste com um gesto de seleção.

Se estiver a ser implementado num headset envolvente:

  1. Ao utilizar a barra de ferramentas superior no Visual Studio, altere o destino de Depuração para Versão e de ARM para x64.
  2. Certifique-se de que o destino de implementação está definido como Máquina Local.
  3. Na barra de menus superior, clique em Depurar –> Iniciar Sem depuração ou prima Ctrl + F5.
  4. Quando a aplicação tiver sido implementada, dispense o Fitbox ao puxar o acionador num controlador de movimento.

Capítulo 2 – Feedback de cursor e de destino

Objetivos

  • Estrutura e comportamento dos elementos visuais do cursor.
  • Feedback do cursor baseado no olhar.
  • Comentários de hologramas baseados em olhar.

Vamos basear o nosso trabalho em alguns princípios de design do cursor, nomeadamente:

  • O cursor está sempre presente.
  • Não deixe que o cursor fique demasiado pequeno ou grande.
  • Evite obstruir o conteúdo.

Instruções

  1. Na pasta HoloToolkit\Input\Prefabs , localize o recurso InputManager .
  2. Arraste e largue o InputManager na Hierarquia.
  3. Na pasta HoloToolkit\Input\Prefabs , localize o recurso Cursor .
  4. Arraste e largue o Cursor na Hierarquia.
  5. Selecione o objeto InputManager na Hierarquia.
  6. Arraste o objeto Cursor da Hierarquia para o campo CursorsimpleSinglePointerSelector do InputManager, na parte inferior do Inspetor.

Configuração do Seletor de Ponteiro Único Simples

Criar e Implementar

  1. Reconstrua a aplicação a partir das Definições de Compilação de Ficheiros>.
  2. Abra a pasta Aplicação.
  3. Abra a ModelExplorer Visual Studio Solution.
  4. Clique em Depurar –> Iniciar Sem depuração ou prima Ctrl + F5.
  5. Observe como o cursor é desenhado e como muda o aspeto se estiver a tocar num holograma.

Instruções

  1. No painel Hierarquia, expanda o objeto AstroMan-GEO_G-Back_Center>.>
  2. Faça duplo clique em Interactible.cs para abri-lo no Visual Studio.
  3. Anule o compromisso das linhas nas chamadas de retorno IFocusable.OnFocusEnter() e IFocusable.OnFocusExit() em Interactible.cs. Estes são chamados pelo inputManager do Mixed Reality Toolkit quando o foco (seja por olhar ou apontando pelo controlador) entra e sai do colisor do GameObject específico.
/* TODO: DEVELOPER CODING EXERCISE 2.d */

void IFocusable.OnFocusEnter()
{
    for (int i = 0; i < defaultMaterials.Length; i++)
    {
        // 2.d: Uncomment the below line to highlight the material when gaze enters.
        defaultMaterials[i].EnableKeyword("_ENVIRONMENT_COLORING");
    }
}

void IFocusable.OnFocusExit()
{
    for (int i = 0; i < defaultMaterials.Length; i++)
    {
        // 2.d: Uncomment the below line to remove highlight on material when gaze exits.
        defaultMaterials[i].DisableKeyword("_ENVIRONMENT_COLORING");
    }
}

Nota

EnableKeyword Utilizamos e DisableKeyword acima. Para utilizá-los na sua própria aplicação com o sombreador Padrão do Toolkit, terá de seguir as diretrizes do Unity para aceder a materiais através de script. Neste caso, já incluímos as três variantes de material realçado necessário na pasta Recursos (procure os três materiais com realce no nome).

Criar e Implementar

  1. Tal como anteriormente, crie o projeto e implemente no HoloLens.
  2. Observe o que acontece quando o olhar é direcionado para um objeto e quando não está.

Capítulo 3 - Técnicas de Segmentação

Objetivos

  • Facilitar o destino dos hologramas.
  • Estabilizar movimentos naturais da cabeça.

Instruções

  1. No painel Hierarquia , selecione o objeto InputManager .
  2. No painel Inspetor , localize o script Estabilizador de Olhar . Clique no mesmo para abrir no Visual Studio, se quiser dar uma vista de olhos.
    • Este script itera exemplos de dados do Raycast e ajuda a estabilizar o olhar do utilizador para a segmentação de precisão.
  3. No Inspetor, pode editar o valor Exemplos de Estabilidade Armazenados . Este valor representa o número de amostras em que o estabilizador itera para calcular o valor estabilizado.

Capítulo 4 - Indicador direcional

Objetivos

  • Adicione um indicador direcional no cursor para ajudar a encontrar hologramas.

Instruções

Vamos utilizar o ficheiro DirectionIndicator.cs que irá:

  1. Mostrar o indicador direcional se o utilizador não estiver a olhar para os hologramas.
  2. Oculte o indicador direcional se o utilizador estiver a observar os hologramas.
  3. Atualize o indicador direcional para apontar para os hologramas.

Vamos começar.

  1. Clique no objeto AstroMan no painel Hierarquia e clique na seta para expandi-lo.
  2. No painel Hierarquia , selecione o objeto DirectionalIndicator em AstroMan.
  3. No painel Inspetor , clique no botão Adicionar Componente .
  4. No menu, escreva na caixa de pesquisa Indicador de Direção. Selecione o resultado da pesquisa.
  5. No painel Hierarquia , arraste e largue o objeto Cursor na propriedade Cursor no Inspetor.
  6. No painel Projeto , na pasta Hologramas , arraste e largue o recurso DirectionalIndicator na propriedade Indicador Direcional no Inspetor.
  7. Criar e implementar a aplicação.
  8. Veja como o objeto de indicador direcional o ajuda a encontrar o astronauta.

Capítulo 5 - Outdoors

Objetivos

  • Utilize o outdoor para ter hologramas sempre virados para si.

Vamos utilizar o ficheiro Billboard.cs para manter um GameObject orientado para que esteja sempre virado para o utilizador.

  1. No painel Hierarquia , selecione o objeto AstroMan .
  2. No painel Inspetor , clique no botão Adicionar Componente .
  3. No menu, escreva na caixa de pesquisa Billboard. Selecione o resultado da pesquisa.
  4. No Inspetor , defina o Eixo Dinâmico como Y.
  5. Experimente! Crie e implemente a aplicação como anteriormente.
  6. Veja como o objeto da Billboard te enfrenta, independentemente da forma como mudas o ponto de vista.
  7. Elimine o script do AstroMan por enquanto.

Capítulo 6 - Tag-Along

Objetivos

  • Utilize Tag-Along para que os nossos hologramas nos sigam pela sala.

À medida que trabalhamos neste problema, seremos guiados pelas seguintes restrições de design:

  • O conteúdo deve ser sempre um olhar de distância.
  • O conteúdo não deve estar no caminho.
  • O conteúdo de bloqueio de cabeça é desconfortável.

A solução utilizada aqui é utilizar uma abordagem "tag-along".

Um objeto de tag-along nunca sai totalmente da vista do utilizador. Pode pensar numa etiqueta como sendo um objeto ligado à cabeça do utilizador por elásticos. À medida que o utilizador se move, o conteúdo permanecerá num olhar fácil ao deslizar para a margem da vista sem sair completamente. Quando o utilizador olha para o objeto tag-along, este fica mais à vista.

Vamos utilizar o ficheiro SimpleTagalong.cs que irá:

  1. Determine se o objeto Tag-Along está dentro dos limites da câmara.
  2. Se não estiver dentro da vista frustum, posicione o Tag-Along para parcialmente dentro da vista frustum.
  3. Caso contrário, posicione o Tag-Along a uma distância predefinida do utilizador.

Para tal, primeiro temos de alterar o script Interactible.cs para chamar TagalongAction.

  1. Edite Interactible.cs ao concluir o exercício de codificação 6.a (anular comentários das linhas 84 a 87).
/* TODO: DEVELOPER CODING EXERCISE 6.a */
// 6.a: Uncomment the lines below to perform a Tagalong action.
if (interactibleAction != null)
{
    interactibleAction.PerformAction();
}

O script InteractibleAction.cs , emparelhado com Interactible.cs , executa ações personalizadas quando toca em hologramas. Neste caso, vamos utilizar uma especificamente para a identificação.

  • Na pasta Scripts , clique no recurso TagalongAction.cs para abrir no Visual Studio.
  • Conclua o exercício de codificação ou altere-o para o seguinte:
    • Na parte superior da Hierarquia, na barra de pesquisa, escreva ChestButton_Center e selecione o resultado.
    • No painel Inspetor , clique no botão Adicionar Componente .
    • No menu, escreva na caixa de pesquisa Tagalong Action. Selecione o resultado da pesquisa.
    • Na pasta Hologramas , localize o recurso Tagalong .
    • Selecione o objeto ChestButton_Center na Hierarquia. Arraste e largue o objeto TagAlong do painel Projeto no Inspetor para a propriedade Objeto Para Tagalong .
    • Arraste o objeto Ação do Tagalong do Inspetor para o campo Ação Interactível no script Interactible .
  • Faça duplo clique no script TagalongAction para o abrir no Visual Studio.

Configuração interacionável

Temos de adicionar o seguinte:

  • Adicione a funcionalidade à função PerformAction no script TagalongAction (herdado de InteractibleAction).
  • Adicione outdoors ao objeto olhado e defina o eixo dinâmico como XY.
  • Em seguida, adicione Tag-Along simples ao objeto.

Eis a nossa solução, em TagalongAction.cs:

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.

using HoloToolkit.Unity;
using UnityEngine;

public class TagalongAction : InteractibleAction
{
    [SerializeField]
    [Tooltip("Drag the Tagalong prefab asset you want to display.")]
    private GameObject objectToTagalong;

    private void Awake()
    {
        if (objectToTagalong != null)
        {
            objectToTagalong = Instantiate(objectToTagalong);
            objectToTagalong.SetActive(false);

            /* TODO: DEVELOPER CODING EXERCISE 6.b */

            // 6.b: AddComponent Billboard to objectToTagAlong,
            // so it's always facing the user as they move.
            Billboard billboard = objectToTagalong.AddComponent<Billboard>();

            // 6.b: AddComponent SimpleTagalong to objectToTagAlong,
            // so it's always following the user as they move.
            objectToTagalong.AddComponent<SimpleTagalong>();

            // 6.b: Set any public properties you wish to experiment with.
            billboard.PivotAxis = PivotAxis.XY; // Already the default, but provided in case you want to edit
        }
    }

    public override void PerformAction()
    {
        // Recommend having only one tagalong.
        if (objectToTagalong == null || objectToTagalong.activeSelf)
        {
            return;
        }

        objectToTagalong.SetActive(true);
    }
}
  • Experimente! Crie e implemente a aplicação.
  • Veja como o conteúdo segue o centro do ponto de olhar, mas não continuamente e sem o bloquear.