Estabilidade do hologramaHologram stability

Visão geralOverview

Para atingir hologramas estáveis, o HoloLens tem um pipeline de estabilização de imagem interno.To achieve stable holograms, HoloLens has a built-in image stabilization pipeline. O pipeline de estabilização funciona automaticamente em segundo plano, portanto, você não precisa executar nenhuma etapa adicional para habilitá-lo.The stabilization pipeline works automatically in the background, so you don't need to take any extra steps to enable it. No entanto, você deve exercitar as técnicas que melhoram a estabilidade do holograma e evitar cenários que reduzam a estabilidade.However, you should exercise techniques that improve hologram stability and avoid scenarios that reduce stability.

Terminologia de qualidade do hologramaHologram quality terminology

A qualidade dos hologramas é um resultado de um bom ambiente e um bom desenvolvimento de aplicativos.The quality of holograms is a result of good environment and good app development. Aplicativos em execução em uma constante 60 de quadros por segundo em um ambiente em que o HoloLens pode rastrear os arredores garante que o holograma e o sistema de coordenadas correspondentes estejam em sincronia. Da perspectiva de um usuário, os hologramas que devem ser transportáveis não se moverão em relação ao ambiente.Apps running at a constant 60 frames-per-second in an environment where HoloLens can track the surroundings ensures the hologram and the matching coordinate system are in sync. From a user's perspective, holograms that are meant to be stationary won't move relative to the environment.

A terminologia a seguir pode ajudá-lo quando você estiver identificando problemas com o ambiente, tarifas de renderização baixa ou inconsistentes ou qualquer outra coisa.The following terminology can help you when you're identifying problems with the environment, inconsistent or low rendering rates, or anything else.

  • Correta.Accuracy. Depois que o holograma é bloqueado mundialmente e colocado no mundo real, ele deve permanecer onde é colocado em relação ao ambiente ao redor e independente do movimento do usuário ou de alterações de ambiente pequenas e esparsas.Once the hologram is world-locked and placed in the real world, it should stay where it's placed relative to the surrounding environment and independent of user motion or small and sparse environment changes. Se um holograma mais tarde aparecer em um local inesperado, será um problema de precisão .If a hologram later appears in an unexpected location, it's an accuracy problem. Esses cenários podem ocorrer se duas salas distintas parecem idênticas.Such scenarios can happen if two distinct rooms look identical.
  • Tremulação.Jitter. Os usuários observam a tremulação de alta frequência de um holograma, o que pode acontecer quando o controle do ambiente degrada.Users observe jitter as high frequency shaking of a hologram, which can happen when tracking of the environment degrades. Para os usuários, a solução está executando o ajuste de sensor.For users, the solution is running sensor tuning.
  • Judder.Judder. Baixas frequências de renderização resultam em animações desiguais e imagens duplas de hologramas.Low rendering frequencies result in uneven motion and double images of holograms. O judder é especialmente perceptível em hologramas com movimento.Judder is especially noticeable in holograms with motion. Os desenvolvedores precisam manter uma constante 60 fps.Developers need to maintain a constant 60 FPS.
  • Continente.Drift. Os usuários veem a descompasso, uma vez que um holograma parece deixar de onde ele foi colocado originalmente.Users see drift as a hologram appears to move away from where it was originally placed. A descompasso acontece quando os hologramas são colocados longe das âncoras espaciais, particularmente em partes do ambiente que não estão totalmente mapeadas.Drift happens when holograms are placed far away from spatial anchors, particularly in parts of the environment that aren't fully mapped. A criação de hologramas perto de âncoras espaciais reduz a probabilidade de descompasso.Creating holograms close to spatial anchors lowers the likelihood of drift.
  • Jumpize.Jumpiness. Quando um holograma "aparece" ou "salta" para fora de seu local ocasionalmente.When a hologram "pops" or "jumps" away from its location occasionally. A jumpização pode ocorrer conforme o controle ajusta os hologramas para que correspondam à compreensão atualizada do seu ambiente.Jumpiness can occur as tracking adjusts holograms to match updated understanding of your environment.
  • Nadam.Swim. Quando um holograma aparenta ser o Sway correspondente ao movimento do cabeçalho do usuário.When a hologram appears to sway corresponding to the motion of the user's head. Nada acontece quando o aplicativo não implementou totalmente a Reprojeçãoe, se o HoloLens não for calibrado para o usuário atual.Swim occurs when the application hasn't fully implemented reprojection, and if the HoloLens isn't calibrated for the current user. O usuário pode executar novamente o aplicativo de calibragem para corrigir o problema.The user can rerun the calibration application to fix the issue. Os desenvolvedores podem atualizar o plano de estabilização para melhorar ainda mais a estabilidade.Developers can update the stabilization plane to further enhance stability.
  • Separação de cores.Color separation. Os monitores no HoloLens são exibições sequenciais de cores, que canais de cores flash de vermelho-verde-azul-verde a 60 Hz (campos de cor individuais são mostrados às 240 Hz).The displays in HoloLens are color sequential displays, which flash color channels of red-green-blue-green at 60 Hz (individual color fields are shown at 240 Hz). Sempre que um usuário rastreia um holograma de movimento com seus olhos, as bordas à esquerda e à direita do holograma são separadas em suas cores constituintes, produzindo um efeito arco-íris.Whenever a user tracks a moving hologram with their eyes, that hologram's leading and trailing edges separate in their constituent colors, producing a rainbow effect. O grau de separação depende da velocidade do holograma.The degree of separation is dependent upon the speed of the hologram. Em alguns casos raros, mover os cabeçotes rapidamente enquanto examina um holograma estacionário também pode resultar em um efeito de arco-íris, que é chamado de separação de cores.In some rarer cases, moving ones head rapidly while looking at a stationary hologram can also result in a rainbow effect, which is called color separation.

Taxa de quadrosFrame rate

A taxa de quadros é o primeiro pilar da estabilidade do holograma.Frame rate is the first pillar of hologram stability. Para que os hologramas pareçam estáveis no mundo, cada imagem apresentada ao usuário deve ter os hologramas desenhados no local correto.For holograms to appear stable in the world, each image presented to the user must have the holograms drawn in the correct spot. O exibe na atualização do HoloLens 240 vezes por segundo, mostrando quatro campos coloridos separados para cada imagem recém processada, resultando em uma experiência do usuário de 60 FPS (quadros por segundo).The displays on HoloLens refresh 240 times a second, showing four separate color fields for each newly rendered image, resulting in a user experience of 60 FPS (frames per second). Para fornecer a melhor experiência possível, os desenvolvedores de aplicativos devem manter 60 FPS, o que traduz para fornecer consistentemente uma nova imagem ao sistema operacional a cada 16 milissegundos.To provide the best experience possible, application developers must maintain 60 FPS, which translates to consistently providing a new image to the operating system every 16 milliseconds.

60 fps Para desenhar hologramas para que pareçam estar sentado no mundo real, o HoloLens precisa renderizar imagens da posição do usuário.60 FPS To draw holograms to look like they're sitting in the real world, HoloLens needs to render images from the user's position. Como a renderização de imagem leva tempo, o HoloLens prevê onde o cabeçalho de um usuário será quando as imagens forem mostradas nas exibições.Since image rendering takes time, HoloLens predicts where a user's head will be when the images are shown in the displays. No entanto, esse algoritmo de previsão é uma aproximação.However, this prediction algorithm is an approximation. O HoloLens tem um hardware que ajusta a imagem renderizada para considerar a discrepância entre a posição da cabeça prevista e a posição real da cabeça.HoloLens has hardware that adjusts the rendered image to account for the discrepancy between the predicted head position and the actual head position. O ajuste faz a imagem que o usuário vê aparece como se fosse renderizado do local correto e os hologramas sentem-se estáveis.The adjustment makes the image the user sees appear as if it's rendered from the correct location, and holograms feel stable. As atualizações de imagem funcionam melhor com pequenas alterações e não podem corrigir completamente certas coisas na imagem renderizada, como Motion-da Parallax.The image updates work best with small changes, and it can't completely fix certain things in the rendered image like motion-parallax.

Ao renderizar em 60 FPS, você está fazendo três coisas para ajudar a tornar os hologramas estáveis:By rendering at 60 FPS, you're doing three things to help make stable holograms:

  1. Minimizar a latência geral entre a renderização de uma imagem e a imagem que está sendo vista pelo usuário.Minimizing the overall latency between rendering an image and that image being seen by the user. Em um mecanismo com um jogo e um thread de renderização em execução no atrelada, a execução em 30FPS pode adicionar 33,3 ms de latência extra.In an engine with a game and a render thread running in lockstep, running at 30FPS can add 33.3 ms of extra latency. A redução da latência diminui o erro de previsão e aumenta a estabilidade do holograma.Reducing latency decreases prediction error and increases hologram stability.
  2. Fazendo isso, todas as imagens que atingem os olhos do usuário têm uma quantidade consistente de latência.Making it so every image reaching the user's eyes have a consistent amount of latency. Se você renderizar a 30 fps, a exibição ainda exibirá imagens em 60 FPS, o que significa que a mesma imagem será exibida duas vezes em uma linha.If you render at 30 fps, the display still displays images at 60 FPS, meaning the same image will be displayed twice in a row. 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.The second frame will have 16.6-ms more latency than the first frame and will have to correct a more pronounced amount of error. Essa inconsistência na magnitude do erro pode causar judder de 60 Hz indesejadas.This inconsistency in error magnitude can cause unwanted 60 Hz judder.
  3. Reduzir a aparência de trepidação, que é caracterizada pelo movimento irregular e por imagens duplas.Reducing the appearance of judder, which is characterized by uneven motion and double images. Um movimento mais rápido do holograma e taxas de renderização mais baixas estão associados a uma trepidação mais acentuada.Faster hologram motion and lower render rates are associated with more pronounced judder. Empenhar-se em manter 60 FPS em todos os momentos ajudará a evitar judder para um determinado holograma de movimentação.Striving to maintain 60 FPS at all times will help avoid judder for a given moving hologram.

Consistência de taxa de quadros A consistência da taxa de quadros é tão importante quanto uma alta de quadros por segundo.Frame-rate consistency Frame rate consistency is as important as a high frames-per-second. Ocasionalmente, os 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.Occasionally dropped frames are inevitable for any content-rich application, and the HoloLens implements some sophisticated algorithms to recover from occasional glitches. No entanto, uma taxa de quadros com flutuação constante é muito mais perceptível para um usuário do que executar consistentemente em taxas de quadros inferiores.However, a constantly fluctuating framerate is a lot more noticeable to a user than running consistently at lower frame rates. Por exemplo, um aplicativo que é processado sem problemas para cinco quadros (60 FPS durante esses cinco quadros) e, em seguida, descarta todos os outros quadros para os 10 quadros seguintes (30 FPS para a duração desses 10 quadros) aparecerão mais instável do que um aplicativo que é processado consistentemente em 30 FPS.For example, an application that renders smoothly for five frames (60 FPS for the duration of these five frames) and then drops every other frame for the next 10 frames (30 FPS for the duration of these 10 frames) will appear more unstable than an application that consistently renders at 30 FPS.

Em uma observação relacionada, o sistema operacional limita os aplicativos a 30 FPS quando a captura de realidade misturada está em execução.On a related note, the operating system throttles down applications to 30 FPS when mixed reality capture is running.

Análise de desempenho Há diferentes tipos de ferramentas que podem ser usadas para avaliar o benchmark da taxa de quadros do aplicativo, como:Performance analysis There are different kinds of tools that can be used to benchmark your application frame rate, such as:

  • GPUViewGPUView
  • Depurador de Gráficos do Visual StudioVisual Studio Graphics Debugger
  • Criadores de criação de perfil em mecanismos 3D, como o UnityProfilers built into 3D engines such as Unity

Distâncias de renderização de hologramaHologram render distances

O sistema visual humano integra vários sinais dependentes de distância quando fixates e se concentra em um objeto.The human visual system integrates multiple distance-dependent signals when it fixates and focuses on an object.

  • Acomodação -o foco de um olho individual.Accommodation - The focus of an individual eye.
  • Convergência -dois olhos se movendo para dentro ou para fora para o centro em um objeto.Convergence - Two eyes moving inward or outward to center on an object.
  • Visão de binóculo – diparidades entre as imagens de olho esquerdo e direito que dependem da distância de um objeto do seu ponto de fixação da.Binocular vision - Disparities between the left- and right-eye images that are dependent on an object's distance away from your fixation point.
  • Sombreamento, tamanho angular relativo e outros indícios de monocular (olho único).Shading, relative angular size, and other monocular (single eye) cues.

A convergência e a acomodação são exclusivas porque suas indicações retinas adicionais relacionadas a como os olhos mudam para perceber os objetos em diferentes distâncias.Convergence and accommodation are unique because their extra-retinal cues related to how the eyes change to perceive objects at different distances. Na visualização natural, a convergência e a acomodação são vinculadas.In natural viewing, convergence and accommodation are linked. Quando os olhos exibem algo próximo (por exemplo, seu nariz), os olhos cruzam e acomodam a um ponto próximo.When the eyes view something near (for example, your nose), the eyes cross and accommodate to a near point. Quando os olhos visualizam algo no infinito, os olhos se tornam paralelos e os olhos se acomodam ao infinito.When the eyes view something at infinity, the eyes become parallel and the eye accommodates to infinity.

Os usuários com o HoloLens serão sempre acomodados a 2,0 m para manter uma imagem clara porque as exibições do HoloLens são fixas em uma distância óptica de aproximadamente 2,0 m para longe do usuário.Users wearing HoloLens will always accommodate to 2.0 m to maintain a clear image because the HoloLens displays are fixed at an optical distance approximately 2.0 m away from the user. Os desenvolvedores de aplicativos controlam onde os olhos dos usuários convergem colocando o conteúdo e os hologramas em várias profundidades.App developers control where users' eyes converge by placing content and holograms at various depths. Quando os usuários acomodam e convergem para distâncias diferentes, o link natural entre as duas indicações é quebrado, o que pode levar ao Visual discomfort ou fadiga, especialmente quando a magnitude do conflito é grande.When users accommodate and converge to different distances, the natural link between the two cues is broken, which can lead to visual discomfort or fatigue, especially when the magnitude of the conflict is large.

Discomfort do conflito Vergence pode ser evitado ou minimizado mantendo o conteúdo convergido o mais próximo de 2,0 m possível (ou seja, em uma cena com muito profundidade, coloque as áreas de interesse perto de 2,0 m, quando possível).Discomfort from the vergence-accommodation conflict can be avoided or minimized by keeping converged content as close to 2.0 m as possible (that is, in a scene with lots of depth place the areas of interest near 2.0 m, when possible). Quando o conteúdo não pode ser colocado perto de 2,0 m, o discomfort do conflito de Vergence é maior quando o olhar do usuário é alternado entre distâncias diferentes.When content can't be placed near 2.0 m, discomfort from the vergence-accommodation conflict is greatest when user’s gaze back and forth between different distances. Em outras palavras, é muito mais confortável examinar um holograma estacionário que permaneça 50 cm fora do que examinar um holograma 50 cm que se move para fora e para longe de você ao longo do tempo.In other words, it's much more comfortable to look at a stationary hologram that stays 50 cm away than to look at a hologram 50 cm away that moves toward and away from you over time.

Colocar o conteúdo em 2,0 m também é vantajoso, pois as duas telas são projetadas para se sobrepor totalmente nessa distância.Placing content at 2.0 m is also advantageous because the two displays are designed to fully overlap at this distance. Para imagens colocadas fora desse plano, à medida que eles se movem para fora do quadro Holographic, eles aparecerão de uma exibição, enquanto continuam sendo visíveis no outro.For images placed off this plane, as they move off the side of the holographic frame they'll appear from one display while still being visible on the other. Este rival de binóculo pode causar interrupções na percepção de profundidade do holorgam.This binocular rivalry can be disruptive to the depth perception of the holorgam.

Distância ideal para colocação dos hologramas partindo do usuárioOptimal distance for placing holograms from the user

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

Planos de clipes Para maior conforto, é recomendável recortar a distância de renderização em 85 cm com fade out do conteúdo começando em 1 m.Clip Planes For maximum comfort, we recommend clipping render distance at 85 cm with fade out of content starting at 1 m. Em aplicativos em que os hologramas e os usuários são estáticos, os hologramas podem ser vistos confortavelmente como se aproximando 50 cm. Nesses casos, os aplicativos devem posicionar um plano de clipes que não sejam mais de 30 cm e desaparecer devem iniciar pelo menos 10 cm fora do plano.In applications where holograms and users are both stationary, holograms can be viewed comfortably as near as 50 cm. In those cases, applications should place a clip plane no closer than 30 cm and fade out should start at least 10 cm away from the clip plane. Sempre que o conteúdo estiver mais próximo do que 85 cm, é importante garantir que os usuários não se aproximem mais de perto ou longe de hologramas ou que os hologramas não se movam com frequência mais perto ou longe do usuário, pois essas situações têm mais probabilidade de causar discomfort do conflito de Vergence.Whenever content is closer than 85 cm, it's important to ensure that users don't frequently move closer or farther from holograms or that holograms don't frequently move closer to or farther from the user as these situations are most likely to cause discomfort from the vergence-accommodation conflict. O conteúdo deve ser criado para minimizar a necessidade de interação com mais de 85 cm do usuário, mas quando o conteúdo deve ser processado mais de 85 cm, uma boa regra prática para os desenvolvedores é criar cenários em que os usuários e/ou os hologramas não se movam em profundidade mais de 25% do tempo.Content should be designed to minimize the need for interaction closer than 85 cm from the user, but when content must be rendered closer than 85 cm, a good rule of thumb for developers is to design scenarios where users and/or holograms don't move in depth more than 25% of the time.

Práticas recomendadas Quando os hologramas não podem ser colocados em 2 m e os conflitos entre a convergência e a acomodação não podem ser evitados, a zona ideal para o posicionamento do holograma é entre 1,25 m e 5 m.Best practices When holograms can't be placed at 2 m and conflicts between convergence and accommodation can't be avoided, the optimal zone for hologram placement is between 1.25 m and 5 m. Em todos os casos, os designers devem estruturar o conteúdo para incentivar os usuários a interagir de 1 + m fora (por exemplo, ajustar o tamanho do conteúdo e os parâmetros de posicionamento padrão).In every case, designers should structure content to encourage users to interact 1+ m away (for example, adjust content size and default placement parameters).

ReprojeçãoReprojection

O HoloLens executa uma técnica de estabilização de Holographic assistida por hardware sofisticada conhecida como Reprojeção.HoloLens performs a sophisticated hardware-assisted holographic stabilization technique known as reprojection. 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.Reprojection takes into account motion and change of the point of view (CameraPose) as the scene animates and the user moves their head. Os aplicativos precisam tomar ações específicas para melhor utilização da Reprojeção.Applications need to take specific actions to best use reprojection.

Há quatro tipos principais de ReprojeçãoThere are four main types of reprojection

  • Reprojeção de profundidade: Produz os melhores resultados com a menor quantidade de esforço do aplicativo.Depth Reprojection: Produces the best results with the least amount of effort from the application. Todas as partes da cena renderizada são estabilizadas independentemente com base em sua distância do usuário.All parts of the rendered scene are independently stabilized based on their distance from the user. Alguns artefatos de renderização podem estar visíveis onde há alterações nítidas em profundidade.Some rendering artifacts may be visible where there are sharp changes in depth. Essa opção só está disponível em headsets 2 e de imersão.This option is only available on HoloLens 2 and Immersive Headsets.
  • Reprojeção do planar: Permite o controle preciso do aplicativo sobre estabilização.Planar Reprojection: Allows the application precise control over stabilization. Um plano é definido pelo aplicativo e tudo nesse plano será a parte mais estável da cena.A plane is set by the application and everything on that plane will be the most stable part of the scene. Quanto mais um holograma estiver longe do plano, menos estável será.The further a hologram is away from the plane, the less stable it will be. Essa opção está disponível em todas as plataformas do Windows MR.This option is available on all Windows MR platforms.
  • Reprojeção automática de planar: O sistema define um plano de estabilização usando informações no buffer de profundidade.Automatic Planar Reprojection: The system sets a stabilization plane using information in the depth buffer. Essa opção está disponível no HoloLens geração 1 e no HoloLens 2.This option is available on HoloLens generation 1 and HoloLens 2.
  • Nenhum: Se o aplicativo não faz nada, a Reprojeção do planar é usada com o plano de estabilização fixo em 2 metros na direção do olhar da cabeça do usuário, normalmente produzindo resultados de subpadrão.None: If the application does nothing, Planar Reprojection is used with the stabilization plane fixed at 2 meters in the direction of the user's head gaze, usually producing substandard results.

Os aplicativos precisam executar ações específicas para habilitar os diferentes tipos de ReprojeçãoApplications need to take specific actions to enable the different types of reprojection

  • Reprojeção de profundidade: O aplicativo envia seu buffer de profundidade ao sistema para cada quadro renderizado.Depth Reprojection: The application submits their depth buffer to the system for every rendered frame. No Unity, a Reprojeção de profundidade é feita com a opção de buffer de profundidade compartilhada no painel de configurações de realidade mista do Windows em XR plugin Management.On Unity, Depth Reprojection is done with the Shared Depth Buffer option in the Windows Mixed Reality Settings pane under XR Plugin Management. Aplicativos DirectX chamam CommitDirect3D11DepthBuffer.DirectX apps call CommitDirect3D11DepthBuffer. O aplicativo não deve chamar SetFocusPoint.The application shouldn't call SetFocusPoint.
  • Reprojeção do planar: Em todos os quadros, os aplicativos informam ao sistema o local de um plano a ser estabilizado.Planar Reprojection: On every frame, applications tell the system the location of a plane to stabilize. Os aplicativos do Unity chamam SetFocusPointForFrame e devem ter o buffer de profundidade compartilhado desabilitado.Unity applications call SetFocusPointForFrame and should have Shared Depth Buffer disabled. Os aplicativos DirectX chamam SetFocusPoint e não devem chamar CommitDirect3D11DepthBuffer.DirectX apps call SetFocusPoint and shouldn't call CommitDirect3D11DepthBuffer.
  • Reprojeção automática de planar: Para habilitar o, o aplicativo precisa enviar seu buffer de profundidade ao sistema como faria para a Reprojeção de profundidade.Automatic Planar Reprojection: To enable, the application needs to submit their depth buffer to the system as they would for Depth Reprojection. No HoloLens 2, o aplicativo precisa SetFocusPoint com um ponto de 0, 0 para cada quadro.On HoloLens 2, the application then needs to SetFocusPoint with a point of 0,0 for every frame. Para o HoloLens geração 1, o aplicativo não deve chamar SetFocusPoint.For HoloLens generation 1, the application shouldn't call SetFocusPoint.

Escolhendo a técnica de ReprojeçãoChoosing Reprojection Technique

Tipo de estabilizaçãoStabilization Type Headsets de imersãoImmersive Headsets Geração de HoloLens 1HoloLens generation 1 HoloLens 2HoloLens 2
Reprojeção de profundidadeDepth Reprojection RecomendadasRecommended N/DN/A RecomendadasRecommended

Os aplicativos do Unity devem usar o Unity 2018.4.12 ou posterior ou o Unity 2019,3 ou posterior.Unity applications must use Unity 2018.4.12 or later or Unity 2019.3 or later. Caso contrário, use a Reprojeção automática de planar.Otherwise use Automatic Planar Reprojection.
Reprojeção automática de planarAutomatic Planar Reprojection N/DN/A Padrão recomendadoRecommended default Recomendado se a Reprojeção de profundidade não fornecer os melhores resultadosRecommended if Depth Reprojection isn't giving the best results

Os aplicativos do Unity são recomendados para usar o Unity 2018.4.12 ou posterior ou o Unity 2019,3 ou posterior.Unity applications are recommended to use Unity 2018.4.12 or later or Unity 2019.3 or later. As versões anteriores do Unity funcionarão com resultados de Reprojeção ligeiramente degradados.Previous Unity versions will work with slightly degraded reprojection results.
Reprojeção do planarPlanar Reprojection Não recomendadoNot Recommended Recomendado se o planar automático não fornecer os melhores resultadosRecommended if Automatic Planar isn't giving the best results Use se nenhuma das opções de profundidade fornecer os resultados desejadosUse if neither of the depth options give desired results

A verificação de profundidade está definida corretamenteVerifying Depth is Set Correctly

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.When a reprojection method uses the depth buffer, it's important to verify the contents of the depth buffer represent the application's rendered scene. Vários fatores podem causar problemas.A number of factors can cause problems. Se houver uma segunda câmera usada para renderizar sobreposições de interface do usuário, por exemplo, é provável que seja possível substituir todas as informações de profundidade da exibição real.If there's a second camera used to render user interface overlays, for example, it's likely to overwrite all the depth information from the actual view. Objetos transparentes geralmente não definem profundidade.Transparent objects often don't set depth. Uma renderização de texto não definirá profundidade por padrão.Some text rendering won't set depth by default. Haverá problemas visíveis na renderização quando a profundidade não corresponder aos hologramas renderizados.There will be visible glitches in the rendering when depth does not match the rendered holograms.

O HoloLens 2 tem um visualizador para mostrar onde a profundidade está e não está sendo definida, que pode ser habilitada no portal do dispositivo.HoloLens 2 has a visualizer to show where depth is and isn't being set, which can be enabled from Device Portal. Na guia estabilidade do holograma das exibições > Hologram Stability , marque a caixa de seleção Exibir visualização de profundidade no headset .On the Views > Hologram Stability tab, select the Display depth visualization in headset checkbox. As áreas que têm profundidade definida corretamente serão azuis.Areas that have depth set properly will be blue. Itens renderizados que não têm profundidade definida são marcados em vermelho e precisam ser corrigidos.Rendered items that don't have depth set are marked in red and need to be fixed.

Observação

A visualização da profundidade não aparecerá na captura de realidade misturada.The visualization of the depth will not show up in Mixed Reality Capture. Ele só é visível por meio do dispositivo.It is only visible through the device.

Algumas ferramentas de exibição de GPU permitirão a visualização do buffer de profundidade.Some GPU viewing tools will allow visualization of the depth buffer. Os desenvolvedores de aplicativos podem usar essas ferramentas para garantir que a profundidade esteja sendo definida corretamente.Application developers can use these tools to make sure depth is being set properly. Consulte a documentação para obter as ferramentas do aplicativo.Consult the documentation for the application's tools.

Usando a Reprojeção do planarUsing Planar Reprojection

Observação

Para headsets de imersão de área de trabalho, a definição de um plano de estabilização geralmente é produtiva, 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.For desktop immersive headsets, setting a stabilization plane is usually counter-productive, as it offers less visual quality than providing your app's depth buffer to the system to enable per-pixel depth-based reprojection. A menos que seja executado em um HoloLens, geralmente você deve evitar definir o plano de estabilização.Unless running on a HoloLens, you should generally avoid setting the stabilization plane.

Plano de estabilização para objetos 3D

O dispositivo tentará escolher este plano automaticamente, mas o aplicativo deve ajudar selecionando o ponto de foco na cena.The device will automatically attempt to choose this plane, but the application should assist by selecting the focus point in the scene. 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 ().Unity apps running on a HoloLens should choose the best focus point based on your scene and pass it into SetFocusPoint(). Um exemplo de configuração do ponto de foco no DirectX está incluído no modelo de cubo padrão de rotação.An example of setting the focus point in DirectX is included in the default spinning cube template.

O Unity enviará seu buffer de profundidade ao Windows para habilitar a Reprojeção por pixel quando você executar seu aplicativo em um headset de imersão conectado a um PC desktop, que fornece uma qualidade de imagem ainda melhor sem trabalho explícito pelo aplicativo.Unity will submit your depth buffer to Windows to enable per-pixel reprojection when you run your app on an immersive headset connected to a desktop PC, which provides even better image quality without explicit work by the app. 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.You should only provide a Focus Point when your app is running on a HoloLens, or the per-pixel reprojection will be overridden.

// 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 em grande parte depende do que o holograma está olhando.Placement of the focus point largely depends on what the hologram is looking at. O aplicativo tem o vetor olhar para referência e o designer de aplicativo sabe qual conteúdo ele deseja que o usuário observe.The app has the gaze vector for reference and the app designer knows what content they want the user to observe.

A única coisa mais importante que um desenvolvedor pode fazer para estabilizar os hologramas é renderizar em 60 FPS.The single most important thing a developer can do to stabilize holograms is to render at 60 FPS. Soltar abaixo de 60 FPS reduzirá drasticamente a estabilidade do holograma, seja qual for a otimização do plano de estabilização.Dropping below 60 FPS will dramatically reduce hologram stability, whatever the stabilization plane optimization.

Práticas recomendadas Não há uma maneira universal de configurar o plano de estabilização e ele é específico do aplicativo.Best practices There's no universal way to set up the stabilization plane and it's app-specific. Nossa principal recomendação é experimentar e ver o que funciona melhor para seu cenário.Our main recommendation is to experiment and see what works best for your scenario. No entanto, tente alinhar o plano de estabilização com o máximo de conteúdo possível, pois todo o conteúdo desse plano é perfeitamente estabilizado.However, try to align the stabilization plane with as much content as possible because all the content on this plane is perfectly stabilized.

Por exemplo:For example:

  • Se você tiver apenas conteúdo planar (leitura de aplicativo, aplicativo de reprodução de vídeo), alinhe o plano de estabilização com o plano que tem seu conteúdo.If you have only planar content (reading app, video playback app), align the stabilization plane with the plane that has your content.
  • Se houver três pequenas que estão bloqueadas pelo mundo, torne o plano de estabilização "recortar", embora os centros de todas as suas interações que estão atualmente na exibição do usuário.If there are three small spheres that are world-locked, make the stabilization plane "cut" though the centers of all the spheres that are currently in the user's view.
  • Se sua cena tiver conteúdo em profundidades consideravelmente diferentes, favoreça mais objetos.If your scene has content at substantially different depths, favor further objects.
  • Certifique-se de ajustar o ponto de estabilização a cada quadro para coincidir com o holograma que o usuário está olhandoMake sure to adjust the stabilization point every frame to coincide with the hologram the user is looking at

Itens a serem evitados O plano de estabilização é uma excelente ferramenta para atingir hologramas estáveis, mas se for usado incorretamente, isso poderá resultar em instabilidade de imagem grave.Things to Avoid The stabilization plane is a great tool to achieve stable holograms, but if misused it can result in severe image instability.

  • Não "dispare e esqueça".Don't "fire and forget". Você pode terminar com o plano de estabilização por trás do usuário ou anexado a um objeto que não está mais no modo de exibição do usuário.You can end up with the stabilization plane behind the user or attached to an object that is no longer in the user's view. Verifique se o plano de estabilização normal está definido para frente de câmera oposta (por exemplo,-Camera. Forward)Ensure the stabilization plane normal is set opposite camera-forward (for example, -camera.forward)
  • Não altere rapidamente o plano de estabilização entre extrema e frenteDon't rapidly change the stabilization plane back and forth between extremes
  • Não deixe o plano de estabilização definido para uma distância/orientação fixaDon't leave the stabilization plane set to a fixed distance/orientation
  • Não deixe o plano de estabilização ser cortado pelo usuárioDon't let the stabilization plane cut through the user
  • 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.Don't set the focus point when running on a desktop PC rather than a HoloLens, and instead rely on per-pixel depth-based reprojection.

Separação de coresColor separation

Devido à natureza de exibições do HoloLens, um artefato chamado "separação de cores" pode, às vezes, ser percebido.Due to the nature of HoloLens displays, an artifact called "color-separation" can sometimes be perceived. Ele se manifesta como a imagem que separa em cores de base individuais – vermelho, verde e azul.It manifests as the image separating into individual base colors - red, green, and blue. O artefato pode ser especialmente visível ao exibir objetos brancos, pois eles têm grandes quantidades de vermelho, verde e azul.The artifact can be especially visible when displaying white objects, since they have large amounts of red, green, and blue. É mais pronunciado quando um usuário rastreia visualmente um holograma que está se movendo pelo quadro Holographic em alta velocidade.It's most pronounced when a user visually tracks a hologram that is moving across the holographic frame at high speed. Outra maneira de o artefato ser manifestar é a distorção/desformação de objetos.Another way the artifact can manifest is warping/deformation of objects. Se um objeto tiver cores de alto contraste e/ou puras, como vermelho, verde, azul, a separação de cores será percebida como deformação de partes diferentes do objeto.If an object has high contrast and/or pure colors such as red, green, blue, color-separation will be perceived as warping of different parts of the object.

Um exemplo de qual é a separação de cores de um cursor redondo branco de cabeçalho e arredondado como um usuário gira sua 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:

Um exemplo de qual é a separação de cores de um cursor redondo branco de cabeçalho de cabeça como um usuário gira sua 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á-las.Though it's difficult to completely avoid color separation, there are several techniques available to mitigate it.

A separação de cores pode ser vista em:Color-separation can be seen on:

  • Objetos que estão se movendo rapidamente, incluindo objetos bloqueados por cabeçalho, como o cursor.Objects that are moving quickly, including head-locked objects such as the cursor.
  • Objetos que estão significativamente longe do plano de estabilização.Objects that are substantially far from the stabilization plane.

Para atenuar os efeitos da separação de cores:To attenuate the effects of color-separation:

  • Faça o objeto atrasar o olhar do usuário.Make the object lag the user's gaze. Ele deve aparecer como se tiver algum inércia e estiver anexado ao olhar "em molas".It should appear as if it has some inertia and is attached to the gaze "on springs". Essa abordagem reduz o cursor (reduzindo a distância de separação) e a coloca atrás do ponto de olhar provável do usuário.This approach slows the cursor (reducing separation distance) and puts it behind the user's likely gaze point. Desde que ele se ajuste rapidamente quando o usuário parar de mudar seu olhar, ele se sentirá natural.So long as it quickly catches up when the user stops shifting their gaze it feels natural.
  • Se você quiser mover um holograma, tente manter sua velocidade de movimentação abaixo de 5 graus/segundo se você espera que o usuário o acompanhe com seus olhos.If you do want to move a hologram, try to keep its movement speed below 5 degrees/second if you expect the user to follow it with their eyes.
  • Use Light em vez de Geometry para o cursor.Use light instead of geometry for the cursor. Uma fonte de iluminação virtual anexada ao olhar será percebida como um ponteiro interativo, mas não causará a separação de cores.A source of virtual illumination attached to the gaze will be perceived as an interactive pointer but won't cause color-separation.
  • Ajuste o plano de estabilização para corresponder aos hologramas em que o usuário está nuvens.Adjust the stabilization plane to match the holograms the user is gazing at.
  • Tornar o objeto vermelho, verde ou azul.Make the object red, green, or blue.
  • Mudar para uma versão desfocada do conteúdo.Switch to a blurred version of the content. Por exemplo, um cursor branco redondo pode ser alterado para uma linha levemente desfocada na direção do movimento.For example, a round white cursor could be changed to a slightly blurred line oriented in the direction of motion.

Como antes, a renderização em 60 FPS e a definição do plano de estabilização são as técnicas mais importantes para a estabilidade do holograma.As before, rendering at 60 FPS and setting the stabilization plane are the most important techniques for hologram stability. Se for voltada para separação de cores perceptível, primeiro verifique se a taxa de quadros atende às expectativas.If facing noticeable color separation, first make sure the frame rate meets expectations.

Confira tambémSee also