Share via


Vorgänge zum erneuten Anpassen

Neuanpassungsvorgänge treten in World Locking Tools auf, wenn das System feststellt, dass eine Neupositionierung einiger Objekte in der Szene diese Objekte besser bei ihren physischen Weltankern registrieren würde.

In diesem Abschnitt wird versucht, weitere Einblicke in die Situationen zu geben, die zu Neuanpassungsvorgängen führen, und in die Mechanismen der Vorgänge selbst.

Hier muss betont werden, dass Neuanpassungsvorgänge nur selten erfolgen. Die Standardfehlertoleranzen, die einen Vorgang des erneuten Fixierens auslösen, können von der Anwendung angepasst werden. Normalerweise lösen Mixed Reality-Umgebungen jedoch nur unter außergewöhnlichen Umstände Vorgänge des erneuten Fixierens aus. Zu den Bedingungen, die zur Notwendigkeit eines erneuten Fixierens beitragen können, gehören:

  • Verlust der Nachverfolgung aufgrund einer schlechten Umgebung.
  • Schnelle Bewegung des Kopfes, die die Umgebungsüberprüfung beeinflusst.
  • Dynamische Umgebungen.
  • Schleifenabschluss (d. h. Anhäufung von Nachverfolgungsfehlern auf einem Kreispfad, der zurück zu einem zuvor besuchten Ort führt).

Die Grundursache für diese Probleme ist eine schlechte Nachverfolgung, d. h. Nachverfolgungsfehler. Bei angemessenen Umgebungen, die eine ziemlich gute Nachverfolgung ermöglichen, und insbesondere nach einer ersten Überprüfung des Raums werden Neuanpassungsvorgänge sehr selten.

Fragmentzusammenführung

Viele Bedingungen können zum Vorhandensein mehrerer Fragmente führen. Die häufigste Ursache ist ein vorübergehender Verlust der Nachverfolgung. Fragmente werden als Sammlungen von Objekten definiert, die einen gemeinsamen Koordinatenraum nutzen, wobei der Koordinatenraum eines Fragments sich jedoch unbestimmt relativ zu einem anderen Fragment befindet.

Wenn genügend neue Sensordaten empfangen und verarbeitet werden, sodass die Inhalte von zwei zuvor nicht verknüpften Fragmenten im selben Raum relativ zueinander richtig positioniert werden können, kann eine Fragmentzusammenführung durchgeführt werden.

Der neue Koordinatenraum, in dem die Inhalte von zwei (oder mehr) Fragmenten zusammengeführt werden, ist willkürlich. Zu beachten ist, dass der letzte Koordinatenraum der eines der Räume sein wird. Dies ist nur relevant, weil es bedeutet, dass die Koordinaten aller zusammengeführten Fragmente außer einem, dem Zielfragment, angepasst werden müssen. Der Inhalt des Fragments, das als endgültiges Ziel der Zusammenführung ausgewählt wurde, ist davon nicht betroffen.

Eine Anpassungstransformation wird vom System für jedes der zusammengeführten Quellfragmente berechnet. AdjustLocationDelegate wird für jeden Anfügepunkt in diesen Fragmenten mit der Anpassungstransformation aufgerufen. Auch hier sind Anfügepunkte im Zielfragment nicht betroffen, und ihre AdjustLocationDelegates werden auch nicht aufgerufen.

Die beiden Räume, die durch ein dunkles Flurszenario in der Beschreibung von Fragmenten verbunden sind, sind ein Beispiel für eine solche Situation. Während der Anfangsphase wurden beide Fragmente (Räume) überprüft, aber es sind keine Informationen zu den relativen Positionen der beiden Fragmente verfügbar. Das Koordinatensystem, in dem der Inhalt jedes Fragments platziert ist, ist also willkürlich, solange es für alle Objekte in diesem Raum konstant ist. Beispielsweise kann sich der Inhalt jedes Raumes in einem Koordinatensystem befinden, dessen Ursprung sich in der Südwestecke dieses Raumes befindet. Die Koordinaten von zwei Objekten im selben Fragment geben die Positionen der beiden Objekte relativ zueinander an, aber die Koordinaten von zwei Objekten in zwei verschiedenen Fragmenten geben nichts über ihre relativen Positionen an.

Wenn weitere Informationen erfasst werden, besteht die Möglichkeit, die Koordinaten des Inhalts des zweiten Fragments so anzupassen, dass die Koordinaten seines Inhalts relativ zu Objekten im ersten Fragment aussagekräftig sind. Beispielsweise kann das Flurlicht eingeschaltet werden und der Flur durchlaufen werden, um die Lücke zwischen den beiden Fragmenten zu schließen. Wenn die Koordinaten aller Objekte in beiden Räumen so angepasst werden, dass sie sich im selben konsistenten Koordinatenraum befinden, gibt es keinen tatsächlichen Unterschied mehr zwischen den beiden Fragmenten, sodass deren Inhalte als zu einem einzelnen gemeinsamen Fragment gehörend betrachtet werden können.

Dieser Vorgang, bei dem mehrere Fragmente zu einem einzelnen Fragment reduziert werden, ist ein Zusammenführungsvorgang.

Beachten Sie hierbei, dass der Zusammenführungsvorgang für normale Unity-Objekte, die in der Szene im weltgebundenen Raum platziert werden, keine Auswirkungen hat. Das Bewegen von Objekten aus Neuanpassungsvorgängen heraus erfolgt nur über Anfügepunkte.

Vorgängen des erneuten Fixierens

Eine weitere Situation, die auftritt, ist, dass die Positionen der Anker im Laufe der Zeit optimiert werden. Es wird deutlich, dass eine Drehungs-/Offsettransformation nicht mehr ausreicht, um den Unterschied zwischen den anfänglichen groben Ankerpositionen und den neueren verbesserten Positionen in der physischen Welt zu kompensieren. Beachten Sie, dass sich die Anker selbst im Spongy-Raum ständig relativ zueinander bewegen. Die von diesen Ankern abgeleiteten Anfügepunkte sind jedoch im weltgebundenen Raum fixiert.

Wenn das System erkennt, dass die von ihm verwalteten Anfügepunkte aufgrund von Aktualisierungen der Ankerpositionen besser bei der physischen Welt registriert werden könnten, hat es eine weitere Möglichkeit für ein Korrekturereignis. Diese Anpassung der Anfügepunktpositionen, um neue Sensordaten widerzuspiegeln, wird als Vorgang des erneuten Fixierens bezeichnet. Während bei einem Zusammenführungsvorgang der Inhalt eines Fragments durch eine einzelne Transformation angepasst wird, um Koordinatenräume von zwei Fragmenten in einem einzelnen einheitlichen Raum zusammenzuführen, passt ein erneutes Fixieren jeden Anfügepunkt einzeln basierend auf den aktualisierten Positionen der Anker an, die ihn beeinflussen.

Wie beim Zusammenführungsvorgang wird jeder Anfügepunkt per AdjustLocationDelegate über seine berechnete Anpassungstransformation informiert.

Wenn die Bedingungen stimmen, führt das erneute Fixieren möglicherweise auch einen Zusammenführungsvorgang aus. Diese Zusammenführung wird als impliziter Teil des erneuten Fixierens betrachtet: Es werden keine separaten Ereignisse für die Zusammenführung generiert, und die Anpassungstransformation, die als Teil des erneuten Fixierens bereitgestellt wird, umfasst sowohl die individuelle Anpassung aufgrund der Ankerbewegung als auch die Anpassung des Fragments aufgrund der Zusammenführung.

Reagieren auf Neuanpassungsereignisse

Beim Zusammenführen oder erneuten Fixieren liegt die Reaktion auf die Neuanpassungsereignisse bei der Anwendung. Genauer gesagt liegt es an jedem der Anfügepunkthandler, da verschiedene Objekttypen unterschiedlich reagieren können. In der Regel werden die vom Anfügepunkt beeinflussten Objekte durch die Anpassungstransformation über GameObject.transform verschoben. Bewegung kann stattdessen durch einen anderen Mechanismus implementiert werden, z. B. manuelles Verschieben von Scheitelpunkten. Es kann sogar für einige Anwendungen vorteilhaft sein, Objekte zu verwerfen, die von einer Zusammenführung betroffen sind, und einen neuen Erstellungszyklus zu starten.

Der Punkt ist, dass World Locking Tools nicht davon abhängig ist, wie oder ob die Anwendung auf Neuanpassungsvorgänge reagiert. Dies richtet sich vollständig nach den Anforderungen des Anwendungsentwicklers.

Der bevorzugte Mechanismus für die Benachrichtigung über Neuanpassungsvorgänge und die Reaktion darauf ist der Anfügepunkt. Weitere Details und Optionen werden in diesem Artikel erläutert.

Weitere Informationen