Estabilidade do holograma

Para obter hologramas estáveis, HoloLens tem um pipeline de estabilização de imagem interno. O pipeline de estabilização funciona automaticamente em segundo plano, portanto, você não precisa executar nenhuma etapa extra para habilitá-lo. No entanto, você deve exercitar técnicas que melhoram a estabilidade do holograma e evitar cenários que reduzam a estabilidade.

Terminologia de qualidade do holograma

A qualidade dos hologramas é resultado de um bom ambiente e um bom desenvolvimento de aplicativos. Aplicativos em execução em uma constante de 60 quadros por segundo em um ambiente em que HoloLens podem acompanhar o ambiente garante que o holograma e o sistema de coordenadas correspondentes estejam em sincronia. Do ponto de vista de um usuário, os hologramas que devem ser estacionários não se moverão em relação ao ambiente.

A terminologia a seguir pode ajudá-lo quando você está identificando problemas com o ambiente, taxas de renderização inconsistentes ou baixas ou qualquer outra coisa.

  • Exatidão. Depois que o holograma é bloqueado e colocado no mundo real, ele deve permanecer onde ele é colocado em relação ao ambiente ao redor e independente do movimento do usuário ou pequenas e esparsas alterações de ambiente. Se um holograma aparecer posteriormente em um local inesperado, será um problema de precisão . Esses cenários podem acontecer se duas salas distintas parecerem idênticas.
  • Jitter. Os usuários observam o tremulação de alta frequência de um holograma, o que pode acontecer quando o acompanhamento do ambiente é degradado. Para os usuários, a solução está executando o ajuste do sensor.
  • Trepidação. Frequências de renderização baixas resultam em movimento irregular e imagens duplas de hologramas. Judder é especialmente perceptível em hologramas com movimento. Os desenvolvedores precisam manter uma constante de 60 FPS.
  • Deriva. Os usuários veem descompasso quando um holograma parece se afastar de onde foi colocado originalmente. O descompasso acontece quando você coloca hologramas longe das âncoras espaciais, especialmente em partes não mapeadas do ambiente. Criar hologramas próximos a âncoras espaciais reduz a probabilidade de descompasso.
  • Jumpiness. Quando um holograma "aparece" ou "pula" para longe de sua localização ocasionalmente. O salto pode ocorrer à medida que o acompanhamento ajusta hologramas para corresponder à compreensão atualizada do seu ambiente.
  • Nadar. Quando um holograma aparece para influenciar correspondente ao movimento da cabeça do usuário. A natação ocorre quando o aplicativo não implementou totalmente a reprojeção e se o HoloLens não estiver calibrado para o usuário atual. O usuário pode executar novamente o aplicativo de calibragem para corrigir o problema. Os desenvolvedores podem atualizar o plano de estabilização para aumentar ainda mais a estabilidade.
  • Separação de cores. As exibições em HoloLens são exibições sequenciais de cores, quais canais de cores flash de vermelho-verde-azul-verde-verde a 60 Hz (campos de cores individuais são mostrados a 240 Hz). Sempre que um usuário rastreia um holograma em movimento com os olhos, as bordas à esquerda e à direita desse holograma se separam em suas cores constituintes, produzindo um efeito arco-íris. O grau de separação depende da velocidade do holograma. Em alguns casos mais raros, mover-se rapidamente enquanto olha para um holograma estacionário também pode resultar em um efeito arco-íris, que é chamado de separação de cores.

Taxa de quadros

A taxa de quadros é o primeiro pilar da estabilidade do holograma. Para que os hologramas pareçam estáveis no mundo, cada imagem apresentada ao usuário deve ter os hologramas desenhados no local correto. As exibições em HoloLens atualização 240 vezes por segundo, mostrando quatro campos de cores separados para cada imagem recém-renderizada, resultando em uma experiência do usuário de 60 FPS (quadros por segundo). Para fornecer a melhor experiência possível, os desenvolvedores de aplicativos devem manter 60 FPS, o que se traduz em fornecer consistentemente uma nova imagem para o sistema operacional a cada 16 milissegundos.

60 FPS Para desenhar hologramas para parecer que eles estão sentados no mundo real, HoloLens precisa renderizar imagens da posição do usuário. Como a renderização de imagem leva tempo, HoloLens prevê onde a cabeça de um usuário estará quando as imagens forem mostradas nas exibições. No entanto, esse algoritmo de previsão é uma aproximação. HoloLens tem hardware que ajusta a imagem renderizada para explicar a discrepância entre a posição de cabeça prevista e a posição real da cabeça. O ajuste faz com que a imagem que o usuário vê apareça como se fosse renderizada do local correto e os hologramas se sintam estáveis. As atualizações de imagem funcionam melhor com pequenas alterações e não podem corrigir completamente certas coisas na imagem renderizada, como o motion-parallax.

Ao renderizar a 60 FPS, você está fazendo três coisas para ajudar a criar hologramas estáveis:

  1. Minimizando a latência geral entre renderizar uma imagem e essa imagem que está sendo vista pelo usuário. Em um mecanismo com um jogo e um thread de renderização em execução em lockstep, a execução em 30FPS pode adicionar 33,3 ms de latência extra. Reduzir a latência diminui o erro de previsão e aumenta a estabilidade do holograma.
  2. Tornando-a para que cada imagem atingindo os olhos do usuário tenha uma quantidade consistente de latência. Se você renderizar a 30 fps, a exibição ainda exibirá imagens a 60 FPS, o que significa que a mesma imagem será exibida duas vezes em uma linha. O segundo quadro terá 16,6 ms mais latência do que o primeiro quadro e terá que corrigir uma quantidade mais pronunciada de erro. Essa inconsistência na magnitude do erro pode causar 60 Hz judder indesejados.
  3. Reduzir a aparência de trepidação, que é caracterizada pelo movimento irregular e por imagens duplas. Um movimento mais rápido do holograma e taxas de renderização mais baixas estão associados a uma trepidação mais acentuada. Lutar para manter 60 FPS em todos os momentos ajudará a evitar judder para um determinado holograma em movimento.

Consistência da taxa de quadros A consistência da taxa de quadros é tão importante quanto um quadro alto por segundo. Ocasionalmente, quadros descartados são inevitáveis para qualquer aplicativo rico em conteúdo, e o HoloLens implementa alguns algoritmos sofisticados para se recuperar de falhas ocasionais. No entanto, uma taxa de quadros constantemente flutuante é muito mais perceptível para um usuário do que executar consistentemente a taxas de quadros mais baixas. Por exemplo, um aplicativo que é renderizado sem problemas para cinco quadros (60 FPS durante a duração desses cinco quadros) e, em seguida, descarta todos os outros quadros para os próximos 10 quadros (30 FPS durante esses 10 quadros) parecerá mais instável do que um aplicativo que renderiza consistentemente a 30 FPS.

Em uma observação relacionada, o sistema operacional limita os aplicativos para 30 FPS quando a captura de realidade misturada está em execução .

Análise de desempenho Há diferentes tipos de ferramentas que podem ser usadas para fazer benchmark da taxa de quadros do aplicativo, como:

  • GPUView
  • Depurador de Gráficos do Visual Studio
  • Profilers integrados a mecanismos 3D, como o Unity

Distâncias de renderização do holograma

O sistema visual humano integra vários sinais dependentes de distância quando fixa e se concentra em um objeto.

  • Acomodação - O foco de um olho individual.
  • Convergência - Dois olhos se movendo para dentro ou para fora para o centro em um objeto.
  • Visão binócular - Disparidades entre as imagens de olho esquerdo e direito que dependem da distância de um objeto longe do ponto de fixação.
  • Sombreamento, tamanho angular relativo e outras indicações monoculares (olho único).

A convergência e a acomodação são únicas porque suas indicações extra-retina estão relacionadas à forma como os olhos mudam para perceber objetos em diferentes distâncias. Na visualização natural, a convergência e a acomodação estão vinculadas. Quando os olhos veem algo próximo (por exemplo, seu nariz), os olhos se cruzam e acomodam até um ponto próximo. Quando os olhos veem algo no infinito, os olhos ficam paralelos e o olho acomoda o infinito.

Os usuários que usam HoloLens sempre acomodam 2,0 m para manter uma imagem clara porque as exibições de HoloLens são fixadas a uma distância óptica de aproximadamente 2,0 m de distância do usuário. Os desenvolvedores de aplicativos controlam onde os olhos dos usuários convergem colocando conteúdo e hologramas em várias profundidades. Quando os usuários acomodam e convergem para distâncias diferentes, o vínculo natural entre as duas indicações é quebrado, o que pode levar a desconforto visual ou fadiga, especialmente quando a magnitude do conflito é grande.

O desconforto do conflito entre vergence e acomodação pode ser evitado ou minimizado mantendo o conteúdo convergido o mais próximo possível de 2,0 m (ou seja, em uma cena com muita profundidade, coloque as áreas de interesse perto de 2,0 m, quando possível). Quando o conteúdo não pode ser colocado perto de 2,0 m, o desconforto do conflito de vergence-accommodation é maior quando o olhar do usuário para frente e para trás entre diferentes distâncias. Em outras palavras, é muito mais confortável olhar para um holograma fixo a 50 cm de distância do que para um holograma a 50 cm que se move para frente e para longe de você com o tempo.

Colocar conteúdo a 2,0 m também é vantajoso porque as duas exibições foram projetadas para se sobrepor totalmente a essa distância. Para imagens colocadas fora deste plano, à medida que se movem para fora do lado do quadro holográfico, elas aparecerão de uma exibição enquanto ainda estiverem visíveis na outra. Essa rivalidade binóculo pode ser disruptiva para a percepção de profundidade do holograma.

Distância ideal para colocação dos hologramas partindo do usuário

Optimal distance for placing holograms from the user

Clip Planes Para o máximo de conforto, recomendamos cortar a distância de renderização a 85 cm com desbotamento fora do conteúdo a partir de 1 m. Em aplicativos em que hologramas e usuários são ambos estacionários, os hologramas podem ser exibidos confortavelmente até 50 cm. Nesses casos, os aplicativos devem colocar um plano de clipe não mais próximo do que 30 cm e desaparecer devem iniciar pelo menos 10 cm de distância do plano de clipe. Sempre que o conteúdo estiver mais próximo de 85 cm, é importante garantir que os usuários não se aproximem ou se afastem frequentemente de hologramas ou que os hologramas não se aproximem ou se afastem do usuário, pois essas situações provavelmente causarão desconforto do conflito de vergence-accommodation. O conteúdo deve ser projetado para minimizar a necessidade de interação com mais de 85 cm do usuário, mas quando o conteúdo deve ser renderizado com mais de 85 cm, uma boa regra geral para os desenvolvedores é projetar cenários em que os usuários e/ou hologramas não se movem em profundidade mais de 25% do tempo.

Práticas recomendadas Quando hologramas não podem ser colocados a 2 m e conflitos entre convergência e acomodação não podem ser evitados, a zona ideal para o posicionamento do holograma é entre 1,25 m e 5 m. Em todos os casos, os designers devem estruturar o conteúdo para incentivar os usuários a interagir 1+ m de distância (por exemplo, ajustar o tamanho do conteúdo e os parâmetros de posicionamento padrão).

Reprojeção

HoloLens tem uma sofisticada técnica de estabilização holográfica assistida por hardware conhecida como reprojeção. A reprojeção leva em conta o movimento e a alteração do ponto de vista (CameraPose) à medida que a cena anima e o usuário move a cabeça. Os aplicativos precisam executar ações específicas para usar melhor a reprojeção.

Há quatro tipos principais de reprojeção

  • Reprojeção de profundidade: Produz os melhores resultados com a menor quantidade de esforço do aplicativo. Todas as partes da cena renderizada são estabilizadas independentemente com base na distância do usuário. Alguns artefatos de renderização podem estar visíveis onde há alterações acentuadas em profundidade. Essa opção só está disponível em headsets HoloLens 2 e imersivos.
  • Reprojeção de planar: Permite que o aplicativo controle preciso sobre a estabilização. Um plano é definido pelo aplicativo e tudo nesse plano será a parte mais estável da cena. Quanto mais um holograma estiver longe do plano, menos estável será. Essa opção está disponível em todas as plataformas de MR Windows.
  • Reprojeção automática do Planar: O sistema define um plano de estabilização usando informações no buffer de profundidade. Essa opção está disponível no HoloLens geração 1 e HoloLens 2.
  • Nenhum: Se o aplicativo não fizer nada, a Reprojeção planar será usada com o plano de estabilização fixo a 2 metros na direção do olhar de cabeça do usuário, geralmente produzindo resultados abaixo do padrão.

Os aplicativos precisam executar ações específicas para habilitar os diferentes tipos de reprojeção

  • Reprojeção de profundidade: O aplicativo envia seu buffer de profundidade para o sistema para cada quadro renderizado. No Unity, a Reprojeção de Profundidade é feita com a opção Buffer de Profundidade Compartilhada no painel Windows Mixed Reality Configurações no Gerenciamento de Plug-in XR. Os aplicativos DirectX chamam CommitDirect3D11DepthBuffer. O aplicativo não deve chamar SetFocusPoint.
  • Reprojeção de planar: Em cada quadro, os aplicativos informam ao sistema a localização de um plano para estabilizar. Os aplicativos do Unity chamam SetFocusPointForFrame e devem ter o Buffer de Profundidade Compartilhada desabilitado. Os aplicativos DirectX chamam SetFocusPoint e não devem chamar CommitDirect3D11DepthBuffer.
  • Reprojeção automática do Planar: Para habilitar, o aplicativo precisa enviar seu buffer de profundidade para o sistema como faria para a Reprojeção de Profundidade. Os aplicativos que usam o REALIDADE MISTURADA TOOLKIT (MRTK) podem definir o provedor de configurações da câmera para usar a Reprojeção do Plano Automático. Os aplicativos nativos devem definir o DepthReprojectionModeholographicCameraRenderingParameters para AutoPlanar cada quadro. Para HoloLens geração 1, o aplicativo não deve chamar SetFocusPoint.

Escolhendo a técnica de reprojeção

Tipo de estabilização Headsets imersivos HoloLens geração 1 HoloLens 2
Reprojeção de profundidade Recomendadas N/D Recomendadas

Os aplicativos do Unity devem usar o Unity 2018.4.12+, o Unity 2019.3+ ou o Unity 2020.3+. Caso contrário, use a Reprojeção De Planar Automática.
Reprojeção automática do Planar N/D Padrão recomendado Recomendado se a Reprojeção de Profundidade não estiver dando os melhores resultados

Os aplicativos do Unity são recomendados para usar o Unity 2018.4.12+, o Unity 2019.3+ ou o Unity 2020.3+. As versões anteriores do Unity funcionarão com resultados de reprojeção ligeiramente degradados.
Reprojeção de planar Não recomendado Recomendado se o Planar Automático não estiver dando os melhores resultados Use se nenhuma das opções de profundidade fornecer resultados desejados

Verificar se a profundidade está definida corretamente

Quando um método de reprojeção usa o buffer de profundidade, é importante verificar se o conteúdo do buffer de profundidade representa a cena renderizada do aplicativo. Vários fatores podem causar problemas. Se houver uma segunda câmera usada para renderizar sobreposições de interface do usuário, por exemplo, é provável que ela substitua todas as informações de profundidade do modo de exibição real. Objetos transparentes geralmente não definem profundidade. Algumas renderizações de texto não definirão a profundidade por padrão. Haverá falhas visíveis na renderização quando a profundidade não corresponder aos hologramas renderizados.

HoloLens 2 tem um visualizador para mostrar onde a profundidade está e não está sendo definida, o que pode ser habilitado no Portal do Dispositivo. Na guia Estabilidade viewsHologram>, selecione a visualização de profundidade de exibição na caixa de seleção de headset. As áreas que têm profundidade definida corretamente serão azuis. Os itens renderizados que não têm conjunto de profundidade são marcados em vermelho e precisam ser corrigidos.

Observação

A visualização da profundidade não será exibida no Realidade Misturada Capture. Ele só é visível por meio do dispositivo.

Algumas ferramentas de visualização de GPU permitirão a visualização do buffer de profundidade. Os desenvolvedores de aplicativos podem usar essas ferramentas para garantir que a profundidade esteja sendo definida corretamente. Consulte a documentação das ferramentas do aplicativo.

Usando a reprojeção de Planar

Observação

Para headsets imersivos da área de trabalho, a configuração de um plano de estabilização geralmente é contraprodutiva, pois oferece menos qualidade visual do que fornecer o buffer de profundidade do aplicativo ao sistema para habilitar a reprojeção baseada em profundidade por pixel. A menos que esteja em execução em um HoloLens, você geralmente deve evitar a configuração do plano de estabilização.

Stabilization plane for 3D objects

O dispositivo tentará escolher automaticamente esse plano, mas o aplicativo deve ajudar selecionando o ponto de foco na cena. Os aplicativos do Unity em execução em um HoloLens devem escolher o melhor ponto de foco com base em sua cena e passá-la para SetFocusPoint(). Um exemplo de como definir o ponto de foco no DirectX está incluído no modelo de cubo giratório padrão.

O Unity enviará seu buffer de profundidade para Windows para habilitar a reprojeção por pixel quando você executar seu aplicativo em um headset imersivo conectado a um computador desktop, o que fornece uma qualidade de imagem ainda melhor sem trabalho explícito do aplicativo. Você só deve fornecer um Ponto de Foco quando seu aplicativo estiver em execução em um HoloLens ou a reprojeção por pixel será substituída.

// SetFocusPoint informs the system about a specific point in your scene to
// prioritize for image stabilization. The focus point is set independently
// for each holographic camera.
// You should set the focus point near the content that the user is looking at.
// In this example, we put the focus point at the center of the sample hologram,
// since that is the only hologram available for the user to focus on.
// You can also set the relative velocity and facing of that content; the sample
// hologram is at a fixed point so we only need to indicate its position.
renderingParameters.SetFocusPoint(
    currentCoordinateSystem,
    spinningCubeRenderer.Position
    );

O posicionamento do ponto de foco depende em grande parte do que o holograma está olhando. O aplicativo tem o vetor de foco para referência e o designer de aplicativo sabe qual conteúdo deseja que o usuário observe.

A única coisa mais importante que um desenvolvedor pode fazer para estabilizar hologramas é renderizar a 60 FPS. Cair abaixo de 60 FPS reduzirá drasticamente a estabilidade do holograma, seja qual for a otimização do plano de estabilização.

Práticas recomendadas Não há uma maneira universal de configurar o plano de estabilização e ele é específico do aplicativo. Nossa principal recomendação é experimentar e ver o que funciona melhor para seu cenário. No entanto, tente alinhar o plano de estabilização com o máximo de conteúdo possível porque todo o conteúdo desse plano está perfeitamente estabilizado.

Por exemplo:

  • Se você tiver apenas conteúdo planar (aplicativo de leitura, aplicativo de reprodução de vídeo), alinhe o plano de estabilização com o plano que tem seu conteúdo.
  • Se houver três esferas pequenas bloqueadas pelo mundo, faça com que o plano de estabilização seja "cortado" nos centros de todas as esferas que estão atualmente na exibição do usuário.
  • Se sua cena tiver conteúdo em profundidades substancialmente diferentes, favoreça outros objetos.
  • Certifique-se de ajustar o ponto de estabilização a cada quadro para coincidir com o holograma que o usuário está examinando

Coisas a serem evitadas O plano de estabilização é uma ótima ferramenta para alcançar hologramas estáveis, mas se usado incorretamente, pode resultar em grave instabilidade de imagem.

  • Não "dispare e esqueça". Você pode acabar com o plano de estabilização atrás do usuário ou anexado a um objeto que não está mais no modo de exibição do usuário. Verifique se o plano de estabilização normal está definido em frente à câmera (por exemplo, -camera.forward)
  • Não altere rapidamente o plano de estabilização para frente e para trás entre extremos
  • Não deixe o plano de estabilização definido como uma distância/orientação fixa
  • Não deixe o plano de estabilização ser cortado pelo usuário
  • Não defina o ponto de foco ao executar em um computador desktop em vez de um HoloLens e, em vez disso, confie na reprojeção baseada em profundidade por pixel.

Separação de cores

Devido à natureza das exibições de HoloLens, um artefato chamado "separação de cores" às vezes pode ser percebido. Ela se manifesta como a imagem se separando em cores base individuais - vermelho, verde e azul. O artefato pode ser especialmente visível ao exibir objetos brancos, pois eles têm grandes quantidades de vermelho, verde e azul. É mais pronunciado quando um usuário rastreia visualmente um holograma que está se movendo pelo quadro holográfico em alta velocidade. Outra maneira de o artefato se manifestar é a deformação/deformação de objetos. Se um objeto tiver alto contraste e/ou cores puras, como vermelho, verde, azul, separação de cores será percebido como deformação de diferentes partes do objeto.

Exemplo de como poderia ser a separação de cores de um cursor redondo branco com bloqueio de cabeça enquanto um usuário gira a cabeça para o lado:

Example of what the color separation of a head-locked white round cursor could look like as a user rotates their head to the side.

Embora seja difícil evitar completamente a separação de cores, há várias técnicas disponíveis para atenuá-la.

A separação de cores pode ser vista em:

  • Objetos que estão se movendo rapidamente, incluindo objetos bloqueados de cabeça, como o cursor.
  • Objetos que estão substancialmente longe do plano de estabilização.

Para atenuar os efeitos da separação de cores:

  • Faça o objeto atrasar o olhar do usuário. Ele deve parecer que tem alguma inércia e está anexado ao olhar "sobre molas". Essa abordagem retarda o cursor (reduzindo a distância de separação) e o coloca atrás do ponto de vista provável do usuário. Contanto que ele se atualize rapidamente quando o usuário parar de mudar o olhar, ele se sentirá natural.
  • Se você quiser mover um holograma, tente manter sua velocidade de movimento abaixo de 5 graus/segundo se esperar que o usuário o siga com os olhos.
  • Use luz em vez de geometria para o cursor. Uma fonte de iluminação virtual anexada ao olhar será percebida como um ponteiro interativo, mas não causará separação de cores.
  • Ajuste o plano de estabilização para corresponder aos hologramas que o usuário está observando.
  • Torne o objeto vermelho, verde ou azul.
  • Alterne para uma versão desfocada do conteúdo. Por exemplo, um cursor branco redondo pode ser alterado para uma linha ligeiramente desfocada orientada na direção do movimento.

Como antes, renderizar a 60 FPS e definir o plano de estabilização são as técnicas mais importantes para a estabilidade do holograma. Se estiver enfrentando uma separação de cores perceptível, primeiro verifique se a taxa de quadros atende às expectativas.

Confira também