Share via


Operações de reajuste

As operações de reajuste no World Locking Tools ocorrem quando o sistema determina que o reposicionamento de alguns dos objetos na cena registraria melhor esses objetos com as âncoras do mundo físico.

Esta seção tentará fornecer mais informações sobre as situações que levam a operações de reajuste e a mecânica das próprias operações.

É importante enfatizar aqui que as operações de reajuste ocorrem raramente. As tolerâncias de erro padrão que disparam uma operação de recongelamento podem ser personalizadas pelo aplicativo, mas normalmente os ambientes de realidade misturada disparam as operações de recongelamento apenas em circunstâncias extraordinárias. As condições que podem contribuir para a necessidade de recongelamento incluem:

  • Perda de rastreamento devido a um ambiente inválido.
  • Movimentação rápida da cabeça influenciando a varredura do ambiente.
  • Ambientes dinâmicos.
  • Fechamento de loop (ou seja, acumular erros de rastreamento em um caminho de rotatória que leva de volta a um ponto visitado anteriormente).

A causa raiz desses problemas é o rastreamento inadequado, em outras palavras, erros de rastreamento. Com ambientes aceitáveis que produzem um rastreamento bom na medida do possível, e especialmente após uma varredura inicial do espaço, as operações de reajuste se tornarão extremamente raras.

Mesclagem de fragmentos

Muitas condições podem levar à existência de vários fragmentos, a causa mais comum é a perda temporária do rastreamento. Os fragmentos são definidos como coleções de objetos que compartilham um espaço de coordenadas comum, mas onde o espaço de coordenadas de um fragmento está localizado indeterminadamente em relação a outro fragmento.

Quando novos dados do sensor são recebidos e processados o suficiente para que o conteúdo de dois fragmentos não relacionados anteriormente possa ser posicionado corretamente um em relação ao outro no mesmo espaço, uma mesclagem de fragmentos pode ser realizada.

O novo espaço de coordenadas em que o conteúdo dos dois (ou mais) fragmentos será mesclado é arbitrário. Mencionamos aqui que o espaço de coordenadas final será o de um dos espaços, o que só é relevante porque significa que todos os fragmentos mesclados, exceto um, o fragmento de destino, precisarão que suas coordenadas sejam ajustadas. O conteúdo do fragmento escolhido como o destino final da mesclagem não será afetado.

Uma transformação de ajuste é calculada pelo sistema para cada um dos fragmentos de origem mesclados. O AdjustLocationDelegate de cada ponto de anexo nesses fragmentos será chamado com a transformação de ajuste. Novamente, os pontos de anexo no fragmento de destino não serão afetados nem os AdjustLocationDelegates serão chamados.

As duas salas conectadas por um cenário de corredor escuro na descrição dos fragmentos é um exemplo de uma dessas situações. Durante a fase inicial, ambos os fragmentos (salas) foram verificados, mas não há informações disponíveis sobre as posições relativas dos dois fragmentos. Portanto, o sistema de coordenadas em que o conteúdo de cada fragmento é posicionado é arbitrário, contanto que seja constante em todos os objetos nessa sala. Por exemplo, o conteúdo de cada sala pode estar em um sistema de coordenadas com sua origem no canto sudoeste dessa sala. As coordenadas de dois objetos no mesmo fragmento indicam as posições dos dois objetos em relação um ao outro, mas as coordenadas de dois objetos em dois fragmentos diferentes não dizem nada sobre suas posições relativas.

Quando mais informações são adquiridas, há uma oportunidade de ajustar as coordenadas do conteúdo do segundo fragmento para que as coordenadas de seu conteúdo sejam significativas em relação aos objetos no primeiro fragmento. Por exemplo, a luz do corredor pode ser acesa e o corredor atravessado, preenchendo a lacuna entre os dois fragmentos. Se as coordenadas de todos os objetos em ambas as salas forem ajustadas para estarem no mesmo espaço de coordenadas consistente, não haverá mais distinção real entre os dois fragmentos e, portanto, será possível considerar que o conteúdo de ambos pertence a um único fragmento comum.

Essa operação de recolhimento de vários fragmentos em um único fragmento é uma operação de mesclagem.

É importante observar aqui que, para os objetos normais do Unity posicionados na cena no espaço com bloqueio de mundo, a operação de mesclagem não terá efeito. A movimentação de objetos nas operações de reajuste só ocorre por meio dos pontos de anexo.

Operações de recongelamento

Outra situação ocorre quando as posições das âncoras são refinadas ao longo do tempo. Fica claro que uma transformação de rotação/deslocamento não é mais adequada para compensar a diferença entre as posições iniciais aproximadas da âncora e as posições aprimoradas mais recentes no mundo físico. Lembre-se que as próprias âncoras estão constantemente se movendo em relação umas às outras no espaço esponjoso. Mas os pontos de anexo derivados dessas âncoras são corrigidos no espaço com bloqueio de mundo.

Quando o sistema reconhece que os pontos de anexo que ele gerencia podem ser mais bem registrados com o mundo físico devido às atualizações nas posições de ancoragem, ele tem outra oportunidade para um evento de correção. Esse ajuste das posições dos pontos de anexo para refletir os novos dados do sensor é conhecido como operação de recongelamento. Enquanto, em uma operação de mesclagem, o conteúdo de um fragmento é ajustado por uma única transformação para mesclar espaços de coordenadas de dois fragmentos em um único espaço unificado, um recongelamento ajusta cada ponto de anexo individualmente de acordo com as posições atualizadas das âncoras que o influenciam.

Como na operação de mesclagem, cada ponto de anexo é informado de sua transformação de ajuste calculada por meio do AdjustLocationDelegate.

Se as condições forem certas, o recongelamento também poderá executar uma operação de mesclagem. Essa mesclagem será considerada uma parte implícita do recongelamento: não haverá eventos separados gerados para a mesclagem e a transformação de ajuste entregue como parte do recongelamento incluirá o ajuste individual devido ao movimento de ancoragem e ao ajuste de fragmento devido à mesclagem.

Como reagir aos eventos de reajuste

Na mesclagem ou no recongelamento, a reação aos eventos de ajuste depende do aplicativo. Mais precisamente, depende de cada um dos manipuladores de pontos de anexo, pois diferentes tipos de objetos podem reagir de maneira diferente. Normalmente, os objetos influenciados pelo ponto de anexo serão movidos pela transformação de ajuste por meio do GameObject.transform. Em vez disso, o movimento pode ser implementado por algum outro mecanismo, como mover os vértices manualmente. Pode até ser interessante para alguns aplicativos descartar os objetos afetados por uma mesclagem e iniciar um novo ciclo de criação.

A questão é que o World Locking Tools não depende de como ou se o aplicativo reage às operações de reajuste. Depende inteiramente das necessidades do desenvolvedor de aplicativos.

O mecanismo preferencial para notificação e reação a operações de reajuste é o ponto de anexo. Mais detalhes e opções serão discutidos neste artigo.

Confira também