HoloLens (1ª gen) Entrada 210: Olhar

Importante

Os tutoriais da Mixed Reality Academy foram desenhados com HoloLens (1ª gen), Unidade 2017 e Auscultadores Imersivos de Realidade Mista em mente. Como tal, sentimos que é importante deixar estes tutoriais no lugar para os desenvolvedores que ainda estão à procura de orientação no desenvolvimento para esses dispositivos. Estes tutoriais não serão atualizados com os mais recentes instrumentos ou interações que estão a ser utilizados para HoloLens 2 e podem não ser compatíveis com versões mais recentes da Unidade. Serão mantidos para continuar a trabalhar nos dispositivos suportados. Uma nova série de tutoriais foi publicada para HoloLens 2.

O olhar é a primeira forma de entrada e revela a intenção e a consciência do utilizador. Mr Input 210 (também conhecido como Project Explorer) é um mergulho profundo em conceitos relacionados com o olhar para Windows Mixed Reality. Vamos adicionar consciência contextual ao nosso cursor e hologramas, aproveitando ao máximo o que a sua app sabe sobre o olhar do utilizador.

Temos aqui um astronauta amigo para ajudá-lo a aprender conceitos de olhar. No MR Basics 101,tivemos um cursor simples que apenas seguiu o seu olhar. Hoje estamos a mover-nos um passo para além do simples cursor:

  • Estamos a fazer com que o cursor e os nossos hologramas estejam atentos: ambos vão mudar com base no local onde o utilizador está a olhar - ou onde o utilizador não está a olhar. 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 alvo. Este feedback pode ser áudio e visual.
  • Vamos mostrar-lhe técnicas de mira para ajudar os utilizadores a atingir alvos menores.
  • Vamos mostrar-lhe como chamar a atenção do utilizador para os seus hologramas com um indicador direcional.
  • Vamos ensinar-te técnicas para levares os teus hologramas com o utilizador à medida que ela se desloca no teu mundo.

Importante

Os vídeos incorporados em cada um dos capítulos abaixo foram gravados usando uma versão mais antiga de Unidade e o Mixed Reality Toolkit. Embora as instruções passo a passo sejam precisas e atuais, pode ver scripts e visuais nos vídeos correspondentes que estão desatualizados. Os vídeos continuam incluídos para a posteridade e porque os conceitos cobertos ainda se aplicam.

Suporte de dispositivos

Curso HoloLens Auscultadores imersivos
Entrada MR 210: Olhar ✔️ ✔️

Antes de começar

Pré-requisitos

Project ficheiros

  • Descarregue os ficheiros exigidos pelo projeto. Requer Unidade 2017.2 ou mais tarde.
  • Desaprove os ficheiros para o seu ambiente de trabalho ou outro local de fácil acesso.

Nota

Se quiser ver o código fonte antes de descarregar, está disponível no GitHub.

Errata e Notas

  • Em Visual Studio, "Just My Code" precisa de ser desativado (sem controlo) em Ferramentas- > Opções- > Depuração para atingir pontos de rutura no seu código.

Capítulo 1 - Configuração da Unidade

Objetivos

  • Otimizar a Unidade para o desenvolvimento HoloLens.
  • Importar bens e configurar o local.
  • Veja o astronauta no HoloLens.

Instruções

  1. Iniciar a Unidade.
  2. Selecione New Project (Novo Projeto).
  3. Nomeie o projeto ModelExplorer.
  4. Introduza o local como a pasta Gaze que não arquiva previamente.
  5. Certifique-se de que o projeto está definido para 3D.
  6. Clique em Create Project (Criar Projeto).

Configurações de unidade para HoloLens

Precisamos que a Unidade saiba que a app que estamos a tentar exportar deve criar uma visão imersiva em vez de uma visão 2D. Fazemos isso adicionando HoloLens como um dispositivo de realidade virtual.

  1. Ir para editar Project Definições > Player.
  2. No Painel de Inspetores para Definições de Jogadores, selecione o ícone Windows Store.
  3. Expandir o grupo XR Definições.
  4. Na secção de renderização, consulte a caixa de verificação suportada por realidade virtual 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 escolha +.

Em seguida, precisamos definir o nosso backend scripting para .NET.

  1. Vá a Editar Project Definições > Player (ainda pode ter isso acima do passo anterior).
  2. No Painel de Inspetores para Definições de Jogadores, selecione o ícone Windows Store.
  3. Na secção Configuração de Outros Definições, certifique-se de que o Backend scripting está definido para .NET

Finalmente, atualizaremos as nossas definições de qualidade para obter um rápido desempenho no HoloLens.

  1. Ir para editar Project Definições > Qualidade.
  2. Clique na seta de ponta para baixo na linha Padrão sob o ícone Windows Loja.
  3. Selecione Very Low para Windows Apps Store.

Ativos de projeto de importação

  1. Clique à direita na pasta Ativos no painel Project.
  2. Clique no pacote personalizado de pacote de importação.
  3. Navegue para os ficheiros do projeto que descarregou e clique em ModelExplorer.unitypackage.
  4. Clique em Abrir.
  5. Depois de carregar a embalagem, clique no botão Importar.

Configurar a cena

  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 deixe cair o prefab MixedRealityCameraParent da pasta Prefabs para a Hierarquia.
  4. Clique com o botão direito da Luz Direcional na Hierarquia e selecione Delete.
  5. Na pasta Hologramas, arraste e deixe cair os seguintes ativos na raiz da Hierarquia:
    • AstroMan
    • Lights
    • SpaceAudioSource
    • SpaceBackground
  6. Iniciar o modo de reprodução ▶ para ver o astronauta.
  7. Clique em Modo de Reprodução ▶ novamente para parar.
  8. Na pasta Hologramas, encontre o ativo Fitbox e arraste-o até à raiz da Hierarquia.
  9. Selecione a Fitbox no painel hierarquia.
  10. Arraste a coleção AstroMan da Hierarquia para a propriedade holograma collection do Fitbox no painel do Inspetor.

Salve o projeto

  1. Guarde a nova cena: File Save Scene As.
  2. Clique em Nova Pasta e nomeie as cenas dapasta .
  3. Nomeie o ficheiro "ModelExplorer" e guarde-o na pasta Cenas.

Compilar o projeto

  1. In Unitity, selecione File Build Definições.
  2. Clique em Adicionar Cenas Abertas para adicionar a cena.
  3. Selecione Plataforma de Windows Universal na lista de plataformas e clique na Plataforma Switch.
  4. Se estiver a desenvolver especificamente para HoloLens, desenhe o dispositivo Target para HoloLens. Caso contrário, deixe-o em qualquer dispositivo.
  5. Certifique-se de que o Tipo de Construção está definido para D3D e o SDK está definido para o mais recente instalado (que deve ser SDK 16299 ou mais recente).
  6. Clique em Construir.
  7. Criar uma nova pasta chamada "App".
  8. Clique na pasta App.
  9. Prima Selecionar Pasta.

Quando a unidade estiver terminada, aparecerá uma janela do Explorador de Ficheiros.

  1. Abra a pasta App.
  2. Abra a solução Visual Studio ModelExplorer.

Se for implantado para HoloLens:

  1. Utilizando a barra de ferramentas superior em Visual Studio, altere o alvo de Debug para Release e de ARM para x86.
  2. Clique na seta de queda ao lado do botão Máquina Local e selecione Máquina Remota.
  3. Introduza o seu endereço IP HoloLens dispositivo e desafie o modo de autenticação para universal (Protocolo não encriptado). Clique em Selecionar. Se não souber o endereço IP do seu dispositivo, procure Definições Network Internet Advanced &> Options.
  4. Na barra de menu superior, clique em Debug - Comece sem depurar ou prima Ctrl + F5. Se esta for a primeira vez que se implanta no seu dispositivo, terá de emparelhá-lo com Visual Studio.
  5. Quando a aplicação tiver sido implantada, desprete a Fitbox com um gesto selecionado.

Se for implantado num auricular imersivo:

  1. Utilizando a barra de ferramentas superior em Visual Studio, altere o alvo de Debug para Release e de ARM para x64.
  2. Certifique-se de que o alvo de implantação está definido para Máquina Local.
  3. Na barra de menu superior, clique em Debug - Comece sem depurar ou prima Ctrl + F5.
  4. Quando a aplicação tiver sido implantada, desprete a Fitbox puxando o gatilho num controlador de movimento.

Capítulo 2 - Cursor e feedback de destino

Objetivos

  • Design visual cursor e comportamento.
  • Feedback do cursor baseado em gaze.
  • Feedback do holograma baseado em gaze.

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

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

Instruções

  1. Na pasta HoloToolkit\Input\Prefabs, encontre o ativo InputManager.
  2. Arraste e deixe cair o InputManager para a Hierarquia.
  3. Na pasta HoloToolkit\Input\Prefabs, encontre o ativo Cursor.
  4. Arraste e deixe cair o Cursor para a Hierarquia.
  5. Selecione o objeto InputManager na Hierarquia.
  6. Arraste o objeto Cursor da Hierarquia para o campo cursor do InputManager's SimpleSinglePointerSelector,na parte inferior do Inspetor.

Configuração simples do seletor de ponteiros de ponte único

Construir e Implementar

  1. Reconstruir a aplicação a partir de Definições de Construção de Ficheiros.
  2. Abra a pasta App.
  3. Abra a solução Visual Studio ModelExplorer.
  4. Clique em Debug - Comece sem depurar ou prima Ctrl + F5.
  5. Observe como o cursor é desenhado e como muda de aparência se estiver a tocar num holograma.

Instruções

  1. No painel da Hierarquia, expanda o astroman- GEO_G- Back_Center objeto.
  2. Clique duas vezes no .cs Interactível para abri-lo em Visual Studio.
  3. Descompromessão as linhas nas chamadas IFocusEnter eIFocusdable.OnFocusExit() callbacks em Interactible.cs. Estes são chamados pelo InputManager do Mixed Reality Toolkit quando o foco (quer por olhar ou por apontamento do controlador) entra e sai do colisor específico do GameObject.
/* 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

Usamos EnableKeyword e DisableKeyword acima. Para utilizar estes na sua própria app com o shader Standard do Toolkit, terá de seguir as diretrizes da Unidade para aceder a materiais através do script. Neste caso, já incluímos as três variantes de material destacado necessário na pasta Recursos (procure os três materiais com destaque no nome).

Construir e Implementar

  1. Como antes, construir o projeto e implantar para o HoloLens.
  2. Observe o que acontece quando o olhar é apontado para um objeto e quando não é.

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

Objetivos

  • Torna mais fácil atingir hologramas.
  • Estabilizar os movimentos naturais da cabeça.

Instruções

  1. No painel hierarquia, selecione o objeto InputManager.
  2. No painel do Inspetor, encontre o roteiro do Estabilizador gaze. Clique para abrir em Visual Studio, se quiser dar uma olhada.
    • Este script itera sobre amostras de dados do Raycast e ajuda a estabilizar o olhar do utilizador para uma orientação de precisão.
  3. No Inspetor,pode editar o valor das Amostras de Estabilidade Armazenadas. Este valor representa o número de amostras em que o estabilizador se 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 usar o ficheiro .cs Direção que:

  1. Mostre o indicador direcional se o utilizador não estiver a olhar para os hologramas.
  2. Esconda o indicador direcional se o utilizador estiver a olhar para os hologramas.
  3. Atualize o indicador direcional para apontar para os hologramas.

Vamos começar.

  1. Clique no objeto AstroMan no painel da hierarquia e clique na seta para expandi-lo.
  2. No painel hierarquia, selecione o objeto direcional do Indiciador sob o AstroMan.
  3. No painel inspetor, clique no botão Adicionar Componente.
  4. No menu, digite o Indicador de Direção dacaixa de pesquisa . Selecione o resultado da pesquisa.
  5. No painel hierárquica, arraste e deixe cair o objeto Cursor sobre a propriedade cursor no Inspetor.
  6. No painel Project, na pasta Hologramas, arraste e deixe cair o ativo do Indicador Direcional sobre o imóvel indicador direcional no Inspetor.
  7. Construa e implemente a aplicação.
  8. Veja como o objeto indicador direcional ajuda a encontrar o astronauta.

Capítulo 5 - Outdooring

Objetivos

  • Use outdoors para ter hologramas sempre virados para si.

Vamos usar o ficheiro billboard.cs para manter um GameObject orientado de tal forma 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, digite na caixa de pesquisa Billboard. Selecione o resultado da pesquisa.
  4. No Inspetor definir o Eixo Pivot para Y.
  5. Experimente! Construa e implemente a aplicação como antes.
  6. Veja como o objeto da Billboard o enfrenta, não importa como mude o ponto de vista.
  7. Apague o guião do AstroMan por enquanto.

Capítulo 6 - Tag-Along

Objetivos

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

À medida que trabalhamos nesta questão, seremos guiados pelos seguintes constrangimentos de design:

  • O conteúdo deve estar sempre a 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 usada aqui é utilizar uma abordagem "tag-along".

Um objeto de tag-along nunca sai totalmente da visão do utilizador. Pode pensar no tag-along como sendo um objeto ligado à cabeça do utilizador por elásticos. À medida que o utilizador se move, o conteúdo permanecerá dentro de um olhar fácil, deslizando para a borda da vista sem sair completamente. Quando o utilizador olha para o objeto de tag-along, ele entra mais plenamente à vista.

Vamos usar o ficheiro SimpleTagalong.cs que:

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

Para isso, primeiro temos de alterar o roteiro Interactível.cs para chamar o TagalongAction.

  1. Editar Interactível.cs completando o exercício de codificação 6.a (linhas descomprometimento 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 o Interactible.cs executa ações personalizadas quando toca em hologramas. Neste caso, usaremos um especificamente para acompanhar.

  • Na pasta Scripts clique no TagalongAction.cs ativo para abrir em Visual Studio.
  • Complete o exercício de codificação ou altere-o para este:
    • No topo da Hierarquia,no tipo de barra de pesquisa ChestButton_Center e selecione o resultado.
    • No painel inspetor, clique no botão Adicionar Componente.
    • No menu, digite na caixa de pesquisa Tagalong Action. Selecione o resultado da pesquisa.
    • Na Hologramas pasta encontre o ativo Tagalong.
    • Selecione o objeto ChestButton_Center na Hierarquia. Arraste e largue o objeto TagAlong do painel de Project para o Inspetor para a propriedade Object To Tagalong.
    • Arraste o objeto de ação Tagalong do Inspetor para o campo de ação interativa no script Interactível.
  • Clique duas vezes no script TagalongAction para o abrir em Visual Studio.

Configuração interelegível

Precisamos acrescentar o seguinte:

  • Adicione a funcionalidade à função PerformAction no script TagalongAction (herdado da InteractibleAction).
  • Adicione o outdoor ao objeto contemplado e coloque o eixo do pivô em XY.
  • Em seguida, adicione Tag-Along simples ao objeto.

Aqui está a nossa solução, da 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! Construa e implemente a aplicação.
  • Veja como o conteúdo segue o centro do ponto de vista, mas não continuamente e sem o bloquear.