Estabilidade do holograma

Para obter hologramas estáveis, o 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 bom desenvolvimento de aplicativos. Aplicativos em execução em constantes 60 quadros por segundo em um ambiente em que o HoloLens pode acompanhar o ambiente garante que o holograma e o sistema de coordenadas correspondentes estejam em sincronia. Da perspectiva de um usuário, os hologramas destinados a serem estacionários não serão movidos em relação ao ambiente.

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

  • Exatidão. Depois que o holograma estiver bloqueado e colocado no mundo real, ele deverá permanecer onde ele é colocado em relação ao ambiente ao redor e independentemente 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 tremulação como tremulação de alta frequência de um holograma, o que pode acontecer quando o acompanhamento do ambiente é degradado. Para usuários, a solução está executando o ajuste do sensor.
  • Trepidação. As baixas frequências de renderização resultam em movimento desigual 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 ocorre 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 "pops" ou "salta" para longe de sua localização ocasionalmente. O jumpiness pode ocorrer à medida que o acompanhamento ajusta os hologramas para corresponder à compreensão atualizada do seu ambiente.
  • Nadar. Quando um holograma aparece para balançar 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 está 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 no HoloLens são telas sequenciais de cores, que exibem canais de cores flash de vermelho-verde-azul-verde a 60 Hz (campos de cores individuais são mostrados em 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 os cabeçalho 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 no HoloLens são atualizadas 240 vezes por segundo, mostrando quatro campos de cores separados para cada imagem renderizada recentemente, 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, o HoloLens precisa renderizar imagens da posição do usuário. Como a renderização de imagem leva tempo, o 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. O HoloLens tem hardware que ajusta a imagem renderizada para considerar a discrepância entre a posição de cabeçalho 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 paralaxe de movimento.

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

  1. Minimizando a latência geral entre a renderização de uma imagem e a 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 que atinja os olhos do usuário tenha uma quantidade consistente de latência. Se você renderizar a 30 fps, a tela ainda exibirá imagens a 60 FPS, o que significa que a mesma imagem será exibida duas vezes seguidas. 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 o tempo todo ajudará a evitar judder para um determinado holograma móvel.

Consistência de taxa de quadros A consistência da taxa de quadros é tão importante quanto um quadro alto por segundo. Ocasionalmente, os quadros removidos 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 em taxas de quadros mais baixas. Por exemplo, um aplicativo que é renderizado sem problemas para cinco quadros (60 FPS durante esses 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 avaliar a 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 se fixa e se concentra em um objeto .

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

Convergência e acomodação são únicas porque suas indicações extra-retinal relacionadas à forma como os olhos mudam para perceber objetos a 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 se acomodam a um ponto próximo. Quando os olhos veem algo no infinito, os olhos ficam paralelos e o olho se acomoda ao infinito.

Os usuários que usam o HoloLens sempre acomodarão 2,0 m para manter uma imagem clara porque as telas do 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 telas 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 estão visíveis na outra. Essa rivalidade binóculo pode causar interrupções na percepção de profundidade do holograma.

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

Distância ideal para colocar hologramas do usuário

Planos de recorte Para o máximo de conforto, recomendamos cortar a distância de renderização em 85 cm com esmaecimento do conteúdo a partir de 1 m. Em aplicativos em que hologramas e usuários estão estacionários, os hologramas podem ser exibidos confortavelmente até 50 cm. Nesses casos, os aplicativos devem colocar um plano de recorte não mais próximo de 30 cm e esmaecer deve iniciar pelo menos 10 cm de distância do plano de recorte. Sempre que o conteúdo estiver mais próximo de 85 cm, é importante garantir que os usuários não se aproximem ou se aproximem com frequência de hologramas ou que os hologramas não se aproximem ou se aproximem mais do usuário, pois essas situações provavelmente causarão desconforto com o 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 é criar 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 os hologramas não podem ser colocados a 2 m e os 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 interagirem mais de 1 m de distância (por exemplo, ajustar o tamanho do conteúdo e os parâmetros de posicionamento padrão).

Reprojeção

O HoloLens tem uma técnica sofisticada 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 é animada 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 main 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 do 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 longe um holograma estiver longe do plano, menos estável será. Essa opção está disponível em todas as plataformas de MR do 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 foco da 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 Configurações do Windows Mixed Reality em Gerenciamento de Plug-in XR. Os aplicativos DirectX chamam CommitDirect3D11DepthBuffer. O aplicativo não deve chamar SetFocusPoint.
  • Reprojeção do 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 Compartilhado 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 MRTK (Kit de Ferramentas Realidade Misturada) 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 DepthReprojectionMode no HolographicCameraRenderingParameters para AutoPlanar cada quadro. Para o 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 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 do 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 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, que pode ser habilitada no Portal de Dispositivos. Na guiaEstabilidade do Holograma de Exibições>, marque a caixa de seleção Exibir visualização de profundidade no 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 aparecerá no Realidade Misturada Capture. Ele só é visível por meio do dispositivo.

Algumas ferramentas de exibiçã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 do 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 seu aplicativo ao sistema para habilitar a reprojeção baseada em profundidade por pixel. A menos que seja executado em um HoloLens, você geralmente deve evitar definir o plano de estabilização.

Plano de estabilização para objetos 3D

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á-lo 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 o 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 aplicativos 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á nenhuma maneira universal de configurar o plano de estabilização e ele é específico do aplicativo. Nossa recomendação de main é 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 neste 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 pequenas esferas 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 a cena tiver conteúdo em profundidades substancialmente diferentes, favorecimento 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 evitar 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 na 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 entre os 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 do HoloLens, um artefato chamado "separação de cores" às vezes pode ser percebido. Ela se manifesta como a imagem que se separa 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 distorçã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 distorçã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 à medida que um usuário gira a cabeça para o lado:

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

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 com bloqueio 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 com que o objeto retardo o foco do usuário. Ele deve aparecer como se tivesse alguma inércia e estivesse preso ao olhar "sobre molas". Essa abordagem retarda o cursor (reduzindo a distância de separação) e o coloca atrás do ponto de foco provável do usuário. Contanto que ele alcance rapidamente quando o usuário para de mudar o olhar, parece 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 foco 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