Mapeamento espacial

Funcionalidade HoloLens (1ª geração) HoloLens 2 Auscultadores imersivos
Mapeamento espacial ✔️ ✔️

Porque é que o mapeamento espacial é importante?

O mapeamento espacial permite colocar objetos em superfícies reais. Isto ajuda a ancorar objetos no mundo do utilizador e aproveita pistas de profundidade do mundo real. Oclusão dos hologramas com base em outros hologramas e objetos do mundo real ajuda a convencer o utilizador de que estes hologramas estão realmente no seu espaço. Hologramas flutuar no espaço ou mover-se com o utilizador não se sentirá tão real. Quando possível, coloque os itens para conforto.

Visualizar as superfícies ao colocar ou mover hologramas (utilize uma grelha projetada). Isto ajuda os utilizadores a saber onde podem colocar melhor os seus hologramas, e mostra se o local onde estão a tentar colocar o holograma não está mapeado. Pode "artigos de outdoor" para o utilizador se eles acabarem num ângulo demasiado grande.

Descrição geral conceptual

Superfícies de malha cobrindo uma sala
Um exemplo de uma malha de mapeamento espacial cobrindo uma sala

Os dois tipos de objetos primários utilizados para o mapeamento espacial são o 'Observador de Superfície Espacial' e o 'Superfície Espacial'.

A aplicação fornece ao Observador de Superfície Espacial um ou mais volumes limitados, para definir as regiões do espaço em que a aplicação pretende receber dados de mapeamento espacial. Para cada um destes volumes, o mapeamento espacial fornecerá à aplicação um conjunto de Superfícies Espaciais.

Estes volumes podem ser estacionários (num local fixo baseado no mundo real) ou podem ser ligados ao HoloLens (movem-se, mas não giram, com a HoloLens à medida que se move pelo ambiente). Cada superfície espacial descreve superfícies do mundo real num pequeno volume de espaço, representado como uma malha triangular ligada a um sistema de coordenadas espaciaisbloqueado mundialmente.

À medida que o HoloLens recolhe novos dados sobre o ambiente, e à medida que ocorrem alterações no ambiente, as superfícies espaciais aparecerão, desaparecerão e mudarão.

Demonstração de conceitos de design de consciência espacial

Se você gostaria de ver conceitos de design de consciência espacial em ação, confira o nosso design Hologramas - Demonstração de Imagem Espacial abaixo. Quando terminar, continue para um mergulho mais detalhado em tópicos específicos.

Este vídeo foi tirado da aplicação "Designing Hologramas" HoloLens 2. Faça o download e desfrute de toda a experiência aqui.

Mapeamento espacial vs. Cena Compreensiva WorldMesh

Para HoloLens 2, é possível consultar uma versão estática dos dados de mapeamento espacial utilizando a cena entendendo SDK (configuração EnableWorldMesh). Aqui estão as diferenças entre duas formas de aceder aos dados de mapeamento espacial:

  • API de Mapeamento Espacial:
    • Gama limitada: os dados de mapeamento espacial disponíveis para aplicações numa 'bolha' em cache de tamanho limitado em torno do utilizador.
    • Fornece atualizações de baixa latência de regiões de malha alteradas através de eventos SurfacesChanged.
    • Nível variável de detalhes controlados por triângulos por parâmetro do medidor cúbico.
  • SDK de compreensão de cena:
    • Alcance ilimitado - fornece todos os dados de mapeamento espacial digitalizados dentro do raio de consulta.
    • Fornece uma imagem estática dos dados de mapeamento espacial. Obter os dados de mapeamento espacial atualizado requer uma nova consulta para toda a malha.
    • Nível consistente de detalhes controlados pela definição RequestMeshLevelOfDetail.

O que influencia a qualidade do mapeamento espacial?

Vários fatores, detalhados aqui,podem afetar a frequência e a gravidade destes erros. No entanto, deve conceber a sua aplicação para que o utilizador possa atingir os seus objetivos mesmo na presença de erros nos dados de mapeamento espacial.

Cenários comuns de utilização

Ilustrações de cenários comuns de utilização do mapeamento espacial: Colocação, Oclusão, Física e Navegação

Posicionamento

O mapeamento espacial proporciona às aplicações a oportunidade de apresentar formas naturais e familiares de interação ao utilizador; o que poderia ser mais natural do que colocar o telefone na mesa?

A limitação da colocação de hologramas (ou, mais genericamente, qualquer seleção de locais espaciais) para se situar em superfícies fornece um mapeamento natural de 3D (ponto no espaço) a 2D (ponto na superfície). Isto reduz a quantidade de informação que o utilizador precisa para fornecer à aplicação e torna as interações do utilizador mais rápidas, fáceis e precisas. Isto é verdade porque 'distância' não é algo que estamos habituados a comunicar fisicamente com outras pessoas ou com computadores. Quando apontamos com o dedo, estamos a especificar uma direção, mas não uma distância.

Uma ressalva importante aqui é que quando uma aplicação infere distância da direção (por exemplo, fazendo um raycast ao longo da direção do olhar do utilizador para encontrar a superfície espacial mais próxima), isso deve produzir resultados que o utilizador pode prever de forma fiável. Caso contrário, o utilizador perderá o seu sentido de controlo e isso pode rapidamente tornar-se frustrante. Um método que ajuda com isto é fazer vários raycasts em vez de apenas um. Os resultados agregados devem ser mais suaves e previsíveis, menos suscetíveis a influenciar resultados transitórios 'outlier' (como pode ser causado por raios que passam por pequenos buracos ou atingem pequenos pedaços de geometria que o utilizador não sabe). A agregação ou suavização também podem ser realizadas ao longo do tempo; por exemplo, pode limitar a velocidade máxima a que um holograma pode variar à distância do utilizador. Limitar simplesmente o valor mínimo e máximo de distância também pode ajudar, para que o holograma que está a ser movido não voe repentinamente para longe ou volte a bater na cara do utilizador.

As aplicações também podem usar a forma e a direção das superfícies para orientar a colocação do holograma. Uma cadeira holográfica não deve penetrar através das paredes e deve sentar-se nivelada com o chão, mesmo que seja ligeiramente desigual. Este tipo de funcionalidade provavelmente dependeria do uso de colisões físicas em vez de raycasts, no entanto preocupações semelhantes se aplicarão. Se o holograma que está a ser colocado tem muitos pequenos polígonos que se destacam, como as pernas numa cadeira, pode fazer sentido expandir a representação física desses polígonos para algo mais largo e suave, de modo a que sejam mais capazes de deslizar sobre superfícies espaciais sem engatar.

No seu extremo, a entrada do utilizador pode ser simplificada completamente e as superfícies espaciais podem ser usadas para fazer a colocação inteiramente automática do holograma. Por exemplo, a aplicação pode colocar um interruptor de luz holográfico algures na parede para o utilizador pressionar. A mesma ressalva sobre a previsibilidade aplica-se duplamente aqui; se o utilizador espera controlar a colocação do holograma, mas a aplicação nem sempre coloca hologramas onde esperam (se o interruptor aparecer em algum lugar que o utilizador não consegue alcançar), então esta será uma experiência frustrante. Na verdade, pode ser pior fazer a colocação automática que requer correção do utilizador algumas vezes, do que apenas exigir que o utilizador faça sempre a sua colocação; porque se espera umacolocação automática bem sucedida, a correção manual parece um fardo!

Note também que a capacidade de uma aplicação de usar superfícies espaciais para colocação depende fortemente da experiência de digitalizaçãoda aplicação . Se uma superfície não foi digitalizada, então não pode ser usada para colocação. Cabe à aplicação deixar isto claro para o utilizador, para que possa ajudar a digitalizar novas superfícies ou selecionar um novo local.

O feedback visual ao utilizador é da maior importância durante a colocação. O utilizador precisa de saber onde o holograma é baseado na superfície mais próxima com efeitos de ligação à terra. Devem entender por que razão o movimento do seu holograma está a ser constrangido (por exemplo, devido a colisões com outra superfície próxima). Se não podem colocar um holograma na localização atual, então o feedback visual deve deixar claro por que não. Por exemplo, se o utilizador estiver a tentar colocar um sofá holográfico preso a meio da parede, então as partes do sofá que estão atrás da parede devem pulsar numa cor zangada. Ou, inversamente, se a aplicação não encontrar uma superfície espacial num local onde o utilizador possa ver uma superfície real, então a aplicação deve deixar isso claro. A ausência evidente de um efeito de ligação à terra neste domínio pode atingir este objetivo.

Oclusão

Um dos principais usos das superfícies de mapeamento espacial é simplesmente para oclude hologramas. Este comportamento simples tem um enorme impacto no realismo percebido dos hologramas, ajudando a criar uma sensação visceral que realmente habita o mesmo espaço físico que o utilizador.

A oclusão também fornece informações ao utilizador; quando um holograma parece estar obstruído por uma superfície do mundo real, isto fornece feedback visual extra sobre a localização espacial desse holograma no mundo. Inversamente, a oclusão também pode ocultar informações útilmente do utilizador; hologramas ocluding atrás das paredes podem reduzir a desordem visual de uma forma intuitiva. Para esconder ou revelar um holograma, o utilizador apenas tem de mexer a cabeça.

A oclusão também pode ser usada para primordiizar expectativas para uma interface de utilizador natural baseada em interações físicas familiares; se um holograma é obstruído por uma superfície é porque essa superfície é sólida, então o utilizador deve esperar que o holograma colida com essa superfície e não passe por ele.

Às vezes, a oclusão dos hologramas é indesejável. Se um utilizador precisa interagir com um holograma, então precisa vê-lo - mesmo que esteja por trás de uma superfície real. Nesses casos, geralmente faz sentido tornar tal holograma de forma diferente quando é obstruído (por exemplo, reduzindo o seu brilho). Desta forma, o utilizador pode localizar visualmente o holograma, mas ainda saberão que está por trás de algo.

Física

O uso da simulação física é outra forma de o mapeamento espacial poder ser usado para reforçar a presença de hologramas no espaço físico do utilizador. Quando a minha bola de borracha holográfica sai da minha secretária, salta pelo chão e desaparece debaixo do sofá, pode ser difícil para mim acreditar que não está lá.

A simulação física também oferece a oportunidade para uma aplicação para usar interações naturais e familiares baseadas na física. Mover uma peça de mobiliário holográfico no chão será provavelmente mais fácil para o utilizador se o mobiliário responder como se estivesse deslizando pelo chão com a inércia e fricção apropriadas.

Para gerar comportamentos físicos realistas, provavelmente terá de fazer algum processamento de malha, como preencher buracos, remover alucinações flutuantes e suavizar superfícies ásperas.

Também terá de considerar como a experiência de digitalização da sua aplicação influencia a sua simulação física. Em primeiro lugar, as superfícies em falta não colidem com nada; o que acontece quando a bola de borracha rolar pelo corredor e fora do fim do mundo conhecido? Em segundo lugar, tem de decidir se vai continuar a responder às mudanças no ambiente ao longo do tempo. Em alguns casos, você vai querer responder o mais rápido possível; digamos se o utilizador está usando portas e móveis como barricadas móveis em defesa contra uma tempestade de setas romanas que entram. Noutros casos, porém, é melhor ignorar novas atualizações; Conduzir o seu carro desportivo holográfico à volta da pista de corridas no seu chão pode de repente não ser tão divertido se o seu cão decidir sentar-se no meio da pista.

As aplicações podem usar dados de mapeamento espacial para conceder caracteres holográficos (ou agentes) a capacidade de navegar no mundo real da mesma forma que uma pessoa real faria. Isto pode ajudar a reforçar a presença de caracteres holográficos, limitando-os ao mesmo conjunto de comportamentos naturais e familiares que os do utilizador e dos seus amigos.

As capacidades de navegação também podem ser úteis para os utilizadores. Uma vez que um mapa de navegação tenha sido construído em uma determinada área, poderia ser partilhado para fornecer direções holográficas para novos utilizadores que não estão familiarizados com esse local. Este mapa poderia ser concebido para ajudar a manter o "tráfego" dos peões a fluir sem problemas, ou a evitar acidentes em locais perigosos, como estaleiros de construção.

Os principais desafios técnicos envolvidos na implementação da funcionalidade de navegação serão a deteção fiável de superfícies ambulantes (os humanos não andam sobre as mesas!) e graciosa adaptação às mudanças no ambiente (os humanos não andam por portas fechadas!). A malha pode necessitar de algum processamento antes de ser utilizável para planeamento de caminhos e navegação por um personagem virtual. Suavizar a malha e remover alucinações pode ajudar a evitar que os caracteres fiquem presos. Também pode desejar simplificar drasticamente a malha para acelerar os cálculos de planeamento e navegação do seu personagem. Estes desafios têm recebido muita atenção no desenvolvimento da tecnologia dos videojogos, e há uma grande quantidade de literatura de pesquisa disponível sobre estes temas.

A funcionalidade NavMesh incorporada na Unidade não pode ser utilizada com superfícies de mapeamento espacial. Isto porque as superfícies de mapeamento espacial não são conhecidas até o início da aplicação, mas os ficheiros de dados da NavMesh precisam de ser gerados a partir de ativos de origem antes do tempo. Note também que o sistema de mapeamento espacial não fornecerá informações sobre superfícies longe da localização atual do utilizador. Assim, a aplicação deve 'lembrar' as superfícies se for para construir um mapa de uma grande área.

Visualização

A maior parte do tempo é apropriado que as superfícies espaciais sejam invisíveis; para minimizar a desordem visual e deixar o mundo real falar por si. No entanto, às vezes é útil visualizar superfícies de mapeamento espacial diretamente, apesar de os seus homólogos do mundo real serem visíveis.

Por exemplo, quando o utilizador está a tentar colocar um holograma numa superfície (colocando um armário holográfico na parede, por exemplo) pode ser útil 'aterrar' o holograma lançando uma sombra sobre a superfície. Isto dá ao utilizador uma noção muito mais clara da proximidade física exata entre o holograma e a superfície. Este é também um exemplo da prática mais geral de 'visualizar' visualmente uma mudança antes que o utilizador se comprometa com ela.

Ao visualizar superfícies, a aplicação pode partilhar com o utilizador a sua compreensão do ambiente. Por exemplo, um jogo de tabuleiro holográfico poderia visualizar as superfícies horizontais que identificou como 'tabelas', para que o utilizador saiba onde devem ir para interagir.

Visualizar superfícies pode ser uma forma útil de mostrar ao utilizador espaços próximos que estão escondidos da vista. Isto poderia fornecer uma maneira de dar ao utilizador acesso à sua cozinha (e todos os seus hologramas contidos) a partir da sua sala de estar.

As malhas de superfície fornecidas por mapeamento espacial não podem ser particularmente "limpas". É importante visualizá-los apropriadamente. Os cálculos tradicionais de iluminação podem destacar erros nas normas de superfície de forma visualmente distrativa, enquanto texturas 'limpas' projetadas na superfície podem ajudar a dar-lhe uma aparência mais arrumada. Também é possível fazer o processamento de malha para melhorar as propriedades da malha, antes que as superfícies sejam renderizadas.

Nota

HoloLens 2 implementa um novo Tempo de Execução de Compreensão de Cena,que fornece aos desenvolvedores de Realidade Mista uma representação ambiental estruturada e de alto nível projetada para simplificar a implementação de colocação, oclusão, física e navegação.

Usando o Observador de Superfície

O ponto de partida para o mapeamento espacial é o observador superficial. O fluxo de programa é o seguinte:

  • Criar um objeto observador de superfície
    • Fornecer um ou mais volumes espaciais, para definir as regiões de interesse em que a aplicação deseja receber dados de mapeamento espacial. Um volume espacial é simplesmente uma forma que define uma região do espaço, como uma esfera ou uma caixa.
    • Use um volume espacial com um sistema de coordenadas espaciais bloqueado mundialmente para identificar uma região fixa do mundo físico.
    • Utilize um volume espacial, atualize cada quadro com um sistema de coordenadas espaciais com bloqueio corporal, para identificar uma região de espaço que se move (mas não gira) com o utilizador.
    • Estes volumes espaciais podem ser alterados mais tarde a qualquer momento, uma vez que o estado da aplicação ou o utilizador mudam.
  • Utilize sondagens ou notificações para recuperar informações sobre superfícies espaciais
    • Pode 'sondar' o observador de superfície para o estado da superfície espacial a qualquer momento. Em vez disso, pode registar-se para o evento "superfícies alteradas" do Observador de superfície, que notificará a aplicação quando as superfícies espaciais tiverem mudado.
    • Para um volume espacial dinâmico, como a vista frustum, ou um volume bloqueado pelo corpo, as aplicações terão de sondar alterações em cada quadro, definindo a região de interesse e, em seguida, obtendo o conjunto atual de superfícies espaciais.
    • Para um volume estático, como um cubo de bloqueio mundial que cobre uma única sala, as aplicações podem registar-se para o evento "superfícies alteradas" a ser notificada quando as superfícies espaciais dentro desse volume podem ter mudado.
  • Mudanças nas superfícies do processo
    • Iterar o conjunto fornecido de superfícies espaciais.
    • Classifique as superfícies espaciais como adicionado, alterado ou removido.
    • Para cada superfície espacial adicionada ou alterada, se adequado, apresente um pedido assíncronos para receber a malha atualizada que represente o estado atual da superfície ao nível de detalhe pretendido.
  • Processe o pedido de malha assíncronea (mais detalhes nas seguintes secções).

Colocação em Cache de malha

As superfícies espaciais são representadas por malhas de triângulo densas. Armazenar, renderizar e processar estas malhas pode consumir recursos computacionais e de armazenamento significativos. Como tal, cada aplicação deve adotar um sistema de caching de malha adequado às suas necessidades, a título de minimização dos recursos utilizados para a transformação e armazenamento de malha. Este regime deve determinar quais as malhas a guardar e quais as que descartar e quando atualizar a malha para cada superfície espacial.

Muitas das considerações aí discutidas informarão diretamente como a sua aplicação deve abordar o caching da malha. Deve considerar como o utilizador se move através do ambiente, que superfícies são necessárias, quando serão observadas diferentes superfícies e quando as mudanças no ambiente devem ser capturadas.

Ao interpretar o evento "superfícies alteradas" fornecido pelo observador de superfície, a lógica básica do caching da malha é a seguinte:

  • Se a aplicação vir uma identificação de superfície espacial que nunca viu antes, deve tratar isto como uma nova superfície espacial.
  • Se a aplicação vir uma superfície espacial com um ID conhecido mas com um novo tempo de atualização, deve tratá-la como uma superfície espacial atualizada.
  • Se a aplicação deixar de ver uma superfície espacial com uma identificação conhecida, deve tratá-la como uma superfície espacial removida.

Cabe a cada aplicação fazer as seguintes escolhas:

  • Para novas superfícies espaciais, deve ser solicitada malha?
    • Geralmente, a malha deve ser solicitada imediatamente para novas superfícies espaciais, que podem fornecer novas informações úteis ao utilizador.
    • No entanto, devem ser dadas prioridade a novas superfícies espaciais próximas e à frente do utilizador e a sua malha deve ser solicitada primeiro.
    • Se a nova malha não for necessária, se, por exemplo, a aplicação tiver permanente ou temporariamente 'congelado' o seu modelo de ambiente, então não deve ser solicitada.
  • Para superfícies espaciais atualizadas, deve ser solicitada malha?
    • As superfícies espaciais atualizadas perto e à frente do utilizador devem ser prioritárias e a sua malha deve ser solicitada primeiro.
    • Pode também ser adequado dar maior prioridade a novas superfícies do que a superfícies atualizadas, especialmente durante a experiência de digitalização.
    • Para limitar os custos de processamento, as aplicações podem pretender acelerar a taxa a que processam atualizações para superfícies espaciais.
    • Pode ser possível deduzir que as alterações a uma superfície espacial são menores, por exemplo, se os limites da superfície forem pequenos, caso em que a atualização pode não ser suficientemente importante para processar.
    • As atualizações para superfícies espaciais fora da atual região de interesse do utilizador podem ser totalmente ignoradas, embora neste caso possa ser mais eficiente modificar os volumes de limites espaciais utilizados pelo observador de superfície.
  • Para superfícies espaciais removidas, a malha deve ser descartada?
    • Geralmente, a malha deve ser descartada imediatamente para superfícies espaciais removidas, de modo que a oclusão do holograma permaneça correta.
    • No entanto, se a aplicação tiver razões para acreditar que uma superfície espacial reaparecerá em breve (com base no design da experiência do utilizador), então pode ser mais eficiente mantê-la do que descartar a sua malha e recriá-la novamente mais tarde.
    • Se a aplicação estiver a construir um modelo em larga escala do ambiente do utilizador, então pode não querer descartar qualquer malha. No entanto, ainda terá de limitar o uso dos recursos, possivelmente ao enrolar malhas no disco à medida que as superfícies espaciais desaparecem.
    • Alguns eventos relativamente raros durante a geração de superfície espacial podem fazer com que as superfícies espaciais sejam substituídas por novas superfícies espaciais num local semelhante, mas com diferentes IDs. Assim, as aplicações que optam por não descartar uma superfície removida devem ter o cuidado de não acabar com várias malhas de superfícies espaciais altamente sobrepostas que cobrem o mesmo local.
  • A malha deve ser descartada para outras superfícies espaciais?
    • Mesmo que exista uma superfície espacial, se já não for útil à experiência do utilizador, então deve ser descartada. Por exemplo, se a aplicação 'substituir' a sala do outro lado de uma porta por um espaço virtual alternativo, então as superfícies espaciais nessa sala já não importam.

Aqui está um exemplo de estratégia de caching de malha, usando histerese espacial e temporal:

  • Considere uma aplicação que pretende usar um volume de interesse espacial em forma de frustum que segue o olhar do utilizador enquanto olham em volta e andam por aí.
  • Uma superfície espacial pode desaparecer temporariamente deste volume simplesmente porque o utilizador olha para longe da superfície ou afasta-se mais dela... apenas para olhar para trás ou se aproximar novamente um momento depois. Neste caso, descartar e recriar a malha para esta superfície representa muitos processamentos redundantes.
  • Para reduzir o número de alterações processadas, a aplicação utiliza dois observadores de superfície espacial, um contido no outro. O volume maior é esférico e segue o utilizador 'preguiçosamente'; só se move quando necessário para garantir que o seu centro está a menos de 2,0 metros do utilizador.
  • As malhas de superfície espaciais novas e atualizadas são sempre processadas a partir do observador de superfície interior mais pequeno, mas as malhas são em cache até desaparecerem do maior observador de superfícies exteriores. Isto permite que a aplicação evite processar muitas alterações redundantes devido ao movimento do utilizador local.
  • Uma vez que uma superfície espacial também pode desaparecer temporariamente devido à perda de rastreamento, a aplicação também adia a eliminação de superfícies espaciais removidas durante a perda de rastreamento.
  • Em geral, uma aplicação deve avaliar a compensação entre o processamento de atualização reduzido e o aumento do uso da memória para determinar a sua estratégia ideal de caching.

Composição

Existem três formas primárias em que as malhas de mapeamento espacial tendem a ser usadas para a renderização:

  • Para visualização de superfície
    • É frequentemente útil visualizar superfícies espaciais diretamente. Por exemplo, lançar 'sombras' de objetos em superfícies espaciais pode fornecer feedback visual útil ao utilizador enquanto colocam hologramas em superfícies.
    • Uma coisa a ter em mente é que as malhas espaciais são diferentes do tipo de malhas que um artista 3D pode criar. A topologia do triângulo não será tão 'limpa' como a topologia criada pelo homem, e a malha sofrerá de vários erros.
    • Para criar uma estética visual agradável, pode querer fazer algum processamento de malha,por exemplo, para preencher buracos ou normalizar a superfície. Você também pode desejar usar um shader para projetar texturas projetadas pelo artista na sua malha em vez de visualizar diretamente a topologia de malha e normais.
  • Para hologramas oclusos atrás de superfícies do mundo real
    • As superfícies espaciais podem ser renderizadas num passe apenas de profundidade, que apenas afeta o tampão de profundidade e não afeta os alvos de renderização de cores.
    • Isto prepara o tampão de profundidade para oclude subsequentemente tornado hologramas atrás de superfícies espaciais. A oclusão precisa de hologramas aumenta a sensação de que os hologramas realmente existem no espaço físico do utilizador.
    • Para ativar a renderização apenas de profundidade, atualize o seu estado de mistura para definir o RenderTargetWriteMask a zero para todos os alvos de renderização de cores.
  • Para modificar o aparecimento de hologramas obstruídos por superfícies do mundo real
    • Normalmente, a geometria renderizada é escondida quando é obstruída. Isto é conseguido definindo a função de profundidade no seu estado de profundidade para "menos ou igual", o que faz com que a geometria seja visível apenas quando está mais perto da câmara do que toda a geometria previamente renderizada.
    • No entanto, pode ser útil manter certas geometrias visíveis mesmo quando está obstruída, e modificar a sua aparência quando obstruída como forma de fornecer feedback visual ao utilizador. Por exemplo, isto permite que a aplicação mostre ao utilizador a localização de um objeto, deixando claro que está por trás de uma superfície real.
    • Para isso, faça da geometria uma segunda vez com um shader diferente que cria a aparência 'occluded' desejada. Antes de tornar a geometria pela segunda vez, faça duas alterações no seu estado de profundidade. Em primeiro lugar, coloque a função de profundidade "maior ou igual" de modo a que a geometria seja visível apenas onde esteja mais longe da câmara do que toda a geometria previamente renderizada. Em segundo lugar, coloque o DepthWriteMask a zero, de modo a que o tampão de profundidade não seja modificado (o tampão de profundidade deve continuar a representar a profundidade da geometria mais próxima da câmara).

O desempenho é uma preocupação importante ao renderizar malhas de mapeamento espacial. Aqui estão algumas técnicas de desempenho de renderização específicas para renderizar malhas de mapeamento espacial:

  • Ajustar a densidade do triângulo
    • Ao solicitar malhas de superfície espacial do seu observador de superfície, solicite a menor densidade de malhas triangulares que serão suficientes para as suas necessidades.
    • Pode fazer sentido variar a densidade do triângulo numa superfície por superfície, dependendo da distância da superfície do utilizador, e da sua relevância para a experiência do utilizador.
    • A redução das contagens de triângulos reduzirá o uso da memória e os custos de processamento de vértice na GPU, embora não afete os custos de processamento de pixels.
  • Use abate frustum
    • O abate de frustum salta objetos de desenho que não podem ser vistos porque estão fora do frustum do visor atual. Isto reduz os custos de processamento da CPU e da GPU.
    • Uma vez que o abate é realizado numa base por malha e as superfícies espaciais podem ser grandes, quebrar cada malha de superfície espacial em pedaços menores pode resultar num abate mais eficiente (na medida em que são renderizados menos triângulos fora do ecrã). Há uma troca, no entanto; quanto mais malhas tiver, mais chamadas de sorteio deve fazer, o que pode aumentar os custos da CPU. Num caso extremo, os próprios cálculos de abate de frutos podem até ter um custo mensurável do CPU.
  • Ajustar a ordem de renderização
    • As superfícies espaciais tendem a ser grandes, porque representam todo o ambiente do utilizador que os rodeia. Os custos de processamento de pixels na GPU podem ser elevados, especialmente nos casos em que há mais de uma camada de geometria visível (incluindo tanto superfícies espaciais como outros hologramas). Neste caso, a camada mais próxima do utilizador estará a oclusar quaisquer camadas mais distantes, pelo que qualquer tempo de GPU gasto a renderizar essas camadas mais distantes é desperdiçada.
    • Para reduzir este trabalho redundante na GPU, ajuda a tornar as superfícies opacas em ordem frontal-a-costas (as mais próximas primeiro, as mais distantes duram). Por "opaco" queremos dizer superfícies para as quais o DepthWriteMask está definido para um no seu estado de profundidade. Quando as superfícies mais próximas forem renderizadas, eles vão primer o tampão de profundidade para que as superfícies mais distantes sejam eficientemente ignoradas pelo processador de pixels na GPU.

Processamento de malha

Uma aplicação pode querer fazer várias operações em malhas de superfície espacial de acordo com as suas necessidades. Os dados indexados e vértices fornecidos com cada malha de superfície espacial utilizam o mesmo layout familiar que os tampões do vértice e do índice que são utilizados para renderizar malhas triangulares em todas as APIs de renderização moderna. No entanto, um dos principais factos a ter em conta é que os triângulos de mapeamento espacial têm uma ordem de enrolamento no sentido horário frontal. Cada triângulo é representado por três índices de vértice no tampão de índice da malha e estes índices identificarão os vértices do triângulo numa ordem no sentido horário, quando o triângulo é visto do lado frontal. O lado frontal (ou exterior) das malhas espaciais corresponde ao lado frontal (visível) das superfícies do mundo real.

As aplicações só devem fazer simplificação da malha se a densidade triangular mais grosseira fornecida pelo observador de superfície ainda não for suficientemente grosseira - este trabalho é computacionalmente caro e já está a ser realizado pelo tempo de execução para gerar os vários níveis de detalhe fornecidos.

Como cada observador de superfície pode fornecer múltiplas superfícies espaciais não ligadas, algumas aplicações podem querer cortar estas malhas espaciais de superfície umas contra as outras e, em seguida, fecho-las juntas. Em geral, é necessário o passo de corte, uma vez que as malhas de superfície espacial próximas muitas vezes se sobrepõem ligeiramente.

Raycasting e Colisão

Para que uma API física (como Havok)forneça uma aplicação com raycasting e funcionalidade de colisão para superfícies espaciais, a aplicação deve fornecer malhas de superfície espacial para a API física. As malhas utilizadas na física têm frequentemente as seguintes propriedades:

  • Contêm apenas um pequeno número de triângulos. As operações físicas são mais computacionalmente intensivas do que operações de renderização.
  • São "estanques". As superfícies destinadas a serem sólidas não devem ter pequenos furos; mesmo buracos demasiado pequenos para serem visíveis podem causar problemas.
  • São convertidos em cascos convexos. Os cascos convexos têm poucos polígonos e estão livres de buracos, e são muito mais eficientes computacionalmente para processar do que malhas de triângulo cru.

Ao fazer raycasts contra superfícies espaciais, tenha em mente que estas superfícies são muitas vezes complexas, formas desordenadas cheias de pequenos detalhes desarrumados - tal como a sua secretária! Isto significa que um único raio é muitas vezes insuficiente para lhe dar informações suficientes sobre a forma da superfície e a forma do espaço vazio perto dele. É geralmente uma boa ideia fazer muitos raycasts dentro de uma pequena área e usar os resultados agregados para obter uma compreensão mais fiável da superfície. Por exemplo, usar a média de 10 raycasts para guiar a colocação do holograma numa superfície resultará num resultado muito mais suave e menos "nervoso" que usando apenas um único raycast.

No entanto, tenha em mente que cada raycast pode ter um alto custo computacional. Dependendo do seu cenário de utilização, deve trocar o custo computacional de raycasts extra (feito cada frame) contra o custo computacional do processamento da malha para suavizar e remover buracos em superfícies espaciais (feitas quando as malhas espaciais são atualizadas).

A experiência de digitalização do ambiente

Cada aplicação que utilize mapeamento espacial deve considerar proporcionar uma "experiência de digitalização"; o processo através do qual a aplicação orienta o utilizador a digitalizar superfícies necessárias para que a aplicação funcione corretamente.

Exemplo de digitalização
Exemplo de digitalização

A natureza desta experiência de digitalização pode variar muito dependendo das necessidades de cada aplicação, mas dois princípios principais devem orientar o seu design.

Em primeiro lugar, uma comunicação clara com o utilizador é a principal preocupação. O utilizador deve estar sempre ciente de se os requisitos da aplicação estão a ser cumpridos. Quando não estão a ser satisfeitas, deve ser imediatamente claro para o utilizador por que isso é assim e eles devem ser rapidamente levados a tomar as medidas apropriadas.

Em segundo lugar, as candidaturas devem tentar encontrar um equilíbrio entre eficiência e fiabilidade. Quando é possível fazê-lo de forma fiável,as aplicações devem analisar automaticamente os dados de mapeamento espacial para economizar tempo do utilizador. Quando não é possível fazê-lo de forma fiável, as aplicações devem, em vez disso, permitir ao utilizador fornecer rapidamente a aplicação com as informações adicionais que necessita.

Para ajudar a conceber a experiência de digitalização certa, considere quais das seguintes possibilidades são aplicáveis à sua aplicação:

  • Sem experiência de digitalização

    • Uma aplicação pode funcionar perfeitamente sem qualquer experiência de digitalização guiada; aprenderá sobre superfícies que são observadas no decurso do movimento natural do utilizador.
    • Por exemplo, uma aplicação que permite ao utilizador desenhar em superfícies com tinta spray holográfica requer conhecimento apenas das superfícies atualmente visíveis para o utilizador.
    • O ambiente pode já ser digitalizado se for aquele em que o utilizador já passou muito tempo a usar o HoloLens.
    • Tenha em mente, no entanto, que a câmara utilizada pelo mapeamento espacial só pode ver 3,1 m na frente do utilizador, pelo que o mapeamento espacial não saberá de superfícies mais distantes, a menos que o utilizador as tenha observado de uma distância mais próxima no passado.
    • Assim, o utilizador entende quais as superfícies que foram digitalizadas, a aplicação deve fornecer feedback visual para este efeito, por exemplo, lançar sombras virtuais em superfícies digitalizadas pode ajudar o utilizador a colocar hologramas nessas superfícies.
    • Para este caso, os volumes de limitação do observador de superfície espacial devem ser atualizados cada quadro para um sistema de coordenadas espaciaiscom bloqueio corporal , de modo a que estes sigam o utilizador.
  • Encontre um local adequado

    • Uma aplicação pode ser concebida para ser utilizada num local com requisitos específicos.
    • Por exemplo, a aplicação pode necessitar de uma área vazia em torno do utilizador para que possam praticar kung-fu holográfico com segurança.
    • As aplicações devem comunicar quaisquer requisitos específicos ao utilizador frontalmente e reforçá-los com um feedback visual claro.
    • Neste exemplo, a aplicação deve visualizar a extensão da área vazia necessária e destacar visualmente a presença de quaisquer objetos não-dentro desta zona.
    • Para este caso, os volumes de limites do observador de superfície espacial devem utilizar um sistema de coordenadas espaciais bloqueado mundialmente no local escolhido.
  • Encontre uma configuração adequada de superfícies

    • Uma aplicação pode exigir uma configuração específica de superfícies, por exemplo duas paredes grandes, planas e opostas para criar um salão holográfico de espelhos.
    • Nesses casos, a aplicação terá de analisar as superfícies fornecidas por mapeamento espacial para detetar superfícies adequadas e direcionar o utilizador para as mesmos.
    • O utilizador deve ter uma opção de recuo se a análise de superfície da aplicação não for fiável. Por exemplo, se a aplicação identificar incorretamente uma porta como uma parede plana, o utilizador precisa de uma forma simples de corrigir este erro.
  • Digitalizar parte do ambiente

    • Uma aplicação pode pretender apenas capturar parte do ambiente, conforme dirigido pelo utilizador.
    • Por exemplo, a aplicação digitaliza parte de uma sala para que o utilizador possa publicar um anúncio classificado holográfico para móveis que deseje vender.
    • Neste caso, a aplicação deve capturar dados de mapeamento espacial nas regiões observadas pelo utilizador durante a sua verificação.
  • Digitalize toda a sala

    • Uma aplicação pode requerer uma varredura de todas as superfícies da sala atual, incluindo as que estão por trás do utilizador.
    • Por exemplo, um jogo pode colocar o utilizador no papel de Gulliver, sob cerco de centenas de pequenos lilliputianos que se aproximam de todas as direções.
    • Nesses casos, a aplicação terá de determinar quantas das superfícies da sala atual já foram digitalizadas e direcionar o olhar do utilizador para colmatar lacunas significativas.
    • A chave para este processo é fornecer feedback visual que torna claro para o utilizador quais as superfícies que ainda não foram digitalizadas. A aplicação poderia, por exemplo, usar nevoeiro à distância para destacar visualmente regiões que não estão cobertas por superfícies de mapeamento espacial.
  • Tire uma foto inicial do ambiente

    • Uma aplicação pode pretender ignorar todas as alterações no ambiente depois de ter tirado um 'instantâneo' inicial.
    • Isto pode ser apropriado para evitar perturbações de dados criados pelo utilizador que estejam fortemente acopdos ao estado inicial do ambiente.
    • Neste caso, a aplicação deve fazer uma cópia dos dados de mapeamento espacial no seu estado inicial uma vez que a varredura esteja completa.
    • As aplicações devem continuar a receber atualizações para dados de mapeamento espacial se os hologramas ainda estiverem a ser corretamente obstruídos pelo ambiente.
    • As atualizações contínuas aos dados de mapeamento espacial também permitem visualizar quaisquer alterações que ocorreram, esclarecendo ao utilizador as diferenças entre estados anteriores e atuais do ambiente.
  • Tirar fotos iniciadas pelo utilizador do ambiente

    • Uma aplicação só pode pretender responder a alterações ambientais quando instruída pelo utilizador.
    • Por exemplo, o utilizador poderia criar várias 'estátuas' 3D de um amigo capturando as suas poses em diferentes momentos.
  • Permitir ao utilizador alterar o ambiente

    • Uma aplicação pode ser concebida para responder em tempo real a quaisquer alterações efetuadas no ambiente do utilizador.
    • Por exemplo, o utilizador que desenha uma cortina pode desencadear uma "mudança de cena" para uma peça holográfica que ocorre do outro lado.
  • Guie o utilizador para evitar erros nos dados de mapeamento espacial

    • Uma aplicação pode querer fornecer orientação ao utilizador enquanto estão a digitalizar o seu ambiente.
    • Isto pode ajudar o utilizador a evitar certos tipos de erros nos dados de mapeamento espacial, por exemplo, mantendo-se afastado de janelas ou espelhos iluminados pelo sol.

Um detalhe extra a ter em conta é que a 'gama' de dados de mapeamento espacial não é ilimitada. Embora o mapeamento espacial construa uma base de dados permanente de grandes espaços, apenas disponibiliza esses dados às aplicações numa 'bolha' de tamanho limitado em torno do utilizador. Se começarmos no início de um longo corredor e andarem longe o suficiente desde o início, eventualmente as superfícies espaciais de volta no início desaparecerão. Pode atenuar isto ao caching as superfícies da sua aplicação depois de terem desaparecido dos dados de mapeamento espacial disponíveis.

Processamento de malha

Pode ajudar a detetar tipos comuns de erros em superfícies e a filtrar, remover ou modificar os dados de mapeamento espacial conforme apropriado.

Tenha em mente que os dados de mapeamento espacial devem ser o mais fiéis possível às superfícies do mundo real, por isso qualquer processamento que aplique corre o risco de deslocar as suas superfícies para mais longe da 'verdade'.

Aqui estão alguns exemplos de diferentes tipos de processamento de malha que pode achar útil:

  • Enchimento de buracos

    • Se um pequeno objeto feito de um material escuro não conseguir digitalizar, deixará um buraco na superfície circundante.
    • Os buracos afetam a oclusão: os hologramas podem ser vistos 'através' de um buraco numa superfície supostamente opaca do mundo real.
    • Os buracos afetam os raios: se estiver a usar raios para ajudar os utilizadores a interagir com as superfícies, pode ser indesejável que estes raios passem por buracos. Uma atenuação é usar um pacote de vários raios que cobrem uma região de tamanho apropriado. Isto permitir-lhe-á filtrar os resultados 'outlier', de modo que mesmo que um raio passe por um pequeno buraco, o resultado agregado continuará a ser válido. No entanto, esta abordagem tem um custo computacional.
    • Os buracos afetam as colisões físicas: um objeto controlado pela simulação física pode cair através de um buraco no chão e perder-se.
    • É possível preencher algoritmos tais buracos na malha de superfície. No entanto, terá de sintonizar o seu algoritmo para que os "buracos reais" como janelas e portas não se preenodem. Pode ser difícil diferenciar de forma fiável "buracos reais" de "buracos imaginários", pelo que terá de experimentar diferentes heurísticas como "tamanho" e "forma de fronteira".
  • Remoção de alucinação

    • Reflexos, luzes brilhantes e objetos em movimento podem deixar pequenas "alucinações" persistentes flutuando no ar.
    • As alucinações afetam a oclusão: as alucinações podem tornar-se visíveis à medida que as formas escuras se movem em frente e ocluding outros hologramas.
    • As alucinações afetam os raios: se estiver a usar raios para ajudar os utilizadores a interagir com as superfícies, estes raios podem atingir uma alucinação em vez da superfície por trás. Tal como acontece com os buracos, uma mitigação é usar muitos raios em vez de um único raycast, mas mais uma vez isso terá um custo computacional.
    • Alucinações afetam colisões físicas: um objeto controlado pela simulação física pode ficar preso contra uma alucinação e ser incapaz de se mover através de uma área aparentemente clara do espaço.
    • É possível filtrar tais alucinações da malha superficial. No entanto, tal como acontece com os buracos, terá de afinar o seu algoritmo para que objetos reais, como os candeeiros e as pegas das portas, não sejam removidos.
  • Suavização

    • O mapeamento espacial pode devolver superfícies que parecem ser ásperas ou "barulhentas" em comparação com as suas congéneres do mundo real.
    • Suavidade afeta colisões físicas: se o chão for áspero, uma bola de golfe fisicamente simulada pode não rolar suavemente através dela em linha reta.
    • A suavidade afeta a renderização: se uma superfície for visualizada diretamente, os normais de superfície rugosos podem afetar a sua aparência e perturbar um aspeto 'limpo'. É possível mitigar isto usando iluminação e texturas apropriadas no shader que é usado para tornar a superfície.
    • É possível suavizar a rugosidade numa malha superficial. No entanto, isto pode empurrar a superfície para mais longe da superfície do mundo real correspondente. Manter uma correspondência próxima é importante para produzir uma oclusão holograma precisa e para permitir que os utilizadores obtenham interações precisas e previsíveis com superfícies holográficas.
    • Se for necessária apenas uma alteração cosmética, pode ser suficiente para suavizar os normais do vértice sem alterar as posições do vértice.
  • Achado de avião

    • Existem muitas formas de análise que uma aplicação pode querer realizar nas superfícies fornecidas por mapeamento espacial.
    • Um exemplo simples é "achado de avião"; identificando regiões delimitadas, principalmente planar de superfícies.
    • As regiões planar podem ser usadas como superfícies de trabalho holográficas, regiões onde o conteúdo holográfico pode ser automaticamente colocado pela aplicação.
    • As regiões planar podem restringir a interface do utilizador, para orientar os utilizadores a interagirem com as superfícies que melhor se adequam às suas necessidades.
    • As regiões planar podem ser usadas como no mundo real, para contrapartidas holográficas a objetos funcionais como ecrãs LCD, mesas ou quadros brancos.
    • As regiões de Planar podem definir áreas de jogo, formando a base dos níveis de videojogos.
    • As regiões de Planar podem ajudar os agentes virtuais a navegar no mundo real, identificando as áreas de chão em que as pessoas reais são suscetíveis de andar.

Prototipagem e depuragem

Ferramentas úteis

  • O emulador HoloLens pode ser usado para desenvolver aplicações usando mapeamento espacial sem acesso a um HoloLens físico. Permite-lhe simular uma sessão ao vivo sobre uma HoloLens num ambiente realista, com todos os dados que a sua aplicação normalmente consumiria, incluindo HoloLens movimento, sistemas de coordenadas espaciais e malhas de mapeamento espacial. Isto pode ser usado para fornecer uma entrada fiável e repetível, o que pode ser útil para depurar problemas e avaliar alterações ao seu código.
  • Para reproduzir um cenário, capture dados de mapeamento espacial sobre a rede a partir de uma HoloLens ao vivo, em seguida, guarde-os para o disco e reutilize-os em sessões posteriores de depuração.
  • A Windows vista 3D do portal do dispositivo fornece uma forma de ver todas as superfícies espaciais atualmente disponíveis através do sistema de mapeamento espacial. Isto fornece uma base de comparação para as superfícies espaciais dentro da sua aplicação; por exemplo, pode dizer facilmente se faltam superfícies espaciais ou se estão a ser exibidas no local errado.

Orientação geral de prototipagem

  • Uma vez que os erros nos dados de mapeamento espacial podem afetar fortemente a experiência do seu utilizador, recomendamos que teste a sua aplicação em vários ambientes.
  • Não fique preso no hábito de testar sempre no mesmo local, por exemplo, na sua secretária. Certifique-se de testar em várias superfícies de diferentes posições, formas, tamanhos e materiais.
  • Da mesma forma, embora os dados sintéticos ou gravados possam ser úteis para depurar, não se torne demasiado dependente dos mesmos poucos casos de teste. Isto pode atrasar a descoberta de questões importantes que os testes mais variados teriam apanhado mais cedo.
  • É uma boa ideia realizar testes com utilizadores reais (e idealmente não treinados), porque podem não usar o HoloLens ou a sua aplicação exatamente da mesma forma que você. Na verdade, pode surpreendê-lo como o comportamento, conhecimento e suposições divergentes das pessoas podem ser!

Resolução de problemas

  • Para que as malhas de superfície sejam orientadas corretamente, cada GameObject precisa de estar ativo antes de ser enviado para o SurfaceObserver para ter a sua malha construída. Caso contrário, as malhas aparecerão no seu espaço, mas giradas em ângulos estranhos.
  • O GameObject que executa o script que comunica com o SurfaceObserver precisa de ser definido na origem. Caso contrário, todos os GameObjects que crias e envias para o SurfaceObserver para que as suas malhas sejam construídas terão uma compensação igual à compensação do Objeto de Jogo Dos Pais. Isto pode fazer com que as suas malhas apareçam a vários metros de distância, o que torna difícil depurar o que se passa.

Ver também

O mapeamento espacial proporciona uma representação detalhada das superfícies do mundo real no ambiente em torno do HoloLens, permitindo que os desenvolvedores criem uma experiência de realidade mista convincente. Ao fundir o mundo real com o mundo virtual, uma aplicação pode fazer hologramas parecerem reais. As aplicações também podem alinhar-se mais naturalmente com as expectativas dos utilizadores, proporcionando comportamentos e interações familiares no mundo real.


Suportes de dispositivos