Estudo de caso - Como olhar através dos buracos na sua realidade

Quando as pessoas pensam sobre a realidade misturada e o que podem fazer com Microsoft HoloLens, elas geralmente se ater a perguntas como "Quais objetos posso adicionar ao meu quarto?" ou "O que posso colocar em camadas sobre meu espaço?" Gostaria de destacar outra área que você pode considerar, essencialmente, um truque de mágica, usando a mesma tecnologia para examinar ou através de objetos físicos reais ao seu redor.

A tecnologia

Se você lutou contra alienígenas enquanto eles atravessavam suas paredes em RoboRaid, desbloqueava uma parede segura em Fragmentos, ou teve a sorte de ver o hangar do UNSC Infinity na experiência halo 5 na E3 em 2015, então você viu do que estou falando. Dependendo de sua imaginação, este truque visual pode ser usado para colocar buracos temporários em sua parede seca ou para esconder mundos sob um assoalho solto.

RoboRaid adds three-dimensional pipes and other structure behind your walls, visible only through holes created as the invaders break through.

RoboRaid adiciona tubos tridimensionais e outras estruturas atrás de suas paredes, visíveis apenas através de buracos criados à medida que os invasores rompem.

Usando um desses hologramas exclusivos em HoloLens, um aplicativo pode fornecer a ilusão de conteúdo atrás de suas paredes ou pelo chão da mesma forma que a realidade se apresenta por meio de uma janela real. Mova-se para a esquerda, e você pode ver o que quer que esteja do lado direito. Aproxime-se, e você pode ver um pouco mais de tudo. A grande diferença é que buracos reais permitem que você passe, enquanto seu chão teimosamente não permitirá que você suba até esse conteúdo holográfico mágico. (Adicionarei uma tarefa à lista de pendências.)

Nos bastidores

Este truque é uma combinação de dois efeitos. Primeiro, o conteúdo holográfico é fixado ao mundo usando "âncoras espaciais". Usar âncoras para tornar esse conteúdo "bloqueado pelo mundo" significa que o que você está olhando não se afasta visualmente dos objetos físicos próximos a ele, mesmo quando você se move ou o sistema de mapeamento espacial subjacente atualiza seu modelo 3D do seu quarto.

Em segundo lugar, esse conteúdo holográfico é visualmente limitado a um espaço muito específico, portanto, você só pode ver através do buraco em sua realidade. Essa oclusão é necessária para exigir olhar através de um buraco lógico, janela ou porta, que vende o truque. Sem algo bloqueando a maior parte da vista, uma rachadura no espaço para uma dimensão jurássica secreta pode parecer um dinossauro mal colocado.

This is not an actual screenshot, but an illustration of how the secret underworld from MR Basics 101 looks on HoloLens. The black enclosure doesn’t show up, but you can see content through a virtual hole. (When looking through an actual device, the floor would seem to disappear even more because your eyes focus at a further distance as if it’s not even there.)

Esta não é uma captura de tela real, mas uma ilustração de como o submundo secreto do MR Basics 101 é exibido em HoloLens. O compartimento preto não aparece, mas você pode ver o conteúdo por meio de um buraco virtual. (Ao examinar um dispositivo real, o chão parece desaparecer ainda mais porque seus olhos se concentram a uma distância maior como se ele nem estivesse lá.)

Conteúdo holográfico de bloqueio mundial

No Unity, fazer com que o conteúdo holográfico permaneça bloqueado no mundo é tão fácil quanto adicionar um componente WorldAnchor:

myObject.AddComponent<WorldAnchor>();

O componente WorldAnchor ajustará constantemente a posição e a rotação de seu GameObject (e, portanto, qualquer outra coisa sob esse objeto na hierarquia) para mantê-lo estável em relação a objetos físicos próximos. Ao criar seu conteúdo, crie-o de forma que o pivô raiz do objeto seja centralizado nesse buraco virtual. (Se o pivô do objeto estiver no fundo da parede, seus pequenos ajustes na posição e rotação serão muito mais perceptíveis, e o buraco pode não parecer muito estável.)

Occluding tudo, menos o buraco virtual

Há várias maneiras de bloquear seletivamente a exibição para o que está oculto em suas paredes. O mais simples aproveita o fato de que HoloLens usa uma exibição aditiva, o que significa que objetos totalmente pretos parecem invisíveis. Você pode fazer isso no Unity sem fazer nenhum sombreador especial ou truques materiais, basta criar um material preto e atribuí-lo a um objeto que armazena em seu conteúdo. Se você não quiser fazer modelagem 3D, basta usar um punhado de objetos Quad padrão e sobrepô-los ligeiramente. Há várias desvantagens nessa abordagem, mas é a maneira mais rápida de fazer algo funcionar, e obter uma prova de baixa fidelidade de trabalho conceitual é ótimo, mesmo se você suspeitar que talvez queira refatorá-lo mais tarde.

Uma grande desvantagem para a abordagem acima da "caixa preta" é que ela não fotografa bem. Embora seu efeito possa parecer perfeito através da exibição de HoloLens, todas as capturas de tela que você fizer mostrarão um objeto preto grande em vez do que resta da parede ou do chão. O motivo para isso é que o hardware físico e capturas de tela composição hologramas e realidade de forma diferente. Vamos desviar por um momento em algumas matemáticas falsas...

Alerta matemático falso! Esses números e fórmulas servem para ilustrar um ponto, não para ser qualquer tipo de métrica precisa!

O que você vê por meio de HoloLens:

( Reality * darkening_amount ) + Holograms

O que você vê em capturas de tela e vídeo:

( Reality * ( 1 - hologram_alpha ) ) + Holograms * hologram_alpha

Em inglês: o que você vê através de HoloLens é uma combinação simples de realidade escurecido (como através de óculos de sol) e quaisquer hologramas que o aplicativo deseja mostrar. Mas quando você captura uma captura de tela, a imagem da câmera é misturada com os hologramas do aplicativo de acordo com o valor de transparência por pixel.

Uma maneira de contornar isso é alterar o material "caixa preta" para gravar apenas no buffer de profundidade e classificar com todos os outros materiais opacos. Para obter um exemplo disso, confira o arquivo WindowOcclusion.shader no MixedRealityToolkit no GitHub. As linhas relevantes são copiadas aqui:

"RenderType" = "Opaque"
"Queue" = "Geometry"
ColorMask 0

(Observe que a linha "Deslocamento 50, 100" é lidar com problemas não relacionados, portanto, provavelmente faria sentido deixar isso de fora.)

Implementar um material de oclusão invisível como esse permitirá que seu aplicativo desenhe uma caixa que parece correta na exibição e em capturas de tela de realidade misturada. Para pontos de bônus, você pode tentar melhorar ainda mais o desempenho dessa caixa fazendo coisas inteligentes para desenhar ainda menos pixels invisíveis, mas isso pode realmente entrar nas weeds e geralmente não será necessário.

Here is the secret underworld from MR Basics 101 as Unity draws it, except for the outer parts of the occluding box. Note that the pivot for the underworld is at the center of the box, which helps keep the hole as stable as possible relative to your actual floor.

Aqui está o submundo secreto do MR Basics 101 enquanto o Unity o desenha, exceto pelas partes externas da caixa de oclusão. Observe que o pivô do submundo está no centro da caixa, o que ajuda a manter o buraco o mais estável possível em relação ao seu piso real.

Faça você mesmo

Tem um HoloLens e quer experimentar o efeito para si mesmo? A coisa mais fácil que você pode fazer (sem a codificação necessária) é instalar o aplicativo visualizador 3D gratuito e, em seguida, carregar o arquivo .fbx que forneci em GitHub para exibir um modelo de vaso de flores em seu quarto. Carregue-o em HoloLens, e você pode ver a ilusão no trabalho. Quando você está na frente do modelo, você só pode ver o pequeno buraco — todo o resto é invisível. Olhe para o modelo de qualquer outro lado e ele desaparece completamente. Use os controles de movimento, rotação e escala do Visualizador 3D para posicionar o buraco virtual em qualquer superfície vertical que você possa pensar para gerar algumas ideias!

Viewing this model in your Unity editor will show a large black box around the flowerpot. On HoloLens, the box disappears, giving way to a magic window effect.

Exibir esse modelo em seu editor do Unity mostrará uma grande caixa preta ao redor do vaso de flores. Em HoloLens, a caixa desaparece, dando lugar a um efeito de janela mágica.

Se você quiser criar um aplicativo que use essa técnica, confira o tutorial do MR Basics 101 nos tutoriais do Realidade Misturada. O capítulo 7 termina com uma explosão no seu chão que revela um submundo oculto (como na foto acima). Who disse que tutoriais tinham que ser chatos?

Aqui estão algumas ideias de onde você pode levar essa ideia a seguir:

  • Pense em maneiras de tornar o conteúdo dentro do buraco virtual interativo. Permitir que seus usuários tenham algum impacto além de suas paredes pode realmente melhorar a sensação de admiração que esse truque pode fornecer.
  • Pense em maneiras de ver através de objetos de volta para áreas conhecidas. Por exemplo, como você pode colocar um buraco holográfico na sua mesa de café e ver o chão abaixo dela?

Sobre o autor

Picture of Eric Rehmeyer Eric Rehmeyer
Engenheiro de Software Sênior @Microsoft

Confira também