Estabilidade do holograma
Para obter hologramas estáveis, o HoloLens tem um pipeline de estabilização de imagens incorporado. O pipeline de estabilização funciona automaticamente em segundo plano, pelo que não precisa de efetuar passos adicionais para o ativar. No entanto, deve utilizar técnicas que melhorem a estabilidade do holograma e evite cenários que reduzam a estabilidade.
Terminologia de qualidade do holograma
A qualidade dos hologramas é resultado de um bom ambiente e de um bom desenvolvimento de aplicações. As aplicações em execução a uma constante de 60 fotogramas por segundo num ambiente onde o HoloLens pode controlar o ambiente garantem que o holograma e o sistema de coordenadas correspondentes estão sincronizados. Do ponto de vista de um utilizador, os hologramas destinados a serem estacionários não se movem em relação ao ambiente.
A terminologia seguinte pode ajudá-lo a identificar problemas com o ambiente, taxas de composição inconsistentes ou baixas ou qualquer outra coisa.
- Precisão. Assim que o holograma estiver bloqueado no mundo real e colocado no mundo real, deverá permanecer onde é colocado em relação ao ambiente circundante e independente do movimento do utilizador ou de pequenas e escassas alterações de ambiente. Se um holograma aparecer mais tarde numa localização inesperada, é um problema de precisão . Estes cenários podem ocorrer se duas salas distintas parecerem idênticas.
- Nervosismo. Os utilizadores observam o nervosismo como um tremor de alta frequência de um holograma, o que pode acontecer quando o controlo do ambiente se degrada. Para os utilizadores, a solução está a executar a otimização do sensor.
- Judder. As frequências de composição baixas resultam em movimento desigual e em imagens duplas de hologramas. Judder é especialmente perceptível em hologramas com movimento. Os programadores precisam de manter um FPS constante de 60 FPS.
- Desfasagem. Os utilizadores vêem a deriva como um holograma parece afastar-se do local onde foi originalmente colocado. O desvio ocorre quando coloca hologramas longe das âncoras espaciais, particularmente em partes não mapeadas do ambiente. Criar hologramas perto de âncoras espaciais reduz a probabilidade de desfasamento.
- O salto. Quando um holograma "aparece" ou "salta" para longe da sua localização ocasionalmente. O jumpiness pode ocorrer à medida que o controlo ajusta hologramas para corresponder à compreensão atualizada do seu ambiente.
- Nada. Quando um holograma aparece a influenciar correspondente ao movimento da cabeça do utilizador. O swim ocorre quando a aplicação não implementou totalmente a reprojeção e se o HoloLens não estiver calibrado para o utilizador atual. O utilizador pode executar novamente a aplicação de calibragem para corrigir o problema. Os programadores podem atualizar o plano de estabilização para melhorar ainda mais a estabilidade.
- Separação de cores. Os ecrãs no HoloLens são ecrãs sequenciais de cores, que são apresentados a 240 Hz em canais de cores flash de verde-verde-vermelho a 60 Hz (os campos de cores individuais são apresentados a 240 Hz). Sempre que um utilizador controla um holograma em movimento com os olhos, as margens principais e à direita desse holograma separam-se nas suas cores constituintes, produzindo um efeito arco-íris. O grau de separação depende da velocidade do holograma. Em alguns casos mais raros, mover as cabeças rapidamente enquanto olha para um holograma estacionário também pode resultar num efeito arco-íris, que é chamado separação de cores.
Taxa de fotogramas
A taxa de fotogramas é o primeiro pilar da estabilidade do holograma. Para que os hologramas apareçam estáveis no mundo, cada imagem apresentada ao utilizador tem de ter os hologramas desenhados no local correto. Os ecrãs no HoloLens são atualizados 240 vezes por segundo, mostrando quatro campos de cores separados para cada imagem recém-composta, o que resulta numa experiência de utilizador de 60 FPS (fotogramas por segundo). Para proporcionar a melhor experiência possível, os programadores de aplicações têm de manter 60 FPS, o que se traduz em fornecer consistentemente uma nova imagem ao sistema operativo a cada 16 milissegundos.
60 FPS Para desenhar hologramas para parecer que estão sentados no mundo real, o HoloLens precisa de compor imagens da posição do utilizador. Uma vez que a composição de imagens demora algum tempo, o HoloLens prevê onde estará a cabeça de um utilizador quando as imagens são apresentadas nos ecrãs. No entanto, este algoritmo de predição é uma aproximação. O HoloLens tem hardware que ajusta a imagem composta para ter em conta 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 utilizador vê apareça como se fosse composta a partir da localização correta e os hologramas se sintam estáveis. As atualizações de imagens funcionam melhor com pequenas alterações e não podem corrigir completamente determinadas coisas na imagem composta, como motion-parallax.
Ao compor a 60 FPS, está a fazer três coisas para ajudar a criar hologramas estáveis:
- Minimizar a latência geral entre compor uma imagem e essa imagem ser vista pelo utilizador. Num motor com um jogo e um thread de composição em execução em lockstep, executar a 30FPS pode adicionar 33,3 ms de latência extra. Reduzir a latência diminui o erro de predição e aumenta a estabilidade do holograma.
- Para que todas as imagens que chegam aos olhos do utilizador tenham uma quantidade consistente de latência. Se compor a 30 fps, o ecrã ainda apresenta imagens a 60 FPS, o que significa que a mesma imagem será apresentada duas vezes seguidas. O segundo fotograma terá mais latência de 16,6 ms do que o primeiro fotograma e terá de corrigir uma quantidade de erro mais pronunciada. Esta inconsistência na magnitude do erro pode causar 60 Hz judder indesejados.
- Reduzir o aspeto do judder, que é caracterizado por movimento desigual e imagens duplas. O movimento do holograma mais rápido e as taxas de composição mais baixas estão associadas a um judder mais pronunciado. Tentar manter sempre 60 FPS ajudará a evitar o judder para um determinado holograma em movimento.
Consistência da taxa de fotogramas A consistência da taxa de fotogramas é tão importante como uma moldura elevada por segundo. Ocasionalmente, as molduras removidas são inevitáveis para qualquer aplicação rica em conteúdos e o HoloLens implementa alguns algoritmos sofisticados para recuperar de falhas ocasionais. No entanto, uma taxa de fotogramas em constante flutuação é muito mais perceptível para um utilizador do que a execução consistente a taxas de fotogramas mais baixas. Por exemplo, uma aplicação que é composta sem problemas por cinco fotogramas (60 FPS durante estes cinco fotogramas) e, em seguida, larga todos os outros fotogramas para os próximos 10 fotogramas (30 FPS durante estes 10 fotogramas) aparecerá mais instável do que uma aplicação que é consistentemente composta por 30 FPS.
Numa nota relacionada, o sistema operativo reduz as aplicações para 30 FPS quando a captura de realidade mista está em execução.
Análise de desempenho Existem diferentes tipos de ferramentas que podem ser utilizadas para comparar a taxa de fotogramas da aplicação, tais como:
- GPUView
- Visual Studio Graphics Debugger
- Profilers incorporados em motores 3D, como o Unity
Distâncias de composição do holograma
O sistema visual humano integra vários sinais dependentes da distância quando se fixa e se concentra num objeto.
- Alojamento - 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 do olho esquerdo e direito que dependem da distância de um objeto do ponto de fixação.
- Sombreado, tamanho angular relativo e outras pistas monoculares (olho único).
A convergência e o alojamento são únicos porque as suas pistas extra-retinais relacionadas com a forma como os olhos mudam para perceber objetos a diferentes distâncias. Na visualização natural, a convergência e o alojamento estão ligados. Quando os olhos vêem algo próximo (por exemplo, o nariz), os olhos cruzam-se e acomodam-se a um ponto próximo. Quando os olhos vêem algo no infinito, os olhos tornam-se paralelos e o olho acomoda-se ao infinito.
Os utilizadores que utilizem o HoloLens irão sempre acomodar-se a 2,0 m para manter uma imagem clara, uma vez que os ecrãs do HoloLens estão fixos a uma distância óptica aproximadamente 2,0 m de distância do utilizador. Os programadores de aplicações controlam onde os olhos dos utilizadores convergem ao colocar conteúdos e hologramas em várias profundidades. Quando os utilizadores acomodam e convergem para distâncias diferentes, a ligação natural entre as duas pistas é quebrada, o que pode levar ao desconforto visual ou à fadiga, especialmente quando a magnitude do conflito é grande.
O desconforto do conflito de vergência-alojamento pode ser evitado ou minimizado mantendo o conteúdo convergido o mais próximo possível das 2,0 m (ou seja, numa cena com muito profundidade, as áreas de interesse perto das 2,0 m, sempre que possível). Quando o conteúdo não pode ser colocado perto das 2:0 m, o desconforto do conflito de vergência-alojamento é maior quando o olhar do utilizador para trás e para a frente entre diferentes distâncias. Por outras palavras, é muito mais confortável olhar para um holograma estacionário que fica a 50 cm de distância do que olhar para um holograma a 50 cm de distância que se move para e para longe de si ao longo do tempo.
Colocar conteúdo a 2,0 m também é vantajoso porque os dois ecrãs foram concebidos para se sobreporem totalmente a esta distância. Para imagens colocadas fora deste plano, à medida que se deslocam para fora do lado da moldura holográfica, serão apresentadas de um ecrã enquanto ainda estão visíveis no outro. Esta rivalidade binocular pode ser disruptiva para a percepção de profundidade do holograma.
Distância ideal para colocar hologramas do utilizador
Clip Planes Para obter o máximo conforto, recomendamos que recorte a distância de composição a 85 cm com o desvanecimento do conteúdo a partir de 1 m. Em aplicações onde hologramas e utilizadores são ambos estacionários, os hologramas podem ser vistos confortavelmente perto de 50 cm. Nesses casos, as aplicações devem colocar um plano de recortar não mais de 30 cm e desaparecer devem começar a pelo menos 10 cm de distância do plano de clipes. Sempre que o conteúdo estiver mais próximo de 85 cm, é importante garantir que os utilizadores não se aproximam ou se afastam frequentemente dos hologramas ou que os hologramas não se aproximam ou se afastam mais do utilizador, uma vez que estas situações são mais prováveis de causar desconforto devido ao conflito de vergência-alojamento. O conteúdo deve ser concebido para minimizar a necessidade de interação mais próxima dos 85 cm do utilizador, mas quando o conteúdo tem de ser composto mais de 85 cm, uma boa regra para os programadores é conceber cenários em que os utilizadores e/ou hologramas não se movam em profundidade mais de 25% das vezes.
Melhores práticas Quando os hologramas não podem ser colocados a 2 m e não é possível evitar conflitos entre convergência e alojamento, a zona ideal para colocação de hologramas é entre 1,25 m e 5 m. Em todos os casos, os designers devem estruturar conteúdos para incentivar os utilizadores a interagir a mais de 1 m de distância (por exemplo, ajustar o tamanho do conteúdo e os parâmetros de colocação predefinidos).
Reprojeção
O HoloLens tem uma técnica de estabilização holográfica assistida por hardware sofisticada conhecida como reprojeção. A reprojeção tem em conta o movimento e a alteração do ponto de vista (CameraPose) à medida que a cena anima e o utilizador move a cabeça. As aplicações têm de tomar medidas específicas para utilizar melhor a reprojeção.
Existem quatro tipos principais de reprojeção
- Reprojeção de Profundidade: Produz os melhores resultados com a menor quantidade de esforço da aplicação. Todas as partes da cena composta são estabilizadas de forma independente com base na distância do utilizador. Alguns artefactos de composição podem estar visíveis onde existem alterações acentuadas em profundidade. Esta opção só está disponível em Auscultadores HoloLens 2 e Envolventes.
- Reprojeção do Planar: Permite o controlo preciso da aplicação sobre a estabilização. Um avião é definido pela aplicação e tudo naquele avião será a parte mais estável da cena. Quanto mais longe estiver um holograma do avião, menos estável será. Esta opção está disponível em todas as plataformas mr do Windows.
- Reprojeção De Planar Automática: O sistema define um plano de estabilização com informações na memória intermédia de profundidade. Esta opção está disponível na geração 1 e HoloLens 2 do HoloLens.
- Nenhum: Se a aplicação não fizer nada, a Reprojeção Planar é utilizada com o plano de estabilização fixo a 2 metros na direção do olhar da cabeça do utilizador, normalmente produzindo resultados inferiores ao padrão.
As aplicações têm de tomar medidas específicas para ativar os diferentes tipos de reprojeção
- Reprojeção de Profundidade: A aplicação submete a memória intermédia de profundidade ao sistema para cada frame composto. No Unity, a Reprojeção de Profundidade é feita com a opção Memória Intermédia de Profundidade Partilhada no painel Definições do Windows Mixed Reality em Gestão de Plug-in XR. As aplicações DirectX chamam CommitDirect3D11DepthBuffer. A aplicação não deve chamar SetFocusPoint.
- Reprojeção do Planar: Em cada frame, as aplicações indicam ao sistema a localização de um plano para estabilizar. As aplicações do Unity chamam SetFocusPointForFrame e devem ter a Memória Intermédia de Profundidade Partilhada desativada . As aplicações DirectX chamam SetFocusPoint e não devem chamar CommitDirect3D11DepthBuffer.
- Reprojeção De Planar Automática: Para ativar, a aplicação tem de submeter a memória intermédia de profundidade para o sistema, tal como faria para a Reprojeção de Profundidade. As aplicações que utilizam o Mixed Reality Toolkit (MRTK) podem configurar o fornecedor de definições da câmara para utilizar a Reprojeção Da Planta Automática. As aplicações nativas devem definir o
DepthReprojectionMode
em HolographicCameraRenderingParameters paraAutoPlanar
cada moldura. Para a geração 1 do HoloLens, a aplicação não deve chamar SetFocusPoint.
Escolher a Técnica de Reprojeção
Tipo de Estabilização | Auscultadores Envolventes | Geração 1 do HoloLens | HoloLens 2 |
---|---|---|---|
Proteção de Profundidade | Recomendado | N/D | Recomendado As aplicações do Unity têm de utilizar o Unity 2018.4.12+, o Unity 2019.3 ou o Unity 2020.3+. Caso contrário, utilize a Reprojeção Planar Automática. |
Reprojeção Automática da Planar | N/D | Predefinição recomendada | Recomendado se a Reprojeção de Profundidade não estiver a dar os melhores resultados Recomenda-se que as aplicações do Unity utilizem 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 a Planar Automática não estiver a dar os melhores resultados | Utilizar se nenhuma das opções de profundidade der os resultados pretendidos |
Verificar se a Profundidade está Definida Corretamente
Quando um método de reprojeção utiliza a memória intermédia de profundidade, é importante verificar se os conteúdos da memória intermédia de profundidade representam a cena composta da aplicação. Vários fatores podem causar problemas. Se existir uma segunda câmara utilizada para compor sobreposições da interface de utilizador, por exemplo, é provável que substitua todas as informações de profundidade da vista real. Geralmente, os objetos transparentes não definem a profundidade. Algumas composiçãos de texto não definem a profundidade por predefinição. Haverá falhas visíveis na composição quando a profundidade não corresponder aos hologramas compostos.
HoloLens 2 tem um visualizador para mostrar onde a profundidade está e não está a ser definida, o que pode ser ativado a partir do Portal do Dispositivo. No separadorVistas estabilidadedo> Holograma, selecione a caixa de verificação Visualização da profundidade do ecrã no headset. As áreas que têm a profundidade definida corretamente serão azuis. Os itens compostos que não têm o conjunto de profundidade são marcados a vermelho e têm de ser corrigidos.
Nota
A visualização da profundidade não será apresentada no Mixed Reality Capture. Só é visível através do dispositivo.
Algumas ferramentas de visualização de GPU permitirão a visualização da memória intermédia de profundidade. Os programadores de aplicações podem utilizar estas ferramentas para garantir que a profundidade está a ser definida corretamente. Consulte a documentação das ferramentas da aplicação.
Utilizar a Reprojeção da Planar
Nota
Para auscultadores envolventes para ambiente de trabalho, a definição de um plano de estabilização é geralmente contraproducente, uma vez que oferece menos qualidade visual do que fornecer a memória intermédia de profundidade da sua aplicação ao sistema para permitir uma reprojeção baseada em profundidade por pixel. A menos que esteja em execução num HoloLens, deve geralmente evitar definir o plano de estabilização.
O dispositivo tentará automaticamente escolher este plano, mas a aplicação deve ajudar ao selecionar o ponto de foco na cena. As aplicações do Unity em execução num HoloLens devem escolher o melhor ponto de foco com base na sua cena e passá-lo para SetFocusPoint(). Um exemplo de definição do ponto de foco no DirectX está incluído no modelo de cubo giratório predefinido.
O Unity submeterá a memória intermédia de profundidade para o Windows para ativar a reprojeção por pixel quando executar a sua aplicação num headset envolvente ligado a um PC de ambiente de trabalho, o que proporciona ainda melhor qualidade de imagem sem trabalho explícito por parte da aplicação. Só deve fornecer um Ponto de Foco quando a sua aplicação estiver em execução num 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
);
A colocação do ponto de foco depende em grande parte do que o holograma está a ver. A aplicação tem o vetor de olhar para referência e o estruturador da aplicação sabe que conteúdo pretende que o utilizador observe.
A única coisa mais importante que um programador pode fazer para estabilizar hologramas é compor a 60 FPS. A queda abaixo de 60 FPS reduzirá drasticamente a estabilidade do holograma, seja qual for a otimização do plano de estabilização.
Melhores práticas Não existe uma forma universal de configurar o plano de estabilização e é específico da aplicação. A nossa principal recomendação é experimentar e ver o que funciona melhor para o seu cenário. No entanto, tente alinhar o plano de estabilização com o máximo de conteúdo possível, uma vez que todo o conteúdo neste plano está perfeitamente estabilizado.
Por exemplo:
- Se tiver apenas conteúdo planar (aplicação de leitura, aplicação de reprodução de vídeo), alinhe o plano de estabilização com o plano que tem o seu conteúdo.
- Se existirem três pequenas esferas protegidas pelo mundo, torne o plano de estabilização "cortado" apesar dos centros de todas as esferas que estão atualmente na vista do utilizador.
- Se a sua cena tiver conteúdo em profundidades substancialmente diferentes, favoreça mais objetos.
- Certifique-se de que ajusta o ponto de estabilização a cada frame para coincidir com o holograma que o utilizador está a ver
Coisas a Evitar O plano de estabilização é uma ótima ferramenta para alcançar hologramas estáveis, mas se utilizado indevidamente pode resultar numa grave instabilidade da imagem.
- Não "acione e esqueça". Pode acabar com o plano de estabilização atrás do utilizador ou anexado a um objeto que já não esteja na vista do utilizador. Certifique-se de que o plano de estabilização normal está definido para a frente da câmara oposta (por exemplo, -camera.forward)
- Não altere rapidamente o plano de estabilização entre extremos
- Não deixe o plano de estabilização definido como uma distância/orientação fixa
- Não permita que o plano de estabilização corte o utilizador
- Não defina o ponto de foco ao executar num PC de ambiente de trabalho em vez de num HoloLens e, em vez disso, dependa da reprojeção baseada na profundidade por pixel.
Separação de cores
Devido à natureza das apresentações do HoloLens, um artefacto chamado "separação de cores" pode, por vezes, ser percebido. Manifesta-se como a imagem que se separa em cores base individuais - vermelho, verde e azul. O artefacto pode ser especialmente visível ao apresentar objetos brancos, uma vez que têm grandes quantidades de vermelho, verde e azul. É mais pronunciado quando um utilizador controla visualmente um holograma que se move através da moldura holográfica a alta velocidade. Outra forma de o artefacto se manifestar é deformação/deformação de objetos. Se um objeto tiver cores de alto contraste e/ou puras, como vermelho, verde, azul, separação de cores será visto como distorção de diferentes partes do objeto.
Exemplo do aspeto da separação de cores de um cursor redondo branco bloqueado com a cabeça enquanto um utilizador roda a cabeça para o lado:
Embora seja difícil evitar completamente a separação de cores, existem várias técnicas disponíveis para a mitigar.
A separação de cores pode ser vista em:
- Objetos que se movem rapidamente, incluindo objetos bloqueados na 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 desfaça o olhar do utilizador. Deve aparecer como se tivesse alguma inércia e estivesse colado ao olhar "nas molas". Esta abordagem abranda o cursor (reduzindo a distância de separação) e coloca-o atrás do provável ponto de olhar do utilizador. Desde que rapidamente se ateja quando o utilizador deixa de mudar de olhar, parece natural.
- Se quiser mover um holograma, tente manter a velocidade de movimento abaixo dos 5 graus/segundo se esperar que o utilizador o siga com os olhos.
- Utilize a luz em vez de geometria para o cursor. Uma fonte de iluminação virtual ligada ao olhar será vista como um ponteiro interativo, mas não causará a separação de cores.
- Ajuste o plano de estabilização para corresponder aos hologramas que o utilizador está a observar.
- Tornar o objeto vermelho, verde ou azul.
- Mudar 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.
Tal como anteriormente, compor a 60 FPS e definir o plano de estabilização são as técnicas mais importantes para a estabilidade do holograma. Se estiver perante uma separação de cores percetível, primeiro certifique-se de que a taxa de fotogramas corresponde às expetativas.