Поделиться через


Операции повторного сопоставления

Операции повторного сопоставления в World Locking Tools — это когда система определяет, что изменение расположения некоторых объектов в сцене обеспечит более точное сопоставление этих объектов к их привязкам в физическом мире.

В этом разделе будут более подробно рассмотрены ситуации, при которых выполняются операции повторного сопоставления, и механика самих операций.

Важно отметить, что операции повторного сопоставления происходят редко. По умолчанию погрешности, при которых активируется операция повторной заморозки, настраивается приложением, но обычно в средах смешанной реальности операции повторной заморозки выполняются только в исключительных случаях. Условия, которые могут повлиять на необходимость повторной заморозки, включают:

  • потеря отслеживания из-за неподходящего окружения;
  • быстрое перемещение головы влияет на сканирование окружения;
  • динамически меняющееся окружение;
  • замыкание цикла (то есть накопление ошибок отслеживания по окружному пути, ведущему к ранее посещенной точке).

Основной причиной этих проблем является плохое отслеживание — иными словами, ошибки отслеживания. В нормальных условиях отслеживание окружения выполняется достаточно хорошо. Особенно после первоначального сканирования пространства операции повторного сопоставления будут выполняться крайне редко.

Объединение фрагментов

Многие условия могут привести к возникновению нескольких фрагментов. Наиболее распространенной причиной является временная утрата отслеживания. Фрагменты определяются как коллекции объектов, совместно использующих общее пространство координат, но в котором расположение пространства координат одного фрагмента не определено относительно другого фрагмента.

Если получено достаточное количество новых данных датчиков и по результатам обработки определено, что содержимое двух ранее несвязанных фрагментов можно правильно позиционировать друг относительно друга в одном пространстве, можно выполнить объединение фрагментов.

Новое пространство координат, в которое будут объединено содержимое двух (или более) фрагментов, будет произвольным. Мы упомянули, что в качестве конечного пространства координат будет использоваться одно из пространств, что важно только в том отношении, что нужно будет скорректировать координаты всех объединяемые фрагментов, за исключением одного. Содержимое фрагмента, выбранное в качестве окончательной цели объединения, изменено не будет.

Преобразование корректировки вычисляет система для каждого объединяемого исходного фрагмента. Преобразование корректировки будет вызывать AdjustLocationDelegate для каждой точки привязки в этих фрагментах. Опять же, точки привязки в целевом фрагменте не затрагиваются, и их AdjustLocationDelegate вызываться не будет.

Одним из примеров одной такой ситуации являются две комнаты, соединенные темным коридором, в описании фрагментов. На начальном этапе были просмотрены оба фрагмента (комнаты), но сведений об относительном положении двух фрагментов нет. Поэтому система координат, в которой размещается содержимое каждого фрагмента, является произвольной, если она постоянна для всех объектов в этой комнате. Например, содержимое каждой комнаты может находиться в системе координат, начало которой находится юго-западном углу комнаты. Координаты двух объектов в одном фрагменте обозначают положения двух объектов друг относительно друга, но координаты двух объектов в двух разных фрагментах не указывают на их относительное положение.

При получении дополнительных сведений можно откорректировать координаты содержимого второго фрагмента таким образом, чтобы было известно, где находятся координаты его содержимого относительно объектов в первом фрагменте. Например, может быть включен свет в коридоре, после чего пользователь пройдет по нему, и разрыв между двумя фрагментами будет заполнен. Если координаты всех объектов в обеих комнатах откорректированы так, что они находятся в одном пространстве координат, то между двумя фрагментами не будет фактического различия, поэтому их содержимое можно рассматривать как относящееся к одному общему фрагменту.

Эта операция свертывания нескольких фрагментов в один фрагмент является операцией объединения.

Важно отметить, что для обычных объектов Unity, размещенных в сцене в пространстве, привязанном к мире, операция объединения не будет действовать. Перемещение объектов из операций повторного сопоставления происходит только через точки привязки.

Операции повторной заморозки

Другая ситуация возникает при уточнении положений привязок с течением времени. Очевидно, что преобразование "поворот/смещение" больше не подходит для компенсации различий между исходными приблизительными положениями привязок и более новыми уточненными положениями в физическом мире. Помните, что сами привязки постоянно перемещаются друг относительно друга в эластичном пространстве. Но точки привязки, полученные на основе этих привязок, фиксируются в пространстве, привязанном к миру.

Когда система распознает, что точки привязки, которыми она управляет, можно более точно зарегистрировать в физическом мире благодаря обновленным положениям привязок, у нее есть еще одна возможность для события исправления. Эта корректировка положений точек привязки отражает новые данные датчиков. Она называется операцией повторной заморозки. В то время как в операции объединения содержимое фрагмента корректируется одним преобразованием для объединения пространств координат двух фрагментов в единое пространство, повторная заморозка корректирует каждую точку привязки по отдельности на основе обновленных положений привязок, которые на нее влияют.

Как и в операции объединения, каждая точка привязки получает информацию о вычисленном преобразовании корректировки через ее AdjustLocationDelegate.

Если условия верны, повторная заморозка также может выполнить операцию объединения. Такое объединение будет рассматриваться как неявная часть повторной заморозки: для объединения не будут созданы отдельные события, а преобразование корректировки, предоставляемое как часть повторной заморозки, будет включать как индивидуальную корректировку из-за перемещения привязок, так и корректировки фрагмента в результате объединения.

Реагирование на события повторного сопоставления

При слиянии или повторной заморозке реакция на события повторного сопоставления зависит о приложения. Точнее, это зависит от обработчиков точек привязки, поскольку различные типы объектов могут реагировать по-разному. Как правило, объекты, влияющие на точку привязки, будут перемещены с помощью преобразования корректировки через их метод GameObject.transform. Вместо этого движение можно реализовать с помощью другого механизма, например перемещением вершин вручную. Для некоторых приложений может быть даже целесообразно отбросить объекты, затрагиваемые объединением, и начать новый цикл создания.

Смысл в том, что World Locking Tools не зависят от того, как или в каких случаях приложение реагирует на операции повторного сопоставления. Это полностью зависит от потребностей разработчика приложения.

Предпочтительным механизмом для уведомлений и реакции на операции повторного сопоставления является точка привязки. Дополнительные сведения и параметры обсуждаются в этой статье.

См. также