Закрепления пространства
Проблемы, которые необходимо решить
Ошибка масштабирования
Хотя традиционный подход с пространственными привязками для выравнивания голограмм по признакам реального мира хорошо работает в небольшом масштабе, он начинает давать сбой при размерах больше метра или около того.
Ошибка масштабирования в пространстве отслеживания головы означает, что даже если пространственная привязка сохраняет один конец виртуального объекта размером всего несколько метров, идеально выровненный по признаку реального мира, другой конец с большой вероятностью будет смещен относительно соответствующего признака реального мира. Такое смещение вызвано тем, что расстояние, пройденное через пространство отслеживания головы, обычно отличается от расстояния, пройденного через физическое пространство, с пределом погрешности на уровне +-10 %. Фактическая погрешность часто меньше (она зависит от множества характеристик среды и устройства), но обычно все равно будет значительной и будет расти вместе с увеличением масштаба проекта.
Другими словами, если пользователь с HoloLens проходит 10 метров в реальном мире, средство отслеживания движений головы зафиксирует, что в виртуальном пространстве было пройдено расстояние от 9 до 11 метров. Если пользователь проходит 50 метров, погрешность увеличивается до +-5 метров. Чем большее расстояние проходит пользователь, тем больше погрешность.
Поэтому 10-метровый луч (в пространстве моделирования) с одним концом, идеально выровненным по нулю рулетки в реальном пространстве, зафиксирует другой конец рулетки где-то в пределах 9–11 метров.
По этим же причинам расстояние между разными объектами с фиксацией в мировой системе координат с помощью пространственных привязок в виртуальном пространстве будет отличаться от расстояния в реальном.
Произвольная система координат
Это еще один аспект. Система координат Unity в HoloLens недетерминантна. Она основывается исключительно на положении головы при запуске приложения.
Для большинства задач такая произвольность не является проблемой. Если цель заключается в испускании луча в пространственное сопоставление комнаты и размещении голограммы в точке попадания, числовые значения точки попадания не имеют значения.
Аналогично, при отображении элементов пользовательского интерфейса вокруг пользователя для размещения элементов пользовательского интерфейса важны только координаты относительно пользователя, а не абсолютные координаты.
Но сценарии с большим количеством взаимодействий могут быть усложнены непредсказуемой системой координат. Загрузка крупной коллекции объектов (например, рабочего стола пользователя или всей офисной комнаты) в виртуальное пространство с фиксированным отношением к физическом пространству требует некоего компенсирующего преобразования для выравнивания объектов пространства моделирования по системе координат на основе положения головы.
Такая компенсация часто выполняется путем прикрепления всех объектов к одному преобразованию Unity и изменения такого преобразования для размещения и ориентации виртуальных объектов в соответствии с реальным миром.
Аналогично, одно преобразование в иерархии камеры можно использовать для повторного выравнивания камеры таким образом, чтобы если пользователь видит точку отсчета в реальном мире, поверх такого признака отображался виртуальный объект с нужными координатами моделирования.
Решение
Функция пространственного закрепления позволяет устранить обе эти ошибки. Она использует как природу фиксированности в мировой системе координат глобального пространства World Locking Tools, так и его произвольность.
Выравнивание пространства Unity по реальному миру
Средства World Locking Tools предоставляют стабильную систему координат с фиксацией в мировой системе координат. Виртуальный объект, размещенный в пространстве с фиксацией в мировой системе координат и зарегистрированный за признаком реального мира, будет сохранять такую регистрацию с таким признаком.
Но такой цели удовлетворяет ограниченное количество пространств. Более того, при преобразовании одного пространства с фиксацией в мировой системе координат в любую произвольную позицию и поворот приводит к созданию допустимого пространства с фиксацией в мировой системе координат.
Функция пространственных маркеров использует еще одно ограничение, которое устраняет недетерминантную природу преобразования с фиксацией в мировой системе координат.
Такое ограничение заключается в том, что при "близости" к пространственному маркеру его положение в пространстве с фиксацией в мировой системе координат не будет отличаться от положения пространственного маркера в пространстве моделирования.
Рассмотрим куб в сцене Unity, смоделированный в глобальных координатах (0, 0, 1). Когда сцена загружается в HoloLens, куб отображается на расстоянии в 1 метр перед изначальным положением головы. В зависимости от изначального положения головы он может появиться в любой точке физической комнаты.
Пространственный маркер позволяет закрепить такой куб за признаком реального мира в комнате, например, за углом конкретного стола. В отличие от закрепления куба с помощью пространственной привязки, пространственный маркер перемещает все пространство Unity таким образом, чтобы куб был выровнен по углу стола. Поэтому, например, другие объекты на столе, смоделированные относительно куба в Unity, будут надлежащим образом размещены по реальному столу.
Устранение погрешности масштабирования
Хотя один пространственный маркер устраняет недетерминантность связи между виртуальной координатой и реальным пространством, он не устраняет погрешность масштабирования.
Это значит, что хотя он перемещает начальную точку в выравненную с по реальному миру позицию и ориентацию, передвижение на 10 метров в реальном мире может переместить пользователя всего на 9 метров в виртуальном пространстве.
Пространственные маркеры предоставляют полное решение для таких ситуаций. Когда пользователь приближается к определенному пространственному маркеру, мир будет выровнен по нему. Другие пространственные маркеры будут смещены, но так как они располагаются дальше, обычно это допустимо и часто незаметно.
По мере перемещения пользователя между пространственными маркерами плавная интерполяция минимизирует погрешность масштаба в конкретной точке пространства. При наличии достаточного количества пространственных маркеров в точках отсчета расхождение между признаками реального и виртуального миров сокращается до погрешности средства отслеживания головы.
Хотя требуемая плотность пространственных маркеров зависит от качества отслеживания, поддерживаемого средой и требований приложения к точности, мы предоставим некоторые числа для наглядности. В офисной среде с надлежащим освещением и видимыми признаками для отслеживания расположение пространственных маркеров на расстоянии в 10 метров сокращает погрешность с 10–20 см на 10 метров до миллиметров (макс. погрешность составляет 0,5 см, 0 см на конечных точках).
Сохраняемость
Функция пространственных маркеров работает вместе с другими возможностями сохраняемости World Locking Tools. Вам доступны как выполняемые вручную вызовы для запуска сохранения и загрузки из скрипта, так и флаги для автоматического сохранения и загрузки в сеансе.
Включенная функция AutoSave/AutoLoad в World Locking Tools Manager обеспечивает восстановление полного пространственного выравнивания виртуального мира относительно физического в последующих сеансах.
На практике сохраняемость означает, что вы можете использовать некоторое небольшое число предварительных сеансов для сканирования физической среды в необходимом объеме, а также для выравнивания такой физической среды по координатному пространству моделирования Unity. Последующие сеансы затем загружают виртуальную среду, корректно выровненную по реальному миру, без каких-либо действий со стороны пользователя.
Интерполяция и экстраполяция
Интерполяция и экстраполяция — это техники для оценки значений данных в случаях отсутствия непосредственных измерений. Как описано ранее, пространственные маркеры — это расположения, в которых были сделаны измерения. Виртуальные координаты — это нужные координаты, а физические координаты — это измеренные координаты, в которых должны появиться такие виртуальные координаты.
Система выполняет интерполяцию, но не экстраполяцию, как описано ниже. Как правило, интерполяция безопасней и более стабильна, чем экстраполяция. Предоставляемая фрагментарная линейная интерполяция позволяет удовлетворить большинство требований приложения. Экстраполяция менее безопасна, и ее идеальная реализация обычно требует хорошего знакомства с приложением. Поэтому выбор использования экстраполяции предоставляется самому приложению, как описано ниже.
Если приложение не добавляет маркеры экстраполяции, за границами маркеров пространство закрепляется исключительно по значению ближайшей границы. Если используется только два маркера, A и B, при перемещении пользователя от а A к B закрепление будет переходить от выравнивания, указанного A, к выравниванию, указанному B (интерполяция). Но если пользователь проходит B, закрепление фиксируется на выравнивании, указанном B (константное выражение).
Интерполяция
В двухмерном регионе между маркерами пространственная локализация интерполируется линейно. Если пространственные маркеры размещены точно и погрешность отслеживания равномерно распределена во всем регионе, корректировка, применяемая между пространственными маркерами, будет предельно точной.
Обращаем внимание, что предположение о равномерности распределения погрешностей не совсем точно. Но в качестве приближения линейная модель предоставляет отличные результаты корректировки.
Экстраполяция
Система не предоставляет встроенную службу экстраполяции, а использует расширение константных значений за рамками выпуклой оболочки пространственных маркеров. Такое приближение эквивалентно предположению (конечно же, неверному), что за рамками предоставленных приложением пространственных маркеров отсутствует погрешность масштабирования.
Но если приложение знает о распределении погрешностей или ему достаточно приблизительных значений, оно может создать любую нужную экстраполяцию, добавив больше пространственных маркеров на периферии.
Пример экстраполяции
Рассмотрим сцену с четырьмя пространственными маркерами, размещенными в квадрате с краями длиной 4 метра.
Теперь предположим, что реальное пространство, в котором будет перемещаться пользователь, будет иметь размеры 12 на 12 метров и иметь физические маркеры, соответствующие четырем маркерам, которые ограничивают центр пространства.
Если приложению достаточно приближения погрешности константы, у него будет вся необходимая информация для добавления четырех или более пространственных маркеров для охвата всего пространства размером 12x12 метров.
Мы пометим маркеры в углах квадрата размером 4x4 по сторонам света: NE (северо-восток), NW (северо-запад), SW (юго-запад) и SE (юго-восток). Мы также пометим виртуальные позиции на каждом virtualNE точки, физические позиции на каждом physicalNE точки и т. д.
Одна из стратегий заключается в добавлении внешних кардинальных точек с созданием квадрата размером 12 на 12 метров, окружающего внутренний квадрат: outerNE, outerNW, outerSW и outerSE. Виртуальные и физические позиции каждой из них легко рассчитать. Например, для outerNE:
virtualOuterNE = virtualNE + (virtualNE - virtualSW);
physicalOuterNE = physicalNE + (physicalNE - virtualSW);
Создание пространства экстраполяции размером 20x20 метров изменяет только масштаб примененной разницы:
scale = (outerSize - innerSize) / innerSize / 2;
virtualOuterNE = virtualNE + (virtualNE - virtualSW) * scale;
physicalOuterNE = physicalNE + (physicalNE - virtualSW) * scale;
Если outerSize имеет размер 20 метров, а innerSize — 4 метра, значение масштаба будет равняться 2.
Альтернативной стратегией может быть добавление восьми точек в дополнение к угловым, как показано ниже. Вычисление новых расположений маркеров из существующих выполняется так же, как приведено выше. Но учитывайте, что хотя добавление маркеров обычно повышает стабильность, оно не всегда улучшает точность.
Выравнивание подмножества сцены
Описанное здесь применяется к глобальному AlignmentManager, которым владеет и управляет WorldLockingManager.GetInstance(). Как описано выше, это приводит к закреплению всего глобального пространства координат Unity к физическим признакам в стратегических точках отсчета.
Но в некоторых случаях этот концепция применяется к подмножеству сцены.
Например, рассмотрим сценарий, в котором загружаются заметки для двух автомобилей. Точное размещение двух физических автомобилей нельзя узнать заранее, так как оно может отличаться в зависимости от планировки в разных дилерских центрах. Но после размещения одного физического автомобиля становятся известны позиции всех компонентных частей относительно такого положения.
В этом сценарии можно использовать пространственные маркеры, чтобы закрепить виртуальное шасси и заметки независимо для каждого автомобиля. Полное виртуальное представление каждого автомобиля можно настроить в Unity, а затем сопоставить с физическим автомобилем при выполнении. Такое выравнивание можно выполнить вручную с помощью UX MRTK, автоматически с помощью QR-кодов или посредством любой другой стратегии. Независимо от того, как определяются данные соответствия между виртуальными и физическими точкам отсчета, после их отправки в WLT через API пространственных маркеров WLT обеспечит визуально оптимизированное выравнивание виртуальных и физических объектов.
В случае с выравниваем глобального координатного пространства выравнивание выполняется путем манипуляций с узлом Adjustment (Корректировка) (обычно является родителем родителя камеры). Этот узел нужно зарезервировать для работы с WLT. Любые другие изменения такого преобразования приведут к неясному поведению.
Аналогично, при выравнивании поддерева выравнивание должно быть владельцем преобразования в (под)корне поддерева, в котором оно выполняется. Любые внешние изменения такого преобразования приведут к неясному поведению.
Перед закреплением независимых пространств они будут перемещены при закреплении глобального пространства. Но после закрепления независимого пространства оно считается прикрепленным к физическому миру, поэтому последующие изменения в закреплении глобального пространства к физическому миру не будут влиять на него.