Punti allegati

Prima di tutto, World Locking Tools offre un sistema di coordinate a blocco mondiale stabile: lo spazio bloccato al mondo. Questo spazio rimane il più fisso possibile rispetto al mondo fisico. E gli oggetti all'interno dello spazio bloccato al mondo godono di funzionalità che richiedono un frame di riferimento così stabile, ad esempio mantenendo la posizione relativa ad altri oggetti virtuali, la simulazione di leggi fisiche naturali, kinematics e altre tecniche di animazione.

In effetti, a seconda delle esigenze dell'applicazione, lo spazio bloccato del mondo può essere sufficiente per alcuni o tutti i contenuti della scena.

Ma mentre lo spazio bloccato del mondo rimarrà allineato in modo ottimale allo spazio fisico, ci sono situazioni da descrivere più avanti in cui non è possibile che più punti nello spazio bloccato del mondo rimangano entrambi fissi nello spazio di coordinate comune e fissi rispetto ai punti di riferimento nel mondo fisico.

Per un esempio semplice ma illuminante, si supponga che il sensore mappa un ancoraggio alla posizione (3.0.0) e un altro alla posizione (-3.0.0). In seguito, man mano che vengono elaborati i miglioramenti dei sensori, viene stabilito che le due coordinate dovrebbero essere state (3.0.0) e (-2.0.0). Non c'è chiaramente alcuna rotazione e offset che può essere applicato alla fotocamera che trasformerà una distanza di sei metri tra i due ancoraggi in un offset di cinque metri.

Usando il sistema di ancoraggio spaziale di Unity, i due ancoraggi si spostano in modo silenzioso nelle loro posizioni appena analizzate.

Ma Gli strumenti di blocco mondiale garantiscono che nello spazio bloccato in tutto il mondo, gli oggetti non spostati "principalmente" non si spostano mai. E infatti, qualsiasi movimento è fino all'applicazione proprietaria.

Un'altra condizione "anomalia" comune è la perdita di rilevamento. Quando il rilevamento viene perso in un ambiente (ad esempio, sala) e recuperato in un altro ambiente, quindi per prima cosa non sono presenti informazioni che collegano i due spazi. Le coordinate in uno spazio sono senza significato relative alle coordinate nell'altro spazio. Il paradigma del punto di allegato consente all'applicazione di gestire correttamente la fase iniziale quando le informazioni spaziali sullo spazio precedente sono sconosciute ,ad esempio nascondendo gli oggetti in tale spazio precedente, nonché recuperando quando la relazione spaziale tra i due spazi diventa nota.

Altre discussioni sono disponibili in queste condizioni speciali e le operazioni di refit che il WLT esegue per gestirle. La discussione è incentrata sul contratto tra WLT e l'applicazione per risolvere senza problemi tali condizioni.

I punti di allegato sono la codificazione del contratto tra Gli strumenti di blocco mondiale e l'applicazione. Un'applicazione crea e posiziona i punti allegati usando le API degli strumenti di blocco mondiale. Quando una correzione nella posizione di un punto di allegato viene determinata da un'operazione di refit, l'applicazione viene notificata tramite callback della nuova posizione nello spazio bloccato del mondo che mantiene il punto di allegato alla sua posizione precedente nello spazio fisico.

Alcuni scenari in cui i punti di allegato degli strumenti di blocco mondiale potrebbero essere la soluzione:

  • È più importante rimanere fissi rispetto alle funzionalità nel mondo fisico rispetto ad altri oggetti virtuali.
  • Gli oggetti vengono inseriti nel mondo in fase di esecuzione anziché in Unity in fase di progettazione e possono essere importanti per riconciliare le posizioni relative separate dalle interruzioni nel rilevamento (vedere la discussione dei frammenti).
  • È importante gestire la visibilità di un oggetto in base alla validità del posizionamento dello spazio fisico.

Uso dei punti allegati

L'uso di punti allegati è abbastanza semplice.

Responsabilità dei clienti

Per ogni punto di allegato necessario, il client deve:

  1. Richiedere punti di allegato dal sistema. Vedere CreateAttachmentPoint
  2. Eliminare i punti allegati che non sono più necessari. Vedere ReleaseAttachmentPoint
  3. Apprise il sistema della posizione iniziale e dello spostamento del punto allegato. Vedere CreateAttachmentPoint, MoveAttachmentPoint e TeleportAttachmentPoint
  4. Gestire gli eventi dell'operazione di refit. Vedere qui di seguito.

Responsabilità degli strumenti di blocco mondiale

Gli strumenti di blocco mondiale notificano all'applicazione, per ogni punto di allegato interessato, quando si verifica una delle seguenti operazioni:

  1. La validità delle modifiche del mondo fisico del punto allegato.
  2. Le coordinate dello spazio bloccato nel mondo cambiano a causa di un'operazione di refit, che può essere un merge di frammento o un rigelo.

Queste notifiche vengono trasmesse tramite delegati che l'applicazione passa al WorldLockingManager sulla creazione del punto di allegato.

Come gestire al meglio queste notifiche viene lasciata all'applicazione, in quanto ognuna avrà le proprie considerazioni. Vengono forniti gestori di esempio che vengono usati internamente e che possono essere usati come punto di partenza per le implementazioni personalizzate.

Implementazioni di esempio

Per un punto di allegato che rimane fisso nel mondo fisico e che deve nascondere il contenuto quando il relativo rilevamento non è valido, AdjusterFixed implementa l'oggetto AdjustStateDelegate con il relativo membro HandleAdjustState e il membro AdjustLocationDelegate con il relativo membro HandleAdjustLocationLocation. Un componente simile per lo spostamento di oggetti è in AdjusterMoving.

Vale la pena notare che la fornitura di o entrambi questi delegati è facoltativa e, in effetti, le reazioni allo stato e alle modifiche alla posizione possono essere implementate in base al polling anziché agli eventi. Ma a meno che l'uso non sia impossibile a causa di specifiche dell'applicazione, il sistema basato su eventi usando delegati forma un'implementazione molto più efficiente.

È consigliabile iniziare con il componente AdjusterFixed (o molto simile a AdjusterMoving) e modificare i gestori HandleAdjustLocation e HandleAdjustState in base alle esigenze delle applicazioni.

Vedi anche