Operazioni di refit

Le operazioni di refit in World Locking Tools sono quando il sistema determina che un riposizionamento di alcuni degli oggetti nella scena sarebbe meglio registrare tali oggetti con i loro ancoraggi del mondo fisico.

Questa sezione tenterà di fornire ulteriori informazioni sulle situazioni che comportano il refit operations e la meccanica delle operazioni stesse.

È importante sottolineare qui che le operazioni di refit si verificano raramente. Le tolleranze di errore predefinite che attivano un'operazione di rifreeze sono personalizzabili dall'applicazione, ma normalmente gli ambienti di realtà mista attivano nuovamente le operazioni solo in circostanze straordinarie. Le condizioni che potrebbero contribuire alla necessità di un rigelo includono:

  • Perdita di rilevamento a causa di un ambiente povero.
  • Spostamento rapido della testa che influenza l'analisi dell'ambiente.
  • Ambienti dinamici.
  • Chiusura ciclo (vale a dire accumulando errori di rilevamento su un percorso di rotatoria che porta a un punto visitato in precedenza).

La causa radice di questi problemi è scarsamente tracciata in altre parole, verificando gli errori. Con ambienti ragionevoli che producono un rilevamento ragionevole, e soprattutto dopo un'analisi iniziale dello spazio, le operazioni di refit diventano estremamente rare.

Unione di frammenti

Molte condizioni possono causare l'esistenza di più frammenti, la causa più comune è la perdita temporanea del rilevamento. I frammenti vengono definiti come raccolte di oggetti che condividono uno spazio di coordinate comune, ma dove lo spazio delle coordinate di un frammento è indeterminato rispetto a un altro frammento.

Quando vengono ricevuti nuovi dati del sensore sufficienti ed elaborati che il contenuto di due frammenti precedentemente non correlati può essere posizionato correttamente rispetto all'altro nello stesso spazio, è possibile eseguire un'unione di frammenti.

Il nuovo spazio di coordinate in cui verranno uniti i contenuti dei due frammenti (o più) è arbitrario. Citiamo qui che lo spazio delle coordinate finale sarà quello di uno degli spazi, che è rilevante solo perché significa che tutti i frammenti che vengono uniti tranne uno, il frammento di destinazione, dovranno regolare le coordinate. Il contenuto del frammento scelto come destinazione finale dell'unione non sarà influenzato.

Una trasformazione di regolazione viene calcolata dal sistema per ogni frammento di origine unito. L'oggetto AdjustLocationDelegate per ogni punto di allegato di tali frammenti verrà chiamato con la trasformazione di regolazione. Anche in questo caso, i punti di allegato nel frammento di destinazione non saranno interessati né i relativi chiamato AdjustLocationDelegates.

Le due camere connesse da uno scenario di corridoio scuro nella descrizione dei frammenti è un esempio di una situazione simile. Durante la fase iniziale, entrambi i frammenti (sale) sono stati analizzati, ma non sono disponibili informazioni sulle posizioni relative dei due frammenti. Quindi il sistema di coordinate in cui il contenuto di ogni frammento viene inserito è arbitrario, purché sia costante in tutti gli oggetti in tale stanza. Ad esempio, il contenuto di ogni stanza potrebbe trovarsi in un sistema di coordinate con la sua origine nell'angolo sud-ovest di tale stanza. Le coordinate di due oggetti nello stesso frammento indicano le posizioni dei due oggetti rispetto all'altra, ma le coordinate di due oggetti in due frammenti diversi non indicano nulla sulle loro posizioni relative.

Quando vengono acquisite altre informazioni, è possibile modificare le coordinate del contenuto del secondo frammento in modo che le coordinate del relativo contenuto siano significative rispetto agli oggetti nel primo frammento. Ad esempio, la luce del corridoio potrebbe essere attivata e il corridoio attraversato, sfruttando il divario tra i due frammenti. Se le coordinate di tutti gli oggetti in entrambe le stanze vengono regolate nello stesso spazio di coordinate coerenti, non esiste più alcuna distinzione reale tra i due frammenti e quindi il loro contenuto può essere considerato a tutti appartenere a un singolo frammento comune.

Questa operazione di compressione di più frammenti in un singolo frammento è un'operazione di unione.

È importante notare qui che per i normali oggetti Unity inseriti nella scena nello spazio bloccato del mondo, l'operazione di unione non avrà alcun effetto. Lo spostamento di oggetti dalle operazioni di refit avviene solo tramite punti allegati.

Rigelare le operazioni

Un'altra situazione che si verifica è quando le posizioni degli ancoraggi vengono affinate nel tempo. Diventa evidente che una trasformazione di rotazione/offset non è più adeguata per compensare la differenza tra le posizioni di ancoraggio approssimative iniziali e le posizioni più recenti migliorate nel mondo fisico. Tieni presente che gli ancoraggi stessi si spostano costantemente rispetto all'uno all'altro nello spazio spongy. Ma i punti di allegato derivati da questi ancoraggi sono fissi nello spazio bloccato del mondo.

Quando il sistema riconosce che i punti di allegato gestiti potrebbero essere registrati meglio con il mondo fisico a causa degli aggiornamenti delle posizioni di ancoraggio, quindi ha un'altra opportunità per un evento di correzione. Questa regolazione delle posizioni dei punti di allegato per riflettere i nuovi dati del sensore è nota come operazione di rigelazione. Mentre in un'operazione di unione il contenuto di un frammento viene modificato da una singola trasformazione per unire spazi di coordinate di due frammenti in un singolo spazio unificato, un rigelamento regola ogni punto di allegato singolarmente in base alle posizioni aggiornate degli ancoraggi che lo influenzano.

Come nell'operazione di unione, ogni punto allegato viene informato della trasformazione di regolazione calcolata tramite la relativa RegolaLocationDelegate.

Se le condizioni sono corrette, il refreeze potrebbe anche eseguire un'operazione di unione. Tale unione verrà considerata una parte implicita del rifreeze: non ci saranno eventi separati generati per l'unione e la trasformazione di regolazione recapitata come parte del rifreeze includerà entrambe le singole regolazioni a causa del movimento di ancoraggio e della regolazione del frammento a causa dell'unione.

Risposta agli eventi di refit

Nell'unione o nel rigelare la reazione agli eventi di refit è fino all'applicazione. Più precisamente, è fino a ognuno dei gestori dei punti di allegato, poiché diversi tipi di oggetti potrebbero reagire in modo diverso. In genere, gli oggetti influenzati dal punto di allegato verranno spostati dalla trasformazione di regolazione tramite gameObject.transform. Il movimento potrebbe essere invece implementato da un altro meccanismo, ad esempio lo spostamento manuale dei vertici. Potrebbe anche essere vantaggioso per alcune applicazioni eliminare oggetti interessati da un merge e iniziare un nuovo ciclo di creazione.

Il punto è che World Locking Tools non ha alcuna dipendenza da come o se l'applicazione reagisce alle operazioni di refit. È completamente in grado di soddisfare le esigenze dello sviluppatore dell'applicazione.

Il meccanismo preferito per la notifica e la reazione alle operazioni di refit è il punto allegato. Altri dettagli e opzioni sono illustrati in questo articolo.

Vedi anche