Partilhar via


Operações de reajuste

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

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

É importante frisar aqui que as operações de refit ocorrem com pouca frequência. As tolerâncias de erro padrão que acionam uma operação de recongelamento são personalizáveis pelo aplicativo, mas normalmente, ambientes de realidade mista acionam operações de recongelamento apenas em circunstâncias extraordinárias. As condições que podem contribuir para a necessidade de um novo congelamento incluem:

  • Perda de rastreamento devido ao mau ambiente.
  • Movimento rápido da cabeça influenciando a varredura do ambiente.
  • Ambientes dinâmicos.
  • Fechamento de loop (ou seja, acúmulo de erros de rastreamento em um caminho de rotatória que leva de volta a um local visitado anteriormente).

A causa raiz desses problemas é o mau rastreamento, ou seja, erros de rastreamento. Com ambientes razoáveis produzindo um rastreamento razoavelmente bom, e especialmente após uma varredura inicial do espaço, as operações de refit se tornarão extremamente raras.

Mesclagem de fragmentos

Muitas condições podem levar à existência de vários fragmentos, sendo a causa mais comum a perda temporária do rastreamento. 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á indeterminadamente localizado em relação a outro fragmento.

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

O novo espaço de coordenadas no qual 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 que estão sendo fundidos, exceto um, o fragmento de destino, precisarão de suas coordenadas ajustadas. O conteúdo do fragmento escolhido como destino final da mesclagem não será afetado.

Uma transformação de ajuste é calculada pelo sistema para cada um dos fragmentos de origem que estão sendo mesclados. O AdjustLocationDelegate para 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 seus AdjustLocationDelegates serão chamados.

As duas salas ligadas por um cenário de corredor escuro na descrição de fragmentos é um exemplo de uma dessas situações. Durante a fase inicial, ambos os fragmentos (salas) foram digitalizados, mas não há informações disponíveis sobre as posições relativas dos dois fragmentos. Assim, o sistema de coordenadas em que o conteúdo de cada fragmento é colocado é arbitrário, desde que seja constante em todos os objetos naquela 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, então 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, fazendo a ponte entre os dois fragmentos. Se as coordenadas de todos os objetos em ambas as salas são ajustadas para estarem no mesmo espaço de coordenadas consistentes, não há mais distinção real entre os dois fragmentos, e assim seu conteúdo pode ser considerado como pertencendo a um único fragmento comum.

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

É importante notar aqui que, para objetos Unity normais colocados na cena em espaço bloqueado pelo mundo, a operação de mesclagem não terá efeito. O movimento de objetos de operações de refit só acontece através de pontos de fixação.

Operações de recongelamento

Outra situação que surge é quando as posições das âncoras são refinadas ao longo do tempo. Torna-se evidente que uma transformada de rotação/deslocamento já não é adequada para compensar a diferença entre as posições iniciais de ancoragem rugosa e as posições melhoradas mais recentes no mundo físico. Tenha em mente que as próprias âncoras estão constantemente se movendo umas em relação às outras no espaço esponjoso. Mas os pontos de fixação derivados dessas âncoras são fixados no espaço bloqueado pelo mundo.

Quando o sistema reconhece que os pontos de conexão que gerencia poderiam ser melhor registrados no mundo físico por causa de atualizações nas posições de ancoragem, então ele tem outra oportunidade para um evento de correção. Este ajuste das posições do ponto de fixação para refletir os novos dados do sensor é conhecido como uma operação de recongelamento. Enquanto em uma operação de mesclagem o conteúdo de um fragmento é todo 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 fixação individualmente com base nas 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 de seu AdjustLocationDelegate.

Se as condições estiverem corretas, o recongelamento também pode executar uma operação de mesclagem. Essa fusão 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á tanto o ajuste individual devido ao movimento da âncora quanto o ajuste do fragmento devido à mesclagem.

Reagir a eventos de refit

Em mesclar ou recongelar, a reação aos eventos de refit cabe ao aplicativo. Mais precisamente, cabe a cada um dos manipuladores de ponto de anexo, já que diferentes tipos de objeto podem reagir de forma diferente. Normalmente, os objetos influenciados pelo ponto de fixação serão movidos pela transformação de ajuste por meio de seu GameObject.transform. Em vez disso, o movimento pode ser implementado por algum outro mecanismo, como vértices móveis manualmente. Pode até ser vantajoso para alguns aplicativos descartar 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 refit. Depende inteiramente das necessidades do desenvolvedor de aplicativos.

O mecanismo preferido para a notificação e reação às operações de refinanciamento é o ponto de anexo. Mais detalhes e opções são discutidos nesse artigo.

Consulte também