Пространственные привязки

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

Вы также можете сохранять пространственные привязки и совместно использовать их в сеансах приложения и на разных устройствах:

  • Сохраняя локальные пространственные привязки на диск и загружая их позже, приложение может вычислить одинаковое расположение в реальном мире в нескольких сеансах приложения на одном HoloLens.
  • Используя пространственные привязки Azure для создания облачной привязки, приложение может совместно использовать пространственные привязки на нескольких устройствах HoloLens, iOS и Android. Благодаря тому, что каждое устройство отрисовывает голограмму с помощью одной и той же пространственной привязки, пользователи увидят, что голограмма отображается в том же месте в реальном мире. Это позволяет обмениваться опытом в режиме реального времени.
  • Пространственные привязки Azure также можно использовать для асинхронной сохраняемости голограмм на устройствах HoloLens, iOS и Android. Благодаря совместному использованию устойчивой облачной пространственной привязки несколько устройств могут наблюдать одну и ту же голограмму с течением времени, даже если эти устройства присутствуют не одновременно.

Для работы с настольными гарнитурами в вертикальном масштабе или в помещении, которые будут оставаться в пределах 5-метрового диаметра, обычно можно использовать промежуточную систему отсчета вместо пространственных привязок, которая предоставляет единую систему координат, в которой отрисовывается все содержимое. Тем не менее, если приложение позволяет пользователям бродить по HoloLens за пределы 5 метров, возможно, работая на всем этаже здания, вам потребуются пространственные привязки, чтобы обеспечить стабильность содержимого.

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

Рекомендации

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

Создание пространственных привязок, размещаемых пользователями

Как правило, пользователи — это пользователи, которые явно размещают пространственные привязки.

Например, в HoloLens приложение может пересекать луч взгляда пользователя с сеткой пространственного сопоставления , чтобы пользователь решил, где разместить голограмму. Когда пользователь нажимает, чтобы разместить голограмму, создайте пространственную привязку в точке пересечения, а затем поместите голограмму в начало системы координат этой привязки.

Локальные пространственные привязки легко создавать. Система объединяет внутренние данные, если несколько привязок могут совместно использовать свои базовые данные датчика. Рекомендуется создать новую локальную пространственную привязку для каждой голограммы, которую пользователь явно помещает, за исключением случаев, описанных ниже, например жестких групп голограмм.

Всегда отображайте закрепленные голограммы в пределах 3 метров от их привязки

Пространственные привязки стабилизируют свою систему координат возле источника привязки. Если вы отрисовываете голограммы на расстоянии более 3 метров от источника, в голограммах могут возникать заметные позиционные ошибки пропорционально расстоянию от этого источника из-за эффектов рычага. Это работает, если пользователь находится рядом с привязкой, так как голограмма тоже находится далеко от пользователя. Другими словами, угловая погрешность удаленной голограммы будет небольшой. Тем не менее, если пользователь поднимется к этой далекой голограмме, она будет большой, по его мнению, что делает эффекты рычага рук из далекого источника якоря очевидным.

Групповые голограммы, которые должны образовывать жесткий кластер

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

Например, если вы анимируете голографическую солнечную систему в комнате, лучше привязать все объекты Солнечной системы к одному якорю в центре. Таким образом, они будут двигаться гладко, основываясь друг на друге. В этом случае якорная солнечная система в целом, несмотря на то, что ее составные части динамически перемещаются вокруг привязки.

Ключевым предостережением для поддержания стабильности голограммы является соблюдение 3-метрового правила, приведенного выше.

Отрисовка высокодинамичных голограмм с использованием стационарной системы отсчета вместо локальной пространственной привязки

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

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

Если вы совместно используете высокодинамичную голограмму на разных устройствах, выберите облачную пространственную привязку, чтобы выступать в качестве родительской, так как стационарные опорные кадры нельзя совместно использовать на разных устройствах. Однако следует убедиться, что динамическая голограмма или устройства, которые ее просматривают, остаются в пределах 3-метрового радиуса привязки, чтобы голограмма выглядела стабильной на всех устройствах.

Не следует создавать сетку пространственных привязок

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

Удаляйте пространственные привязки, которые больше не нужны

В то время как локальная пространственная привязка активна, система отдает приоритет данным датчика, которые находятся рядом с этой привязкой. Если вы больше не используете пространственную привязку, прекратите доступ к ее системе координат. Это позволяет удалять базовые данные датчика по мере необходимости.

Это особенно важно для локальных привязок, сохраненных в хранилище пространственных привязок. Данные датчиков, стоящие за этими привязками, будут храниться на постоянной основе, чтобы позволить приложению находить эту привязку в будущих сеансах, что сокращает пространство, доступное для отслеживания других привязок. Сохраняйте только локальные привязки, которые необходимо найти в будущих сеансах. Рекомендуется удалять их из хранилища, если они больше не имеют смысла для пользователя.

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

См. также раздел