Visão geral do Holographic Rendering

A renderização holográfica permite que seu aplicativo desenhe um holograma em um local preciso no mundo ao redor do usuário, seja precisamente colocado no mundo físico ou em um realm virtual que você criou. Hologramas são objetos feitos de som e luz. A renderização permite que seu aplicativo adicione a luz.

Suporte a dispositivos

Recurso HoloLens (primeira geração) HoloLens 2 Headsets imersivos
Renderização ✔️ ✔️ ✔️

Renderização holográfica

A chave para a renderização holográfica é saber que tipo de dispositivo está sendo usado. Dispositivos com telas de visualização, como o HoloLens, adicionam luz ao mundo. Pixels pretos são totalmente transparentes, enquanto pixels mais brilhantes são cada vez mais opacos. Como a luz das telas é adicionada à luz do mundo real, os pixels brancos são translúcidos.

Embora a renderização estereoscópica forneça uma indicação de profundidade para seus hologramas, adicionar efeitos de aterramento pode ajudar os usuários a ver mais facilmente qual superfície um holograma está próximo. Uma técnica de aterramento é adicionar um brilho ao redor de um holograma na superfície próxima e, em seguida, renderizar uma sombra contra esse brilho. Dessa forma, sua sombra parece subtrair a luz do ambiente. O som espacial é outra indicação de profundidade importante, permitindo que os usuários raciocinam sobre a distância e a localização relativa de um holograma.

Dispositivos com telas opacas, como headsets imersivos Windows Mixed Reality, bloqueiam o mundo. Os pixels pretos são pretos sólidos e qualquer outra cor aparece como essa cor para o usuário. Seu aplicativo é responsável por renderizar tudo o que o usuário vê. Isso torna ainda mais importante manter uma taxa de atualização constante para que os usuários tenham uma experiência confortável.

Parâmetros de renderização previstos

Os headsets de realidade misturada (holoLens e headsets imersivos) acompanham continuamente a posição e a orientação da cabeça do usuário em relação ao ambiente. À medida que o aplicativo começa a preparar seu próximo quadro, o sistema prevê onde a cabeça do usuário estará no futuro no momento exato em que o quadro aparece nas telas. Com base nessa previsão, o sistema calcula a exibição e as transformações de projeção a serem usadas para esse quadro. Seu aplicativo deve usar essas transformações para produzir resultados corretos. Se as transformações fornecidas pelo sistema não forem usadas, a imagem resultante não se alinhará ao mundo real, levando ao desconforto do usuário.

Observação

Para prever com precisão quando um novo quadro atingirá as exibições, o sistema está constantemente medindo a latência efetiva de ponta a ponta do pipeline de renderização do aplicativo. Embora o sistema se ajuste ao comprimento do pipeline de renderização, você pode melhorar a estabilidade do holograma mantendo esse pipeline o mais curto possível.

Aplicativos que usam técnicas avançadas para aumentar a previsão do sistema podem substituir as transformações de exibição e projeção do sistema. Esses aplicativos ainda devem usar transformações fornecidas pelo sistema como base para suas transformações personalizadas para produzir resultados significativos.

Outros parâmetros de renderização

Ao renderizar um quadro, o sistema especifica o visor de buffer de fundo no qual seu aplicativo deve desenhar. Esse visor geralmente é menor que o tamanho total do buffer de quadros. Seja qual for o tamanho do visor, depois que o quadro for renderizado pelo aplicativo, o sistema dimensiona a imagem para preencher a totalidade das exibições.

Para aplicativos que não conseguem renderizar com a taxa de atualização necessária, os parâmetros de renderização do sistema podem ser configurados para reduzir a pressão de memória e o custo de renderização ao custo do aumento do aliasing de pixel. O formato do buffer de fundo também pode ser alterado, o que para alguns aplicativos pode ajudar a melhorar a largura de banda de memória e a taxa de transferência de pixel.

A taxa de caracteres de renderização, resolução e taxa de quadros na qual seu aplicativo é solicitado a renderizar também pode mudar de quadro para quadro e pode ser diferente no olho esquerdo e direito. Por exemplo, quando a MRC (captura de realidade misturada ) está ativa e a configuração de exibição da câmera de foto/vídeo não é aceita, um olho pode ser renderizado com um FOV ou resolução maior.

Para qualquer quadro específico, seu aplicativo deve renderizar usando a transformação de exibição, a transformação de projeção e a resolução do visor fornecida pelo sistema. Além disso, seu aplicativo nunca deve assumir que qualquer parâmetro de renderização ou exibição permanece fixo de quadro a quadro. Mecanismos como o Unity lidam com todas essas transformações para você em seus próprios objetos de câmera para que o movimento físico de seus usuários e o estado do sistema sejam sempre respeitados. Se o aplicativo permitir a movimentação virtual do usuário pelo mundo (por exemplo, usando o thumbstick em um gamepad), você poderá adicionar um objeto de plataforma pai acima da câmera que o move. Isso faz com que a câmera reflita o movimento virtual e físico do usuário. Se o aplicativo modificar a transformação de exibição, a transformação de projeção ou a dimensão do visor fornecida pelo sistema, ele deverá informar o sistema chamando a API de substituição apropriada.

Para aprimorar a estabilidade da renderização holográfica, seu aplicativo deve fornecer ao Windows cada quadro do buffer de profundidade usado para renderização. Se o aplicativo fornecer um buffer de profundidade, ele deverá ter valores de profundidade coerentes, com profundidade expressa em metros da câmera. Isso permite que o sistema use seus dados de profundidade por pixel para estabilizar melhor o conteúdo se a cabeça do usuário acabar um pouco deslocada do local previsto. Se você não conseguir fornecer seu buffer de profundidade, poderá fornecer um ponto de foco e normal, definindo um plano que corta a maior parte do conteúdo. Se o buffer de profundidade e um plano de foco forem fornecidos, o sistema poderá usar ambos. Em particular, é útil fornecer o buffer de profundidade e um ponto de foco que inclui um vetor de velocidade quando seu aplicativo exibe hologramas que estão em movimento.

Consulte o artigo Renderização no DirectX para obter detalhes de baixo nível sobre este tópico.

Câmeras holográficas

Windows Mixed Reality apresenta o conceito de uma câmera holográfica. As câmeras holográficas são semelhantes à câmera tradicional encontrada em textos gráficos 3D; definem as propriedades extrínsecas (posição e orientação) e intrínsecas da câmera. (Por exemplo, campo de exibição é usado para exibir uma cena 3D virtual.) Ao contrário das câmeras 3D tradicionais, o aplicativo não controla a posição, a orientação e as propriedades intrínsecas da câmera. Em vez disso, a posição e a orientação da câmera holográfica são implicitamente controladas pelo movimento do usuário. O movimento do usuário é retransmitido para o aplicativo em uma base quadro a quadro por meio de uma transformação de exibição. Da mesma forma, as propriedades intrínsecas da câmera são definidas pela óptica calibrada do dispositivo e retransmitidas quadro a quadro por meio da transformação de projeção.

Em geral, seu aplicativo será renderizado para uma única câmera estéreo. Um loop de renderização robusto dará suporte a várias câmeras e dará suporte a câmeras mono e estéreo. Por exemplo, o sistema pode pedir ao aplicativo para renderizar de uma perspectiva alternativa quando o usuário ativa um recurso como MRC ( captura de realidade misturada ), dependendo da forma do fone de ouvido. Aplicativos que podem dar suporte a várias câmeras obtê-los aceitando o tipo de câmeras que eles podem dar suporte.

Renderização de volume

Ao renderizar MRIs médicos ou volumes de engenharia em 3D, as técnicas de renderização de volume geralmente são usadas. Essas técnicas podem ser interessantes na realidade misturada, onde os usuários podem naturalmente exibir esse volume de ângulos-chave, simplesmente movendo a cabeça.

Resoluções com suporte no HoloLens (primeira geração)

  • O tamanho máximo do visor é uma propriedade do HolographicDisplay. O HoloLens é definido como o tamanho máximo do visor, que é 720p (1268x720), por padrão.
  • O tamanho do visor pode ser alterado definindo o ViewportScaleFactor no HolographicCamera. Esse fator de escala está no intervalo de 0 a 1.
  • O menor tamanho de visor com suporte no HoloLens (primeira geração) é 50% de 720p, que é 360p (634x360). Este é um ViewportScaleFactor de 0,5.
  • Qualquer coisa inferior a 540p não é recomendada devido à degradação visual, mas pode ser usada para identificar gargalos na taxa de preenchimento de pixels.

Resoluções com suporte no HoloLens 2

  • Os tamanhos de destino de renderização atuais e máximos com suporte são propriedades da configuração de exibição. HoloLens 2 é definido como o tamanho máximo de destino de renderização, que é 1440x936, por padrão.
  • Os aplicativos podem alterar o tamanho dos buffers de destino de renderização chamando o método RequestRenderTargetSize para solicitar um novo tamanho de destino de renderização. Um novo tamanho de destino de renderização será escolhido, que atende ou excede o tamanho de destino de renderização solicitado. Essa API altera o tamanho do buffer de destino de renderização, o que requer realocação de memória na GPU. As implicações disso incluem: o tamanho do destino de renderização pode ser reduzido verticalmente para reduzir a pressão de memória na GPU e esse método não deve ser chamado em alta frequência.
  • Os aplicativos ainda podem alterar o tamanho do visor da mesma maneira que fizeram para o HoloLens 1. Não há nenhuma realocação de memória adicionada na GPU, portanto, ela pode ser alterada em alta frequência, mas não pode ser usada para reduzir a pressão de memória na GPU.
  • O menor tamanho de visor com suporte em HoloLens 2 é 634x412, um ViewportScaleFactor de aproximadamente 0,44 quando o tamanho de destino de renderização padrão está em uso.
  • Se for fornecido um tamanho de destino de renderização menor que o menor tamanho do visor com suporte, o fator de escala do visor será ignorado.
  • Qualquer coisa inferior a 540p não é recomendada devido à degradação visual, mas pode ser usada para identificar gargalos na taxa de preenchimento de pixels.

Confira também