Quando você usa um fone de ouvido de realidade mista, ele se torna o centro do seu mundo holográfico. O componente Unity Camera manipulará automaticamente a renderização estereoscópica e seguirá o movimento e a rotação da cabeça. No entanto, para otimizar totalmente a qualidade visual e a estabilidade do holograma, você deve definir as configurações da câmera descritas abaixo.
Fones de ouvido imersivos HoloLens vs VR
As configurações padrão no componente Unity Camera são para aplicativos 3D tradicionais, que precisam de um plano de fundo semelhante a uma skybox, pois não têm um mundo real.
Ao executar em um fone de ouvido imersivo, você está renderizando tudo o que o usuário vê e, portanto, provavelmente desejará manter a skybox.
No entanto, ao rodar em um fone de ouvido holográfico como o HoloLens, o mundo real deve aparecer atrás de tudo o que a câmera renderiza. Defina o plano de fundo da câmera para ser transparente (no HoloLens, o preto é renderizado como transparente) em vez de uma textura Skybox:
Selecione a câmera principal no painel Hierarquia
No painel Inspetor, localize o componente Câmera e altere o menu suspenso Limpar sinalizadores de Skybox para Cor sólida
Selecione o seletor de cores de plano de fundo e altere os valores RGBA para (0, 0, 0, 0)
Se definir isso a partir do código, você pode usar o Unity Color.clear
O MRTK lidará com configurações específicas da câmera automaticamente, com base na configuração no perfil do sistema da câmera.
Espaço para nome:Microsoft.MixedReality.Toolkit.CameraSystem Tipo: MixedRealityCameraSystem
Para verificar a opacidade da câmera, o sistema MixedRealityCamera tem uma IsOpaque propriedade.
CoreServices.CameraSystem.IsOpaque;
Espaço de nome:UnityEngine.XR Tipo: XRDisplaySubsystem
Você pode usar o código de script para determinar em tempo de execução se o fone de ouvido é imersivo ou holográfico verificando displayOpaque no XRDisplaySubsystem em execução ativa.
Espaço de nome:UnityEngine.XR.WSA Tipo:HolographicSettings
Você pode usar o código de script para determinar em tempo de execução se o fone de ouvido é imersivo ou holográfico verificando HolographicSettings.IsDisplayOpaque.
Instalação da câmera
Seja qual for o tipo de experiência que você está desenvolvendo, a câmera principal é sempre o principal componente de renderização estéreo conectado ao display montado na cabeça do seu dispositivo. Será mais fácil dispor seu aplicativo se você imaginar a posição inicial do usuário como (X: 0, Y: 0, Z: 0). Como a Câmera Principal está rastreando o movimento da cabeça do usuário, a posição inicial do usuário pode ser definida definindo a posição inicial da Câmera Principal.
A escolha central que você precisa fazer é se você está desenvolvendo para HoloLens ou fones de ouvido imersivos VR. Depois de ter isso, pule para qualquer seção de configuração aplicável.
Configuração da câmera HoloLens
Para aplicativos HoloLens, você precisa usar âncoras para todos os objetos que deseja bloquear no ambiente da cena. Recomendamos usar espaço ilimitado para maximizar a estabilidade e criar âncoras em várias salas.
Siga este tutorial passo a passo para adicionar e configurar automaticamente o Mixed Reality Toolkit em seu projeto Unity. Também é possível trabalhar diretamente com a classe MixedRealityPlayspace do MRTK for Unity e definir a Escala de Destino para o Mundo:
MRTK deve lidar com a posição do espaço de jogo e câmera automaticamente, mas é bom verificar duas vezes:
No painel Hierarquia, expanda o GameObject MixedRealityPlayspacee localize o objeto filho Câmera Principal
No painel Inspetor, localize o componente Transformar e altere a Posição para (X: 0, Y: 0, Z: 0)
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Device);
xrInputSubsystem.TrySetTrackingOriginMode(TrackingOriginModeFlags.Unbounded); // Recommendation for OpenXR
Você pode usar o ARSession para aplicativos HoloLens, que funciona melhor com âncoras e ARKit/ARCore.
Importante
A Sessão de RA e os recursos relacionados precisam do AR Foundation instalado.
Também é possível aplicar as alterações da câmera manualmente sem usar o ARSession:
Selecionar câmera principal no painel Hierarquia
No painel Inspetor, localize o componente Transformar e altere a Posição para (X: 0, Y: 0, Z: 0)
Câmera no painel Inspetor no Unity
Adicionar um TrackedPoseDriver à câmera principal
Selecionar câmera principal no painel Hierarquia
No painel Inspetor, localize o componente Transformar e altere a Posição para (X: 0, Y: 0, Z: 0)
Câmera no painel Inspetor no Unity
Vá para a seção Outras Configurações das Configurações do Windows Store Player
Escolha Windows Mixed Reality como o dispositivo, que pode ser listado como Windows Holographic em versões mais antigas do Unity
Selecione Realidade Virtual Suportada
Como o objeto da Câmera Principal é automaticamente marcado como a câmera, o Unity potencializa todo o movimento e tradução.
Observação
Essas configurações precisam ser aplicadas à Câmera em cada cena do seu aplicativo.
Por padrão, quando você cria uma nova cena no Unity, ela conterá um GameObject da Câmera Principal na Hierarquia, que inclui o componente Câmera, mas pode não ter as configurações aplicadas corretamente.
Configuração da câmera VR
O Windows Mixed Reality oferece suporte a aplicativos em uma ampla variedade de escalas de experiência, desde aplicativos somente de orientação e de escala sentada até aplicativos de escala de sala. No HoloLens, você pode ir além e criar aplicativos de escala mundial que permitem que os usuários caminhem além de 5 metros, explorando um andar inteiro de um edifício e além.
Sua primeira etapa na criação de uma experiência de realidade mista no Unity é determinar qual escala de experiência seu aplicativo terá como alvo:
Se você estiver criando para o HL2, recomendamos criar uma experiência no nível dos olhos ou considerar o uso do Entendimento de Cena para raciocinar sobre o piso da cena.
Vá para a seção Outras Configurações das Configurações do Windows Store Player
Escolha Windows Mixed Reality como o dispositivo, que pode ser listado como Windows Holographic em versões mais antigas do Unity
Selecione Realidade Virtual Suportada
Como o objeto da Câmera Principal é automaticamente marcado como a câmera, o Unity potencializa todo o movimento e tradução.
Observação
Essas configurações precisam ser aplicadas à Câmera em cada cena do seu aplicativo.
Por padrão, quando você cria uma nova cena em Unity, ela conterá um GameObject da Câmera Principal na Hierarquia que inclui o componente Câmera, mas não tem as configurações abaixo aplicadas corretamente.
Espaço de nome:UnityEngine.XR Tipo: XRDevice
Para uma experiência em pé ou em escala de sala, você precisará colocar o conteúdo em relação ao chão. Você raciocina sobre o piso do usuário usando o estágio espacial, que representa a origem definida no nível do piso do usuário e o limite opcional da sala, configurado durante a primeira execução.
Para garantir que o Unity esteja operando com seu sistema de coordenadas mundiais no nível do chão, você pode definir e testar se o Unity está usando o tipo de espaço de rastreamento RoomScale:
if (XRDevice.SetTrackingSpaceType(TrackingSpaceType.RoomScale))
{
// RoomScale mode was set successfully. App can now assume that y=0 in Unity world coordinate represents the floor.
}
else
{
// RoomScale mode was not set successfully. App cannot make assumptions about where the floor plane is.
}
Se SetTrackingSpaceType retornar true, o Unity trocou com êxito seu sistema de coordenadas mundiais para rastrear o quadro de referência do estágio.
Se SetTrackingSpaceType retornar false, o Unity não pôde alternar para o quadro de referência do palco, provavelmente porque o usuário não configurou um piso em seu ambiente. Embora um valor de retorno falso não seja comum, isso pode acontecer se o estágio estiver configurado em uma sala diferente e o dispositivo for movido para a sala atual sem que o usuário configure um novo estágio.
Depois que seu aplicativo definir com êxito o tipo de espaço de rastreamento RoomScale, o conteúdo colocado no plano y=0 aparecerá no chão. A origem em 0, 0, 0 será o local específico no chão onde o usuário ficou durante a configuração da sala, com -Z representando a direção para frente que ele estava voltado durante a configuração.
Vá para a seção Outras Configurações das Configurações do Windows Store Player
Escolha Windows Mixed Reality como o dispositivo, que pode ser listado como Windows Holographic em versões mais antigas do Unity
Selecione Realidade Virtual Suportada
Como o objeto da Câmera Principal é automaticamente marcado como a câmera, o Unity potencializa todo o movimento e tradução.
Observação
Essas configurações precisam ser aplicadas à Câmera em cada cena do seu aplicativo.
Por padrão, quando você cria uma nova cena em Unity, ela conterá um GameObject da Câmera Principal na Hierarquia que inclui o componente Câmera, mas não tem as configurações abaixo aplicadas corretamente.
Espaço de nome:UnityEngine.XR Tipo: XRDevice
Para criar uma experiência somente de orientação ou em escala sentada, você precisa definir Unity para o tipo de espaço de rastreamento estacionário. O espaço de rastreamento estacionário define o sistema de coordenadas mundiais da Unity para rastrear o quadro de referência estacionário. No modo de rastreamento estacionário, o conteúdo colocado no editor logo na frente do local padrão da câmera (avançar é -Z) aparecerá na frente do usuário quando o aplicativo for iniciado.
Para uma experiência somente de orientação pura, como um visualizador de vídeo de 360 graus (onde atualizações posicionais da cabeça arruinariam a ilusão), você pode definir XR. InputTracking.disablePositionalTracking para true:
InputTracking.disablePositionalTracking = true;
Para uma experiência em escala sentada, para permitir que o usuário posteriormente recancifique a origem sentada, você pode chamar o XR. Método InputTracking.Recenter :
InputTracking.Recenter();
Se você estiver criando uma experiência em escala sentada, poderá recentralizar a origem mundial do Unity na posição atual da cabeça do usuário chamando o XR. Método InputTracking.Recenter .
Configurando o plano de fundo da câmera
Se você estiver usando MRTK, o plano de fundo da câmera será configurado e gerenciado automaticamente. Para projetos XR SDK ou Legacy WSA, recomendamos definir o fundo da câmera para preto sólido no HoloLens e manter a skybox para VR.
Usando várias câmeras
Quando há vários componentes de câmera na cena, Unity sabe qual câmera usar para renderização estereoscópica com base em qual GameObject tem a tag MainCamera. No XR herdado, ele também usa essa tag para sincronizar o rastreamento de cabeça. No SDK do XR, o rastreamento de cabeça é conduzido por um script TrackedPoseDriver conectado à câmera.
Compartilhando buffers de profundidade
Compartilhar o buffer de profundidade do seu aplicativo com o Windows cada quadro dará ao seu aplicativo um dos dois aumentos na estabilidade do holograma, com base no tipo de fone de ouvido para o qual você está renderizando:
Os fones de ouvido imersivos VR podem cuidar da reprojeção posicional quando um buffer de profundidade é fornecido, ajustando seus hologramas para previsão incorreta tanto na posição quanto na orientação.
Os fones de ouvido HoloLens têm alguns métodos diferentes. O HoloLens 1 selecionará automaticamente um ponto de foco quando um buffer de profundidade for fornecido, otimizando a estabilidade do holograma ao longo do plano que cruza a maior parte do conteúdo. O HoloLens 2 estabilizará o conteúdo usando o LSR de profundidade (consulte Observações).
A caixa de diálogo de configuração do MRTK tentará definir configurações de buffer de profundidade para o XR SDK e o WSA herdado, mas é bom verificar essas guias e verificar as configurações no Unity.
Para definir se seu aplicativo Unity fornecerá um buffer de profundidade para o Windows:
Vá para Editar>gerenciamento de plug-in XR de configurações>do projeto e verifique se o item de menu está expandido.
Clique no item de menu correspondente ao tempo de execução XR que você escolheu, Windows Mixed Reality ou OpenXR. Além disso, verifique se a plataforma de compilação correta está selecionada, pois as guias para Windows Autônomo e Plataforma Universal do Windows estão disponíveis.
Para habilitar e configurar:
Para OpenXR, selecione um formato de profundidade ou "Nenhum" na lista suspensa Modo de envio de profundidade.
Para o Windows Mixed Reality, marque ou desmarque a caixa de seleção Buffer de profundidade compartilhado. Em seguida, selecione um formato na lista suspensa Formato do buffer de profundidade.
Observação
Geralmente, é recomendado usar buffers de profundidade de 16 bits para melhorar o desempenho. No entanto, se estiver usando o formato de profundidade de 16 bits, os efeitos necessários do buffer de estêncil (como alguns painéis de rolagem da interface do usuário Unity) não funcionarão porque o Unity não cria um buffer de estêncil nessa configuração. A seleção do formato de profundidade de 24 bits, por outro lado, geralmente criará um buffer de estêncil de 8 bits, se aplicável na plataforma de gráficos de ponto de extremidade.
Para definir se seu aplicativo Unity fornecerá um buffer de profundidade para o Windows:
Vá para Editar>configurações>do projeto, guia Plataforma>Universal do Windows, Guia>Configurações XR.
Expanda o item SDK do Windows Mixed Reality .
Marque ou desmarque a caixa de seleção Habilitar compartilhamento de buffer de profundidade. Habilitar compartilhamento de buffer de profundidade é verificado por padrão em novos projetos, mas pode ter sido desmarcado por padrão em projetos mais antigos.
Um buffer de profundidade pode melhorar a qualidade visual, desde que o Windows possa mapear com precisão os valores de profundidade normalizados por pixel em seu buffer de profundidade de volta para distâncias em metros, usando os planos próximos e distantes que você definiu no Unity na câmera principal. Se seus passes de renderização manipulam valores de profundidade de maneiras típicas, você geralmente deve estar bem aqui, embora passes de renderização translúcidos que gravam no buffer de profundidade enquanto mostram pixels de cor existentes podem confundir a reprojeção. Se você souber que seus passes de renderização deixarão muitos de seus pixels de profundidade finais com valores de profundidade imprecisos, é provável que você obtenha melhor qualidade visual desmarcando "Ativar compartilhamento de buffer de profundidade".
Observação
Geralmente, é recomendado usar buffers de profundidade de 16 bits para melhorar o desempenho. No entanto, se estiver usando o formato de profundidade de 16 bits, os efeitos necessários do buffer de estêncil (como alguns painéis de rolagem da interface do usuário Unity) não funcionarão porque o Unity não cria um buffer de estêncil nessa configuração. A seleção do formato de profundidade de 24 bits, por outro lado, geralmente criará um buffer de estêncil de 8 bits, se aplicável na plataforma de gráficos de ponto de extremidade.
Usando planos de recorte
Renderizar conteúdo muito perto do usuário pode ser desconfortável na realidade mista. Você pode ajustar os planos de clipe próximos e distantes no componente Câmera.
Selecione a câmera principal no painel Hierarquia
No painel Inspetor, localize o componente Planos de recorte da câmera e altere a caixa de texto Perto de 0,3 para 0,85. O conteúdo renderizado ainda mais pode levar ao desconforto do usuário e deve ser evitado de acordo com as diretrizes de distância de renderização.
O MRTK fornece um sistema de teletransporte in-box que funciona automaticamente através de mãos articuladas e controladores.
Recomendamos o uso da implementação de teletransporte do MRTK.
Se você optar por não usar MRTK, o Unity fornecerá uma implementação de teletransporte no XR Interaction Toolkit.
Se você optar por implementar o seu próprio, é bom ter em mente que você não pode mover a câmera diretamente. Devido ao controle da câmera de Unity para rastreamento de cabeça, você precisará dar à câmera um pai na hierarquia e mover esse GameObject em vez disso. Este é o equivalente ao Playspace do MRTK.
Recomendamos o uso da implementação de teletransporte do MRTK.
Se você optar por implementar o seu próprio, é bom ter em mente que você não pode mover a câmera diretamente. Devido ao controle da câmera de Unity para rastreamento de cabeça, você precisará dar à câmera um pai na hierarquia e mover esse GameObject em vez disso. Este é o equivalente ao Playspace do MRTK.
Modos de reprojeção
Tanto o HoloLens quanto os fones de ouvido imersivos reprojetarão cada quadro renderizado pelo aplicativo para ajustar qualquer previsão incorreta da posição real da cabeça do usuário quando os fótons forem emitidos.
Por padrão:
Os fones de ouvido imersivos VR cuidarão da reprojeção posicional se o aplicativo fornecer um buffer de profundidade para um determinado quadro. Os fones de ouvido imersivos também ajustarão seus hologramas para erros de previsão tanto na posição quanto na orientação. Se um buffer de profundidade não for fornecido, o sistema corrigirá apenas previsões incorretas na orientação.
Fones de ouvido holográficos como o HoloLens 2 cuidarão da reprojeção posicional, independentemente de o aplicativo fornecer seu buffer de profundidade ou não. A reprojeção posicional é possível sem buffers de profundidade no HoloLens, pois a renderização é muitas vezes esparsa com um plano de fundo estável fornecido pelo mundo real.
Por exemplo, se você estiver criando uma experiência somente de orientação com conteúdo rigidamente bloqueado pelo corpo (por exemplo, conteúdo de vídeo de 360 graus), poderá definir explicitamente o modo de reprojeção como orientação somente definindo-o como ReprojectionMode.OrientationOnly.
Por exemplo, se você estiver criando uma experiência somente de orientação com conteúdo rigidamente bloqueado pelo corpo (por exemplo, conteúdo de vídeo de 360 graus), poderá definir explicitamente o modo de reprojeção como orientação somente definindo-o como HolographicReprojectionMode.OrientationOnly.
Próximo ponto de verificação de desenvolvimento
Se você está acompanhando a jornada de desenvolvimento do Unity que apresentamos, está explorando os blocos de construção principais do MRTK. Deste ponto, você pode prosseguir para o próximo bloco de construção: