Estudo de caso-usando o plano de estabilização para reduzir Holographic turbulênciaCase study - Using the stabilization plane to reduce holographic turbulence

Trabalhar com hologramas pode ser complicado.Working with holograms can be tricky. O fato de que você pode se movimentar em seu espaço e ver seus hologramas de todos os ângulos diferentes fornece um nível de imersão que você não pode obter com uma tela de computador normal.The fact that you can move around your space and see your holograms from all different angles provides a level of immersion that you can’t get with a normal computer screen. Manter esses hologramas em vigor e parecer realista é um feito pelo hardware do Microsoft HoloLens e pelo design inteligente de aplicativos Holographic.Keeping these holograms in place and looking realistic is a technical feat accomplished by both the Microsoft HoloLens hardware and the intelligent design of holographic apps.

O TechThe tech

Para fazer com que os hologramas pareçam estar realmente compartilhando o espaço com você, eles devem ser renderizados corretamente, sem a separação de cores.To make holograms appear as though they're actually sharing the space with you, they should render properly, without color separation. Isso é obtido, em parte, por tecnologia interna ao hardware do HoloLens, que mantém os hologramas ancorados no que chamamos de um plano de estabilização.This is achieved, in part, by technology built-in to the HoloLens hardware which keeps holograms anchored on what we call a stabilization plane.

Um plano é definido por um ponto e um normal, mas como sempre queremos que o plano fique à câmera, estamos realmente preocupados com a definição do ponto do plano.A plane is defined by a point and a normal, but since we always want the plane to face the camera, we're really just concerned with setting the plane's point. Podemos informar ao HoloLens que aponta para concentrar seu processamento para manter tudo ancorado e estável, mas como definir esse ponto de foco é específico do aplicativo e pode fazer ou interromper seu aplicativo dependendo do conteúdo.We can tell HoloLens which point to focus its processing on to keep everything anchored and stable, but how to set this focus point is app-specific, and can make or break your app depending on the content.

Resumindo, os hologramas funcionam melhor quando o plano de estabilização é aplicado corretamente, mas o que isso realmente significa depende do tipo de aplicativo que você está criando.In a nutshell, holograms work best when the stabilization plane is properly applied, but what that actually means depends on the type of application you’re creating. Vamos dar uma olhada em como alguns dos aplicativos disponíveis atualmente para o HoloLens resolvem esse problema.Let’s take a look at how some of the apps currently available for HoloLens tackle this problem.

Nos bastidoresBehind the scenes

Ao desenvolver os aplicativos a seguir, observamos que, quando não usamos o plano, os objetos seriam sways quando nossa cabeça mudou e veremos a separação de cores com movimentos de cabeça ou de holograma rápidos.When developing the following apps, we noticed that when we didn't use the plane, objects would sway when our head moved and we'd see color separation with quick head or hologram movements. No decorrer do período de desenvolvimento, aprendemos por meio de avaliação e erro como melhor usar o plano de estabilização e como projetar nossos aplicativos em relação aos problemas que ele não pode corrigir.Over the course of the development timeframe, we learned through trial and error how to best use the stabilization plane and how to design our apps around the problems that it can't fix.

Galaxy Explorer: conteúdo de carta, interatividade 3DGalaxy Explorer: Stationary content, 3D interactivity

O Galaxy Explorer tem dois elementos principais na cena: a visão principal do conteúdo do celestes e a barra de ferramentas da interface do usuário pequena que segue o olhar.Galaxy Explorer has two major elements in the scene: The main view of the celestial content and the small UI toolbar that follows your gaze. Para a lógica de estabilização, examinamos o que o seu vetor olhar atual intersecciona em cada quadro para determinar se ele atinge qualquer coisa em uma camada de colisão especificada.For the stabilization logic, we look at what your current gaze vector intersects with in each frame to determine if it hits anything on a specified collision layer. Nesse caso, as camadas nas quais estamos interessados são os planetas, portanto, se seu olhar cair em um planeta, o plano de estabilização será colocado lá.In this case, the layers we’re interested in are the planets, so if your gaze falls on a planet, the stabilization plane is placed there. Se nenhum dos objetos na camada de colisão de destino for atingido, o aplicativo usará uma camada secundária "plano B".If none of the objects in the target collision layer are hit, the app uses a secondary “plan B” layer. Se nada estiver sendo gazeddo em, o plano de estabilização será mantido à mesma distância que era quando nuvens no conteúdo.If nothing is being gazed at, the stabilization plane is kept at the same distance as it was when gazing at the content. As ferramentas de interface do usuário são deixadas como um destino plano, pois descobrimos que o salto entre perto e longe reduziu a estabilidade da cena geral.The UI tools are left out as a plane target as we found the jump between near and far reduced the stability of the overall scene.

O design do Galaxy Explorer se presta bem para manter as coisas estáveis e reduzir o efeito da separação de cores.The design of Galaxy Explorer lends itself well to keeping things stable and reducing the effect of color separation. O usuário é incentivado a percorrer e girar o conteúdo em vez de movê-lo de lado a lado, e os planetas estão girando de forma lenta o suficiente para que a separação de cores não seja perceptível.The user is encouraged to walk around and orbit the content rather than move along it from side to side, and the planets are orbiting slowly enough that the color separation isn’t noticeable. Além disso, uma constante 60 FPS é mantida, o que leva muito tempo para impedir que a separação de cores ocorra.Additionally, a constant 60 FPS is maintained, which goes a long way in preventing color separation from happening.

Para verificar isso por conta própria, procure um arquivo chamado LSRPlaneModifier.cs no código do Galaxy Explorer no GitHub.To check this out yourself, look for a file called LSRPlaneModifier.cs in the Galaxy Explorer code on GitHub.

HoloStudio: conteúdo estacionário com um foco na interface do usuárioHoloStudio: Stationary content with a UI focus

No HoloStudio, você passa a maior parte do seu tempo olhando para o mesmo modelo em que está trabalhando.In HoloStudio, you spend most of your time looking at the same model you’re working on. Seu olhar não move uma quantidade significativa, exceto quando você seleciona uma nova ferramenta ou deseja navegar pela interface do usuário, para que possamos manter a lógica de configuração do plano simples.Your gaze doesn’t move a significant amount, except for when you select a new tool or want to navigate the UI, so we can keep the plane setting logic simple. Ao examinar a interface do usuário, o plano é definido como qualquer elemento da interface do usuário ao qual seu olhar se ajusta.When looking at the UI, the plane is set to whatever UI element your gaze snaps to. Ao olhar para o modelo, o plano é uma distância definida, correspondendo à distância padrão entre você e o modelo.When looking at the model, the plane is a set distance away, corresponding with the default distance between you and the model.

O plano de estabilização é visualizado em HoloStudio como o usuário gazes no botão página inicial

HoloTour e visualizador 3D: conteúdo estacionário com animação e filmesHoloTour and 3D Viewer: Stationary content with animation and movies

No HoloTour e no visualizador 3D, você está examinando um objeto animado solitários ou um filme com efeitos 3D adicionados sobre ele.In HoloTour and 3D Viewer, you’re looking at a solitary animated object or movie with 3D effects added on top of it. A estabilização nesses aplicativos é definida como o que você está exibindo no momento.The stabilization in these apps is set to whatever you’re currently viewing.

O HoloTour também impede que você se afaste muito do mundo virtual, fazendo com que ele se mova com você em vez de permanecer em um local fixo.HoloTour also prevents you from straying too far away from your virtual world by having it move with you instead of staying in a fixed location. Isso garante que você não ficará muito longe de outros hologramas para que os problemas de estabilidade sejam deslizados.This ensures that you won’t get far enough away from other holograms for stability issues to creep in.

Neste exemplo de HoloTour, o plano de estabilização seria definido como este filme de Pantheon de Hadrian.

RoboRaid: conteúdo dinâmico e interações ambientaisRoboRaid: Dynamic content and environmental interactions

Definir o plano de estabilização em RoboRaid é surpreendentemente simples, apesar de ser o aplicativo que exige o movimento mais repentino.Setting the stabilization plane in RoboRaid is surprisingly simple, despite being the app that requires the most sudden movement. O plano é direcionado para se adequar às paredes ou aos objetos ao redor e flutuar em uma distância fixa na frente de você quando estiver longe de fazê-lo.The plane is geared towards sticking to the walls or the surrounding objects and will float at a fixed distance in front of you when you’re far enough away from them.

O RoboRaid foi projetado com o plano de estabilização em mente.RoboRaid was designed with the stabilization plane in mind. O reticle, que move o máximo, já que ele é bloqueado, evita isso usando apenas vermelho e azul, o que minimiza qualquer sangramento de cor.The reticle, which moves the most since it’s head-locked, circumvents this by using only red and blue which minimizes any color bleeding. Ele também contém uma pequena profundidade entre as partes, minimizando qualquer sangramento de cor que poderia ocorrer mascarando-a com um efeito de da Parallax já esperado.It also contains a small bit of depth between the pieces, minimizing any color bleed that would occur by masking it with an already expected parallax effect. Os robôs não se movem muito rapidamente e só viajam a pequenas distâncias em intervalos regulares.The robots don’t move very quickly and only travel short distances in regular intervals. Eles tendem a ficar cerca de 2 metros na frente, onde a estabilização é definida por padrão.They tend to stay around 2 meters in front of you, where the stabilization is set by default.

Fragmentos e jovens Conker: conteúdo dinâmico com interação ambientalFragments and Young Conker: Dynamic content with environmental interaction

Escrito pelo Asobo Studio em C++, fragmentos e jovens Conker usam uma abordagem diferente para definir o plano de estabilização.Written by Asobo Studio in C++, Fragments and Young Conker take a different approach to setting the stabilization plane. Os pontos de interesse (POI) são definidos no código e ordenados em termos de prioridade.Points of interest (POI) are defined in the code and ordered in terms of priority. Em inglês, temos conteúdo em jogo, como o modelo Conker em jovens Conker, menus, Reticle de mira e logotipos.POIs are in-game content such as the Conker model in Young Conker, menus, the aiming reticle, and logos. O em diante é interseccionado pelo olhar do usuário e o plano é definido como o centro do objeto com a prioridade mais alta.The POIs are intersected by the user’s gaze and the plane is set to the center of the object with the highest priority. Se nenhuma interseção ocorrer, o plano será definido como a distância padrão.If no intersection occurs, the plane is set to the default distance.

Fragmentos e jovens de Conker também criam um design para você se afastar muito dos hologramas, pausando o aplicativo se você se mover para fora do que foi previamente examinado como seu espaço de reprodução.Fragments and Young Conker also design around you straying too far from the holograms by pausing the app if you move outside of what’s been previously scanned as your play space. Dessa forma, eles mantêm você dentro dos limites encontrados para fornecer a experiência mais estável.As such, they keep you within the boundaries that are found to provide the most stable experience.

Faça você mesmoDo it yourself

Se você tiver um HoloLens e quiser brincar com os conceitos neste artigo, poderá baixar uma cena de teste e experimentar os exercícios abaixo.If you have a HoloLens and would like to play around with the concepts within this article, you can download a test scene and try out the exercises below. Ele usa a API Gizmo interna do Unity e deve ajudá-lo a visualizar onde seu plano está sendo definido.It uses Unity’s built-in gizmo API and should help you visualize where your plane is being set. Esse código também foi usado para capturar as capturas de tela nesse estudo de caso.This code was also used to capture the screenshots in this case study.

  1. Sincronize a versão mais recente do MixedRealityToolkit-Unity.Sync the latest version of MixedRealityToolkit-Unity.
  2. Abra a cena HoloToolkit-examples/Utilities/cenas/StabilizationPlaneSetting. Unity .Open the HoloToolkit-Examples/Utilities/Scenes/StabilizationPlaneSetting.unity scene.
  3. Crie e configure o projeto gerado.Build and configure the generated project.
  4. Execute em seu dispositivo.Run on your device.

Exercício 1Exercise 1

Você verá vários pontos brancos em orientações diferentes.You'll see several white dots around you at different orientations. Na frente de você, você verá três pontos em diferentes profundidades.In front of you, you’ll see three dots at different depths. Toque de ar para alterar a qual ponto o plano está definido.Air tap to change which dot the plane is set to. Para este exercício e para os outros dois, mova-se pelo seu espaço enquanto nuvens nos pontos.For this exercise, and for the other two, move around your space while gazing at the dots. Transforme seu cabeçalho à esquerda, à direita, acima e abaixo.Turn your head left, right, up, and down. Mova-se mais para cima e para longe dos pontos.Move closer to and farther from the dots. Veja como eles reagem quando o plano de estabilização é definido como destinos diferentes.See how they react when the stabilization plane is set to different targets.

Exercício 2Exercise 2

Agora, mude para a direita até ver dois pontos de movimentação, um oscillating em um caminho horizontal e outro em um caminho vertical.Now, turn to your right until you see two moving dots, one oscillating on a horizontal path and one on a vertical path. Mais uma vez, toque em ar para alterar a qual ponto o plano está definido.Once again, air-tap to change which dot the plane is set to. Observe como a separação de cores é reduzida e aparece no ponto que está conectado ao plano.Notice how color separation is lessened and appears on the dot that is connected to the plane. Toque novamente para usar a velocidade do ponto na função de configuração do plano.Tap again to use the dot’s velocity in the plane setting function. Esse parâmetro fornece uma dica para o HoloLens sobre o movimento pretendido do objeto.This parameter gives a hint to HoloLens about the object’s intended motion. É importante saber quando usar isso, como você observará quando a velocidade é usada em um ponto, o outro ponto de movimentação mostrará uma separação de cores maior.It’s important to know when to use this, as you’ll notice when velocity is used on one dot, the other moving dot will show greater color separation. Tenha isso em mente ao projetar seus aplicativos – ter um fluxo coeso para o movimento de seus objetos pode ajudar a evitar que os artefatos sejam exibidos.Keep this in mind when designing your apps—having a cohesive flow to the motion of your objects can help prevent artifacts from appearing.

Exercício 3Exercise 3

Vá para o seu direito mais uma vez até ver uma nova configuração de pontos.Turn to your right once more until you see a new configuration of dots. Nesse caso, há pontos na distância e um ponto em espiral e escapados na frente deles.In this case, there are dots in the distance and one dot spiraling in and out in front of them. Toque de ar para alterar a qual ponto o plano está definido, alternando entre os pontos na parte de trás e o ponto em movimento.Air tap to change which dot the plane is set to, alternating between the dots in the back and the dot in motion. Observe como definir a posição do plano e a velocidade para aquela do ponto de espiral faz com que os artefatos apareçam em qualquer lugar.Notice how setting the plane position and the velocity to that of the spiraling dot makes artifacts appear everywhere.

DicasTips

  • Mantenha a lógica de configuração do plano simples.Keep your plane setting logic simple. Como vimos, você não precisa de algoritmos de configuração de plano complexos para fazer uma experiência de imersão.As you’ve seen, you don’t need complex plane setting algorithms to make an immersive experience. O plano de estabilização é apenas uma peça do quebra-cabeça.The stabilization plane is only one piece of the puzzle.
  • Quando possível, sempre mova o plano entre destinos sem problemas.When at all possible, always move the plane between targets smoothly. A troca instantânea de destinos distantes pode interromper visualmente a cena.Instantly switching distant targets can visually disrupt the scene.
  • Considere ter uma opção em sua lógica de configuração de plano para bloquear em um destino muito específico.Consider having an option in your plane setting logic to lock onto a very specific target. Dessa forma, você pode ter o plano bloqueado em um objeto, como uma tela de logotipo ou de título, se necessário.That way, you can have the plane locked on an object, such as a logo or title screen, if needed.

Sobre o autorAbout the author

Picture of Ben Strukus Ben StrukusBen Strukus
Engenheiro de software @MicrosoftSoftware Engineer @Microsoft

Veja tambémSee also