Quando você usa um headset de realidade misturada, ele se torna o centro do seu mundo holográfico. O componente Unity Camera lidará automaticamente com 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.
Headsets 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 um skybox, pois não têm um mundo real.
Ao executar em um headset imersivo, você está renderizando tudo o que o usuário vê e, portanto, provavelmente desejará manter o skybox.
No entanto, ao executar em um headset holográfico como o HoloLens, o mundo real deve aparecer por trás de tudo o que a câmera renderiza. Defina o plano de fundo da câmera como 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 fundo e altere os valores RGBA para (0, 0, 0, 0)
Se estiver configurando isso a partir do código, você poderá usar o Color.clear
Para verificar a opacidade da câmera, o sistema MixedRealityCamera tem uma IsOpaque propriedade.
CoreServices.CameraSystem.IsOpaque;
Namespace:UnityEngine.XR Tipo:XRDisplaySubsystem
Você pode usar o código de script para determinar em runtime se o headset é imersivo ou holográfico verificando displayOpaque no XRDisplaySubsystem em execução ativa.
Você pode usar o código de script para determinar em runtime se o headset é 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 à tela montada na cabeça do seu dispositivo. Será mais fácil criar o layout do 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 headsets imersivos do HoloLens ou VR. Depois de fazer isso, pule para a seção de configuração aplicável.
Configuração da câmera do HoloLens
Para aplicativos HoloLens, você precisa usar âncoras para todos os objetos que deseja bloquear no ambiente de cena. Recomendamos o uso de 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 Realidade Misturada Toolkit em seu projeto do Unity. Também é possível trabalhar diretamente com a classe MixedRealityPlayspace do MRTK para Unity e definir a Escala de Destino como World:
O MRTK deve lidar com a posição do espaço de jogo e da câmera automaticamente, mas é bom verificar novamente:
No painel Hierarquia, expanda o GameObject do MixedRealityPlayspace e localize o objeto filho Main Camera
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 ARSession:
Selecione 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
Selecione 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 player da Windows Store
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 Main Camera é marcado automaticamente 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 Main Camera GameObject na Hierarquia que inclui o componente Camera, mas pode não ter as configurações aplicadas corretamente.
Configuração da câmera VR
Windows Mixed Reality dá suporte a aplicativos em uma ampla variedade de escalas de experiência, desde aplicativos somente orientação e escala sentada até aplicativos de escala de sala. No HoloLens, você pode ir além e criar aplicativos em escala mundial que permitem que os usuários caminhem além de 5 metros, explorando um andar inteiro de um prédio e além.
Sua primeira etapa na criação de uma experiência de realidade misturada no Unity é determinar qual escala de experiência seu aplicativo terá como destino:
Se você estiver criando para HL2, recomendamos criar uma experiência no nível dos olhos ou considere usar o Reconhecimento de cena para raciocinar sobre o piso da cena.
Vá para a seção Outras configurações das Configurações do player da Windows Store
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 Main Camera é marcado automaticamente 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 não tem as configurações abaixo aplicadas corretamente.
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 alterou 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 estágio, 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 for 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 enfrentando durante a configuração.
Vá para a seção Outras configurações das Configurações do player da Windows Store
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 Main Camera é marcado automaticamente 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 não tem as configurações abaixo aplicadas corretamente.
Namespace:UnityEngine.XR Tipo:XRDevice
Para criar uma experiência somente de orientação ou de escala sentada, você precisa definir o Unity como o tipo de espaço de rastreamento estacionário. O espaço de rastreamento estacionário define o sistema de coordenadas mundiais do 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 puramente orientada apenas, como um visualizador de vídeo de 360 graus (onde as atualizações de cabeça posicional arruinariam a ilusão), você pode definir XR. InputTracking.disablePositionalTracking para true:
InputTracking.disablePositionalTracking = true;
Para uma experiência de escala sentada, para permitir que o usuário recentralize posteriormente 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 do mundo 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 o MRTK, o plano de fundo da câmera será configurado e gerenciado automaticamente. Para projetos XR SDK ou WSA herdado, recomendamos definir a tela de fundo da câmera como preto sólido no HoloLens e manter o skybox para VR.
Usando várias câmeras
Quando há vários componentes de câmera na cena, o Unity sabe qual câmera usar para renderização estereoscópica com base em qual GameObject tem a marca MainCamera. No XR herdado, ele também usa essa marca para sincronizar o rastreamento de cabeça. No XR SDK, o acompanhamento da cabeça é controlado por um script TrackedPoseDriver anexado à câmera.
Compartilhando buffers de profundidade
Compartilhar o buffer de profundidade do aplicativo com o Windows a cada quadro dará ao aplicativo um dos dois aumentos na estabilidade do holograma, com base no tipo de fone de ouvido para o qual você está renderizando:
Os headsets imersivos de VR podem cuidar da reprojeção posicional quando um buffer de profundidade é fornecido, ajustando seus hologramas para previsão incorreta na posição e na orientação.
Os headsets do 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 Comentários).
A caixa de diálogo de configuração do MRTK tentará definir as configurações de buffer de profundidade para o SDK do XR e o WSA herdado, mas é bom verificar essas guias e verificar as configurações no Unity.
Para definir se o aplicativo Unity fornecerá um buffer de profundidade para o Windows:
Vá para Editar>configurações>do projeto XR Plug-in Management e verifique se o item de menu está expandido.
Clique no item de menu correspondente ao runtime XR que você escolheu, Windows Mixed Reality ou OpenXR. Além disso, verifique se a plataforma de build correta está selecionada, pois as guias para Windows Standalone e Universal Windows Platform 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 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, é recomendável 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 do Unity) não funcionarão porque o Unity não cria um buffer de estêncil nessa configuração. Selecionar o formato de profundidade de 24 bits, por outro lado, geralmente criará um buffer de estêncil de 8 bits, se aplicável, na plataforma gráfica do ponto de extremidade.
Para definir se o aplicativo Unity fornecerá um buffer de profundidade para o Windows:
Vá para Editar>configurações do>projeto Player>, guia>Plataforma Universal do Windows, Configurações XR.
Expanda o item SDK do Windows Mixed Reality.
Marque ou desmarque a caixa de seleção Ativar compartilhamento de buffer de profundidade. Habilitar compartilhamento de buffer de profundidade está marcado 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 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 lidam com valores de profundidade de maneiras típicas, você geralmente deve estar bem aqui, embora os passes de renderização translúcidos que gravam no buffer de profundidade enquanto mostram os pixels de cor existentes possam confundir a reprojeção. Se você sabe que suas passagens 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, é recomendável 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 do Unity) não funcionarão porque o Unity não cria um buffer de estêncil nessa configuração. Selecionar o formato de profundidade de 24 bits, por outro lado, geralmente criará um buffer de estêncil de 8 bits, se aplicável, na plataforma gráfica do ponto de extremidade.
Usar planos de corte
Renderizar o conteúdo muito próximo do usuário pode ser desconfortável na realidade misturada. 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 Câmera Planos de corte e altere a caixa de texto Próximo de 0,3 para 0,85. O conteúdo renderizado ainda mais próximo pode causar desconforto ao usuário e deve ser evitado de acordo com as diretrizes de distância de renderização.
Recentralização da câmera
Se você estiver criando uma experiência em escala sentada, poderá recentralizar a origem do mundo do Unity na posição atual da cabeça do usuário chamando o XR. Método InputTracking.Recenter no XR herdado ou o método XRInputSubsystem.TryRecenter no SDK do XR.
Portabilidade
Esse recurso normalmente é reservado para experiências de RV:
O MRTK fornece um sistema de teletransporte na caixa que funciona automaticamente entre mãos e controladores articulados.
É recomendável usar a implementação de teletransporte do MRTK.
Se você optar por não usar o 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 do Unity da câmera para rastreamento de cabeça, você precisará dar à câmera um pai na hierarquia e mover esse GameObject. Isso é o equivalente ao Playspace do MRTK.
É recomendável usar a 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 do Unity da câmera para rastreamento de cabeça, você precisará dar à câmera um pai na hierarquia e mover esse GameObject. Isso é o equivalente ao Playspace do MRTK.
Modos de reprojeção
Tanto o HoloLens quanto os headsets imersivos reprojetarão cada quadro que seu aplicativo renderiza para ajustar qualquer previsão incorreta da posição real da cabeça do usuário quando os fótons são emitidos.
Por padrão:
Os headsets imersivos de VR cuidarão da reprojeção posicional se o aplicativo fornecer um buffer de profundidade para um determinado quadro. Os headsets imersivos também ajustarão seus hologramas para previsão incorreta na posição e na orientação. Se um buffer de profundidade não for fornecido, o sistema corrigirá apenas previsões incorretas na orientação.
Headsets 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 geralmente é 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ê estiver seguindo a jornada de desenvolvimento do Unity que apresentamos, estará explorando os principais blocos de construção do MRTK. Deste ponto, você pode prosseguir para o próximo bloco de construção: