Operazioni di adattamento
Le operazioni di refit in World Locking Tools sono quando il sistema determina che una riposizionamento di alcuni oggetti nella scena migliorerebbe la registrazione di tali oggetti con i relativi ancoraggi del mondo fisico.
Questa sezione tenterà di fornire ulteriori informazioni sulle situazioni che portano a operazioni di rifitting e ai meccanismi 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 in genere gli ambienti di realtà mista attivano operazioni di riattivazione solo in circostanze straordinarie. Le condizioni che potrebbero contribuire alla necessità di un rigelo includono:
- Perdita di rilevamento a causa di un ambiente insodeguito.
- Movimento rapido della testa che influenza la scansione 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 principale di questi problemi è la scarsa verifica, ovvero il rilevamento degli errori. Con ambienti ragionevoli che producono ragionevolmente un buon tracciamento, e soprattutto dopo un'analisi iniziale dello spazio, le operazioni di refit diventeranno estremamente rare.
Unione di frammenti
Molte condizioni possono portare all'esistenza di più frammenti, la causa più comune è la perdita temporanea di rilevamento. I frammenti vengono definiti come raccolte di oggetti che condividono uno spazio di coordinate comune, ma in cui lo spazio delle coordinate di un frammento si trova in modo indeterminato rispetto a un altro frammento.
Quando vengono ricevuti e elaborati sufficienti nuovi dati del sensore che il contenuto di due frammenti non correlati in precedenza può essere posizionato correttamente l'uno rispetto all'altro nello stesso spazio, è possibile eseguire un'unione di frammenti.
Il nuovo spazio di coordinate in cui verrà unito il contenuto 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 da unire tranne uno, il frammento di destinazione, avranno bisogno delle loro coordinate regolate. Il contenuto del frammento scelto come destinazione finale dell'unione non sarà interessato.
Una trasformazione di regolazione viene calcolata dal sistema per ogni frammento di origine da unire. L'oggetto AdjustLocationDelegate per ogni punto di allegato in 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é verranno chiamati i relativi oggetti AdjustLocationDelegates.
Le due camere collegate da uno scenario di corridoio scuro nella descrizione dei frammenti è un esempio di una situazione di questo tipo. Durante la fase iniziale, entrambi i frammenti (stanze) sono stati analizzati, ma non sono disponibili informazioni sulle posizioni relative dei due frammenti. Il sistema di coordinate in cui viene inserito il contenuto di ogni frammento è 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 l'uno all'altro, ma le coordinate di due oggetti in due frammenti diversi non indicano nulla sulle rispettive posizioni relative.
Quando vengono acquisite altre informazioni, è possibile regolare 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 accesa e il corridoio attraversato, colmare il divario tra i due frammenti. Se le coordinate di tutti gli oggetti in entrambe le stanze vengono regolate in modo che si trovino nello stesso spazio di coordinate coerente, non esiste più alcuna distinzione reale tra i due frammenti e quindi il relativo contenuto può essere considerato tutti appartenente a un singolo frammento comune.
Questa operazione di compressione di più frammenti in un singolo frammento è un'operazione di unione.
È importante notare che per gli oggetti Unity normali posizionati nella scena nello spazio bloccato globale, l'operazione di unione non avrà alcun effetto. Lo spostamento di oggetti dalle operazioni di adattamento avviene solo tramite punti di allegato.
Ricongelare le operazioni
Un'altra situazione che si verifica è quando le posizioni degli ancoraggi vengono affinate nel tempo. Diventa evidente che una trasformazione rotazione/offset non è più adeguata per compensare la differenza tra le posizioni iniziali di ancoraggio approssimative e le posizioni più recenti migliorate nel mondo fisico. Tieni presente che gli ancoraggi stessi si spostano costantemente l'uno rispetto all'altro nello spazio spugnoso. Tuttavia, i punti di allegato derivati da questi ancoraggi sono fissi nello spazio bloccato del mondo.
Quando il sistema riconosce che gli allegati che gestisce potrebbero essere registrati meglio nel mondo fisico a causa degli aggiornamenti delle posizioni di ancoraggio, ha un'altra opportunità per un evento di correzione. Questa regolazione delle posizioni dei punti di collegamento per riflettere i nuovi dati del sensore è nota come operazione di rigelazione. Mentre in un'operazione di unione il contenuto di un frammento viene regolato da una singola trasformazione per unire gli spazi di coordinate di due frammenti in un unico spazio unificato, un rigelo 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 AdjustLocationDelegate.As in the merge operation, each attachment point is inform of its computed adjustment transform via its AdjustLocationDelegate.
Se le condizioni sono corrette, il rigelo potrebbe anche eseguire un'operazione di unione. Tale unione verrà considerata una parte implicita del rigelo: non ci saranno eventi separati generati per l'unione e la trasformazione di regolazione recapitata come parte del rigelo includerà sia la singola regolazione dovuta al movimento di ancoraggio che il frammento si regola a causa dell'unione.
Reazione agli eventi di refit
In caso di unione o di rigelazione, la reazione agli eventi di adattamento è fino all'applicazione. Più precisamente, spetta a ognuno dei gestori dei punti di collegamento, poiché i diversi tipi di oggetto potrebbero reagire in modo diverso. In genere, gli oggetti influenzati dal punto di collegamento verranno spostati dalla trasformazione di regolazione tramite gameObject.transform. Il movimento potrebbe invece essere implementato da un altro meccanismo, ad esempio lo spostamento manuale dei vertici. Potrebbe anche essere vantaggioso per alcune applicazioni eliminare gli oggetti interessati da un'unione e iniziare un nuovo ciclo di creazione.
Il punto è che Gli strumenti di blocco globale non hanno alcuna dipendenza da come o se l'applicazione reagisce alle operazioni di adattamento. Dipende interamente dalle esigenze dello sviluppatore di applicazioni.
Il meccanismo preferito per le notifiche e la reazione alle operazioni di adattamento è il punto allegato. Altri dettagli e opzioni sono descritti in questo articolo.