Quando você usa um fone de ouvido de realidade misturada, ele se torna o centro do seu mundo holográfico. O componente Câmera do Unity 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, defina as configurações de câmera descritas abaixo.
Headsets imersivos holoLens vs VR
As configurações padrão no componente Câmera do Unity são para aplicativos 3D tradicionais, que precisam de uma tela de fundo semelhante a um skybox, pois eles 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, você 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 a tela de fundo da câmera como transparente (no HoloLens, renderizações pretas como transparentes) em vez de uma textura skybox:
Selecione a Câmera Principal no painel Hierarquia
No painel Inspetor, localize o componente Câmera e altere a lista suspensa Limpar Sinalizadores do Skybox para Cor Sólida
Selecione o seletor de cores da tela de fundo e altere os valores RGBA para (0, 0, 0, 0)
Se você definir isso do código, poderá usar o do Unity Color.clear
Para verificar a opacidade da câmera, o sistema MixedRealityCamera tem uma IsOpaque propriedade .
CoreServices.CameraSystem.IsOpaque;
Namespace:UnityEngine.XR Type: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.
Seja qual for o tipo de experiência que você está desenvolvendo, a Câmera Principal é sempre o componente de renderização estéreo primário anexado à tela montada na cabeça do dispositivo. Será mais fácil definir 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á acompanhando 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 holoLens ou VR. Depois de obter isso, pule para qualquer seção de configuração que se aplique.
Configuração da câmera do HoloLens
Para aplicativos do HoloLens, você precisa usar âncoras para todos os objetos que deseja bloquear no ambiente de cena. É recomendável usar espaço não associado para maximizar a estabilidade e criar âncoras em várias salas.
Siga este tutorial passo a passo para adicionar e configurar automaticamente 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 Mundo:
O MRTK deve lidar com a posição do playspace e da câmera automaticamente, mas é bom verificar duas vezes:
No painel Hierarquia, expanda o GameObject MixedRealityPlayspace e 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 ARSession para aplicativos HoloLens, que funciona melhor com âncoras e ARKit/ARCore.
Importante
A Sessão AR e os recursos relacionados precisam do AR Foundation instalado.
Também é possível aplicar as alterações de 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 com suporte
Como o objeto Câmera Principal é marcado automaticamente como a câmera, o Unity alimenta todo o movimento e a tradução.
Observação
Essas configurações precisam ser aplicadas à Câmera em cada cena do aplicativo.
Por padrão, quando você cria uma nova cena no Unity, ela conterá um GameObject de 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
Windows Mixed Reality dá suporte a aplicativos em uma ampla variedade de escalas de experiência, desde aplicativos somente orientação e em escala sentado até aplicativos de escala de sala. No HoloLens, você pode ir mais longe e criar aplicativos de escala mundial que permitem que os usuários andem 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 misturada no Unity é determinar qual escala de experiência seu aplicativo terá como destino:
Se você estiver criando para o HL2, recomendamos criar uma experiência no nível dos olhos ou considerar o uso do Reconhecimento de Cena para raciocinar sobre o chão 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 com suporte
Como o objeto Câmera Principal é marcado automaticamente como a câmera, o Unity alimenta todo o movimento e a tradução.
Observação
Essas configurações precisam ser aplicadas à Câmera em cada cena do aplicativo.
Por padrão, quando você cria uma nova cena no Unity, ela conterá um GameObject câmera principal na hierarquia que inclui o componente Câmera, mas não tem as configurações abaixo aplicadas corretamente.
Namespace:UnityEngine.XR Type:XRDevice
Para uma experiência em escala permanente ou em escala de sala, você precisará colocar o conteúdo em relação ao chão. Você explica 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 piso, 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 alternou com êxito seu sistema de coordenadas do mundo para acompanhar o quadro de referência de estágio.
Se SetTrackingSpaceType retornar false, o Unity não poderá alternar para o quadro de referência de 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 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 o aplicativo definir com êxito o tipo de espaço de acompanhamento 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 estava durante a instalação da sala, com -Z representando a direção para a frente que ele estava enfrentando durante a instalaçã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 com suporte
Como o objeto Câmera Principal é marcado automaticamente como a câmera, o Unity alimenta todo o movimento e a 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 câmera principal na hierarquia que inclui o componente Câmera, mas não tem as configurações abaixo aplicadas corretamente.
Namespace:UnityEngine.XR Type:XRDevice
Para criar uma experiência somente orientação ou de escala sentada, você precisa definir o Unity para o tipo de espaço de acompanhamento Estacionário. O espaço de rastreamento estacionário define o sistema de coordenadas mundiais do Unity para acompanhar o quadro de referência estacionário. No modo de acompanhamento estacionário, o conteúdo colocado no editor 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 orientação pura, como um visualizador de vídeo de 360 graus (em que atualizações posicionais de cabeça arruinariam a ilusão), você pode definir XR. InputTracking.disablePositionalTracking como true:
InputTracking.disablePositionalTracking = true;
Para uma experiência de escala sentada, para permitir que o usuário posteriormente use a origem sentada, você pode chamar o XR. Método InputTracking.Recenter :
Se você estiver usando o MRTK, a tela de fundo da câmera será configurada e gerenciada automaticamente. Para projetos do SDK XR ou do 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 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 acompanhamento da cabeça. No SDK do XR, 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 cada quadro dará ao seu aplicativo um dos dois aumentos na estabilidade do holograma, com base no tipo de headset 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 avaliaçã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 mais conteúdo. 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 configurações de buffer de profundidade para o SDK 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 ProjetoGerenciamento de Plug-in XR e verifique se o item de menu está expandido.
Clique no item de menu correspondente ao runtime do 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 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 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 de gráficos do ponto de extremidade.
Para definir se o aplicativo Unity fornecerá um buffer de profundidade para o Windows:
Acesse Editar>Configurações> do ProjetoPlayer>Plataforma Universal do Windows guia>Configurações de XR.
Expanda o item Windows Mixed Reality SDK.
Marque ou desmarque a caixa de seleção Habilitar Compartilhamento de Buffer de Profundidade . Habilitar o 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 a renderização passar manipula valores de profundidade de maneiras típicas, você geralmente deve ficar bem aqui, embora a renderização translúcida passe essa gravação para o buffer de profundidade enquanto é exibida para pixels de cor existentes pode confundir a reprojeção. Se você souber 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 "Habilitar o 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 de gráficos do ponto de extremidade.
Usando planos de recorte
Renderizar conteúdo muito próximo do usuário pode ser desconfortável na realidade misturada. Você pode ajustar os planos de recorte próximos e distantes no componente Câmera.
Selecione a Câmera Principal no painel Hierarquia
No painel Inspetor , localize o componente CâmeraPlanos de Recorte e altere a caixa de texto Próximo de 0,3 para 0,85. O conteúdo renderizado ainda mais próximo 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 interno 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 Kit de Ferramentas de Interação XR.
Se você optar por implementar a sua própria, é bom ter em mente que não é possível mover a câmera diretamente. Devido ao controle do Unity da câmera para rastreamento de cabeçalho, 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 a sua própria, é bom ter em mente que não é possível mover a câmera diretamente. Devido ao controle do Unity da câmera para rastreamento de cabeçalho, 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 erro de avaliação da posição real da cabeça do usuário quando os fótons forem 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 avaliação incorreta na posição e na orientação. Se um buffer de profundidade não for fornecido, o sistema corrigirá apenas os erros de preterimentos na orientação.
Headsets holográficos como HoloLens 2 cuidarão da reprojeção posicional, quer o aplicativo forneça 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 uma tela de fundo estável fornecida pelo mundo real.
Por exemplo, se você estiver criando uma experiência somente 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 apenas definindo-o como ReprojectionMode.OrientationOnly.
Por exemplo, se você estiver criando uma experiência somente 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 apenas definindo-o como HolographicReprojectionMode.OrientationOnly.
Próximo ponto de verificação de desenvolvimento
Se você estiver acompanhando a jornada de desenvolvimento do Unity que estabelecemos, está no meio da exploração dos principais blocos de construção do MRTK. Deste ponto, você pode prosseguir para o próximo bloco de construção: