пространственное сопоставление

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


Устройство поддерживает

Компонент HoloLens (1-го поколения) HoloLens 2 Иммерсивные гарнитуры
пространственное сопоставление ✔️ ✔️

Зачем важны пространственное сопоставление?

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

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

Общие сведения

Поверхности сетки, охватывающие комнату
Пример сетки пространственного сопоставления, охватывающей комнату

Для пространственного сопоставления используются два типа основных объекта: "наблюдатель поверхности" и "пространственный Surface".

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

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

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

Демонстрация принципов проектирования пространственных сведений

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

Это видео из приложения Designing Holograms для HoloLens 2. Скачайте и воспользуйтесь всеми его возможностями здесь.

Пространственное сопоставление и сцены общие сведения о Ворлдмеш

для HoloLens 2 можно запросить статическую версию данных пространственного сопоставления с помощью сцены "пакет SDK " (параметр енаблеворлдмеш). Ниже приведены различия между двумя способами доступа к данным пространственного сопоставления.

  • API-интерфейс пространственного сопоставления:
    • Ограниченный диапазон: данные пространственного сопоставления доступны приложениям в кэшированном "пузырьке" с ограниченным размером, чем пользователь.
    • Предоставляет обновления с низкой задержкой для измененных областей сетки с помощью событий Сурфацесчанжед.
    • Уровень детализации сведений, управляемых треугольниками на параметр метра третьего уровня.
  • Пакет SDK для понимания сцены:
    • Неограниченный диапазон — предоставляет все просканированные данные пространственного сопоставления в запросе RADIUS.
    • Предоставляет статический моментальный снимок данных пространственного сопоставления. Для получения обновленных данных пространственного сопоставления необходимо запустить новый запрос для всей сетки.
    • Последовательный уровень детализации, управляемый параметром Рекуестедмешлевелофдетаил.

Что влияет на качество пространственного сопоставления?

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

Основные сценарии использования

Иллюстрации распространенных сценариев использования пространственного сопоставления: размещение, перекрытия, физика и Навигация

Размещение

Пространственное сопоставление предоставляет приложениям возможность представлять естественные и привычные формы взаимодействия с пользователем. что может быть более естественным, чем размещение телефона на столе?

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

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

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

В свою сторону ввод данных пользователем можно полностью упростить, а пространственные поверхности можно использовать для полного автоматического размещения голограмм. Например, приложение может разместить holographic-выключатель в другом месте на стене, чтобы пользователь мог нажать. Те же предостережения о предсказуемости применяются вдвое. Если пользователь ждет управления размещением с голограммами, но приложение не всегда помещает голограммы там, где они предполагают (если светло-выключатель находится в другом месте, к которому пользователь не может достичь), это будет неприятной опыт. Это может быть хуже для автоматического размещения, требующего коррекции пользователя в определенный момент времени, чем просто потребовать от пользователя всегда выполнять самостоятельное размещение. так как предполагается успешное автоматическое размещение, ручное исправление вроде накладных расходов.

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

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

Загораживание

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

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

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

Иногда перекрытия голограммы нежелательны. Если пользователь должен взаимодействовать с голограммой, он должен увидеть его, даже если он находится за реальной поверхностью. В таких случаях, как правило, имеет смысл визуализировать такую голограмму по-разному, если это перекрыто (например, путем уменьшения яркости). Таким образом, пользователь может визуально разыскать голограмму, но он по-прежнему знает, что он находится позади чего-нибудь.

Физика

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

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

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

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

Приложения могут использовать данные пространственного сопоставления, чтобы предоставить holographic (или агентам) возможность перемещаться по реальному миру таким же образом, как и реальный человек. Это может помочь в улучшении наличия holographic символов, запретив их одному и тому же набору естественных, привычных вариантов поведения пользователя и их друзей.

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

Основные технические проблемы, связанные с реализацией функций навигации, будут надежно обнаруживать поверхности неанализируемой (люди не проходят по таблицам!) и корректно адаптации к изменениям в среде (люди не проходят через замкнутые двери). Для сети может потребоваться определенная Обработка , прежде чем ее можно будет использовать для планирования пути и перехода по виртуальному символу. Смягчение сетки и удаление халлуЦинатионс могут помочь избежать зависания символов. Вы также можете значительно упростить эту сетку, чтобы ускорить вычисление пути и вычислений навигации. Эти трудности приступили к разработку технологии видеоигр, и в этих статьях есть множество доступных справочных материалов.

Встроенные функции Навмеш в Unity нельзя использовать с областями пространственного сопоставления. Это связано с тем, что поверхности пространственного сопоставления не известны до запуска приложения, но Навмеш файлы данных должны создаваться из исходных ресурсов заранее. Также обратите внимание, что система пространственных сопоставлений не будет предоставлять сведения о поверхностях далеко от текущего расположения пользователя. Поэтому приложение должно «запомнить» поверхности, если нужно создать карту большой области.

Визуализация

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

Например, когда пользователь пытается поместить голограмму на поверхность (поместив в нее файл holographic, скажем), это может быть полезно для «заземления» голограммы путем приведения тени к поверхности. Это дает пользователю более четкое представление о точном физическом сходстве между голограммой и поверхностью. Это также пример более общего способа визуального просмотра изменений до того, как пользователь зафиксирует в нем.

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

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

Сетки Surface, предоставляемые пространственным сопоставлением, могут быть не в частности "чистыми". Очень важно визуализировать их соответствующим образом. Традиционные вычисления освещения могут выделять ошибки в нормалях в области визуального отприятного изображения, а «чистые» текстуры, проецированные на поверхность, могут помочь придать ей аккуратная внешний вид. Можно также выполнить обработку сетки , чтобы улучшить свойства сетки перед отрисовкой поверхностей.

Примечание

HoloLens 2 реализует новую сцену для понимания среды выполнения, которая предоставляет разработчикам смешанной реальности доступ к структурированному, высокоуровневой представлению среды, предназначенному для упрощения реализации размещения, перекрытия, физикы и навигации.

Использование наблюдателя Surface

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

  • Создание объекта наблюдателя Surface
    • Укажите один или несколько пространственных томов, чтобы определить интересующие Вас регионы, в которых приложение хочет получить данные пространственного сопоставления. Пространственный том — это просто фигура, определяющая область пространства, например сферу или поле.
    • Используйте пространственный том с заблокированной мировой системой координат, чтобы указать фиксированную область физического мира.
    • Используйте пространственный том, изменяя каждый кадр с помощью системы пространственных координат, заблокированной телом, чтобы указать область пространства, которая перемещается (но не вращается) пользователем.
    • Эти пространственные тома могут быть изменены позже в любое время, по мере изменения состояния приложения или пользователя.
  • Использование опроса или уведомления для получения сведений о пространственных поверхностях
    • Вы можете опросить наблюдатель Surface в любое время, чтобы получить состояние пространственной поверхности. Вместо этого вы можете зарегистрироваться для события Change Surfaces наблюдателя, которое будет уведомлять приложение при изменении пространственных поверхностей.
    • Для динамического пространственного тома, такого как View фрустум, или тома с блокировкой текста, приложения должны опрашивать изменения каждого кадра, задавая интересующую область, а затем получая текущий набор пространственных поверхностей.
    • Для статического тома, например Куба, охватывающего одну комнату, приложения могут зарегистрироваться для события Changed (поверхности), чтобы получать уведомления при изменении пространственных поверхностей внутри этого тома.
  • Изменения поверхности процесса
    • Выполните итерацию указанного набора пространственных поверхностей.
    • Классификация пространственных поверхностей как добавленных, измененных или удаленных.
    • Для каждой добавленной или измененной пространственной поверхности при необходимости отправьте асинхронный запрос на получение обновленной сетки, представляющей текущее состояние поверхности, на нужном уровне детализации.
  • Обработайте асинхронный запрос сетки (Дополнительные сведения см. в следующих разделах).

Кэширование сетки

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

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

При интерпретации события Changed, предоставленного наблюдателем Surface, логика базового кэширования сетки выглядит следующим образом:

  • Если приложение видит идентификатор пространственной поверхности, который ранее не встречался, он должен рассматривать его как новую пространственное пространство.
  • Если приложение видит пространственной контакт с известным ИДЕНТИФИКАТОРом, но с новым временем обновления, оно должно рассматриваться как обновленная пространственное поверхность.
  • Если приложение больше не видит пространственной поверхности с известным ИДЕНТИФИКАТОРом, оно должно рассматривать его как удаленную пространственное поверхность.

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

  • Следует ли запрашивать сетку для новых пространственных поверхностей?
    • Обычно сетка должна запрашиваться немедленно для новых пространственных поверхностей, что может предоставить пользователю полезные новые сведения.
    • Однако новые пространственные области, расположенные рядом с пользователем и перед ними, должны иметь приоритет, и их сеть должна быть запрошена первыми.
    • Если новая сетка не нужна, то если, например, приложение постоянно или временно заблокировало свою модель среды, оно не должно запрашиваться.
  • Для обновленных пространственных поверхностей следует запрашивать сетку?
    • Перед обновленными пространственными областями рядом с пользователем должен быть указан приоритет, и их сеть должна быть запрошена первыми.
    • Также может быть целесообразно повысить приоритет для новых поверхностей, чем для обновленных поверхностей, особенно во время сканирования.
    • Чтобы ограничить затраты на обработку, приложениям может потребоваться регулировать скорость обработки обновлений на пространственные поверхности.
    • Можно определить, что изменения в пространственной поверхности являются небольшими, например если границы поверхности невелики, в этом случае обновление может быть недостаточно важным для обработки.
    • Обновления пространственных поверхностей за пределами текущего интересующего вас региона пользователя могут игнорироваться полностью, хотя в этом случае может быть более эффективным изменение пространственных ограничивающих томов, используемых наблюдателем Surface.
  • Для удаленных пространственных поверхностей следует ли отменять сетку?
    • Обычно сетка следует отменять немедленно для удаленных пространственных поверхностей, чтобы перекрытияная голограмма оставалась правильной.
    • Тем не менее, если в приложении есть основания предполагать, что в ближайшее время будет появляться пространственное пространство (в зависимости от структуры взаимодействия с пользователем), это может оказаться более эффективным, чем отбросить ее и повторно создать позже.
    • Если приложение создает крупномасштабную модель среды пользователя, то, возможно, не хотите вообще отбросить все сетки. Тем не менее потребуется ограничить использование ресурсов, но, возможно, путем буферизации сеток на диск, так как пространственные поверхности исчезают.
    • Некоторые сравнительно редкие события во время создания пространственной поверхности могут привести к замене пространственных поверхностей новыми пространственными областями в аналогичном расположении, но с разными идентификаторами. Таким образом, приложения, которые не удаляют удаленную поверхность, должны отказаться от использования нескольких перекрывающихся сеток пространственных поверхностей, охватывающих одно и то же расположение.
  • Следует ли отменять сетку для других пространственных поверхностей?
    • Даже при наличии пространственной поверхности, если она больше не полезна для работы пользователя, она должна быть отклонена. Например, если приложение "заменяет" комнату на другой стороне двери с альтернативным виртуальным пространством, пространственные поверхности в этой комнате больше не важны.

Ниже приведен пример стратегии кэширования сетки с использованием пространственного и временного гистерезиса.

  • Рассмотрим приложение, желающее использовать фрустумый пространственный том в форме, который следует за взглядом пользователя по мере того, как они выглядят и обходится.
  • Пространственный Surface может быть временно удалена из этого тома, просто потому, что пользователь выходит за пределы поверхности или с него... только для обратного просмотра или перехода чуть позже. В этом случае отмена и повторное создание сетки для этой поверхности представляет множество избыточных процессов.
  • Чтобы сократить число обработанных изменений, приложение использует две пространственные наблюдатели, которые находятся внутри другого. Больший объем представляет собой сферу, который следует за неактивностью пользователя. он перемещается только при необходимости, чтобы гарантировать, что его центр находится в пределах 2,0 метров пользователя.
  • Новые и обновленные сетки пространственных поверхностей всегда обрабатываются с помощью меньшего внутреннего наблюдателя поверхности, но сетки кэшируются до тех пор, пока они не исчезнут из большего внешнего наблюдателя поверхности. Это позволяет приложению избежать обработки большого количества избыточных изменений из-за перемещения локальных пользователей.
  • Так как пространственное пространство может также исчезнуть временно из-за потери данных отслеживания, приложение также откладывает отмену удаленных пространственных поверхностей во время отслеживания потерь.
  • Как правило, приложение должно оценивать компромисс между сокращением обработки обновлений и увеличением объема используемой памяти для определения идеальной стратегии кэширования.

Отрисовка

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

  • Для визуализации поверхности
    • Часто бывает удобно визуализировать пространственные поверхности напрямую. Например, приведение "Shadows" от объектов к пространственным областям может предоставить пользователю полезные визуальные отзывы, когда они помещают на поверхности самые голограммы.
    • Следует помнить, что пространственные сети отличаются от типов сеток, которые может создать трехмерный исполнитель. Топология треугольника не будет "чистым" в качестве топологии, созданной человеком, и сеть будет испытывать различные ошибки.
    • Чтобы создать привлекательный визуальный Aesthetic, вам может потребоваться выполнить некоторую обработку сетки, например, чтобы заполнить отверстия или плавные нормали к поверхности. Вы также можете использовать шейдер для проецирования в сеть текстур, разработанных на основе исполнителя, а не напрямую визуализировать топологию сетки и нормали.
  • Для окклудингной голограммы за реальными областями
    • Пространственные поверхности можно подготавливать к просмотру только по глубине, что влияет только на буфер глубины и не влияет на целевые объекты рендеринга цвета.
    • Это окклуде буфер глубины для последующего отображения голограмм, расположенных за пространственными областями. Точная перекрытияа голограмм повышает смысл того, что голограммы действительно существуют в физическом пространстве пользователя.
    • Чтобы включить визуализацию только по глубине, обновите состояние смешения, чтобы установить рендертаржетвритемаск в значение 0 для всех целевых объектов рендеринга цвета.
  • Изменение внешнего вида голограмм, перекрыто на реальных поверхностях
    • Обычно визуализированная геометрия скрыта, когда она перекрыто. Это достигается путем установки функции глубины в состоянии шаблона глубины в значение "меньше или равно", что приводит к тому, что геометрия будет видна только в том месте, где она находится ближе к камере, чем у всех ранее визуализированных геометрических объектов.
    • Однако может оказаться полезным, чтобы определенный геометрический объект оставался видимым даже в том случае, если он перекрыто, и изменить его внешний вид при перекрыто как способ предоставления визуальной обратной связи с пользователем. Например, это позволяет приложению отображать расположение объекта, в то время как оно ясно, что находится за реальной поверхностью.
    • Для этого создайте геометрию во второй раз с помощью другого шейдера, который создает требуемый внешний вид "перекрыто". Прежде чем отображать геометрию во второй раз, внесите два изменения в состояние шаблона глубины. Сначала задайте для функции глубины значение "больше или равно", чтобы эта геометрия была видима только в том случае, если она находится дальше от камеры, чем у всех ранее визуализированных геометрических объектов. Во-вторых, установите Депсвритемаск равным нулю, чтобы буфер глубины не изменялся (буфер глубины должен по-прежнему представлять глубину геометрии, ближайшей к камере).

Производительность является важной проблемой при отрисовке сеток пространственных сопоставлений. Ниже приведены некоторые методы повышения производительности, связанные с отрисовкой сеток пространственных сопоставлений.

  • Настройка плотности треугольников
    • При запросе сеток пространственных поверхностей от наблюдателя Surface запросите наименьшую плотность сетки треугольников, которая будет достаточной для ваших потребностей.
    • Может иметь смысл изменить плотность треугольника на поверхности с помощью поверхности, в зависимости от расстояния поверхности от пользователя и его релевантности для взаимодействия с пользователем.
    • Уменьшение числа треугольников сокращает потребление памяти и затраты на обработку вершин на GPU, но не влияет на затраты на обработку пикселов.
  • Использовать отбор фрустум
    • При исфрустуме не удается увидеть графические объекты, так как они выходят за пределы текущего отображаемого фрустум. Это сокращает затраты на обработку ЦП и GPU.
    • Так как отбор выполняется для отдельных сеток, а пространственные поверхности могут быть большими, разбиение каждой сетки пространственных областей на небольшие фрагменты может привести к более эффективному исследовательному применению (в этом случае выводятся меньшее количество треугольников). Однако существует компромисс. чем больше сеток у вас есть, тем больше придется нарисовать вызовы, что может увеличить затраты на ресурсы ЦП. В экстремальном случае фрустумные вычисления могут даже иметь измеряемую стоимость ЦП.
  • Настройка порядка отрисовки
    • Пространственные поверхности обычно имеют большой размер, так как они представляют всю окружающую среду пользователя. Затраты на обработку пикселей в GPU могут быть большими, особенно в случаях, когда имеется несколько уровней видимой геометрии (включая пространственные поверхности и другие голограммы). В этом случае слой, ближайший к пользователю, будет окклудинг все слои, так что все время GPU, потраченное на отрисовку более удаленных слоев, будет пролишним.
    • Чтобы уменьшить эту избыточную работу на GPU, она помогает визуализировать непрозрачные поверхности в порядке «от начала до конца» (ближе к первой, более отдаленным). По "непрозрачному" мы имеем в виду поверхности, для которых для параметра Депсвритемаск задано значение One в вашем состоянии. При отрисовке ближайших поверхностей они покажут буфер глубины, чтобы более отдаленные поверхности эффективно пропускались процессором пикселей в GPU.

Обработка сетки

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

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

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

Райкастинг и конфликты

Чтобы API-интерфейс физикы (например, Хавок) предоставил приложению функции райкастинг и конфликтов для пространственных поверхностей, приложение должно предоставить физические поверхности для API-интерфейса физикы. Сетки, используемые для физики, часто имеют следующие свойства:

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

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

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

Процесс сканирования среды

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

Пример сканирования
Пример сканирования

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

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

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

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

  • Нет опыта сканирования

    • Приложение может работать идеально без пошагового сканирования. Он узнает о поверхностях, которые наблюдаются в процессе естественного перемещения пользователей.
    • Например, приложение, которое позволяет пользователю рисовать на поверхностях с помощью holographic и распылителя, требует знания только тех поверхностей, которые в настоящее время видны пользователю.
    • Среда может быть проверена, если это так, что пользователь уже тратит много времени на использование HoloLens.
    • Следует иметь в виду, что камера, используемая пространственным сопоставлением, может видеть 3,1 м перед пользователем, поэтому при пространственном сопоставлении не будет сведений о более удаленных поверхностях, если пользователь не насмотрел их на более близком расстоянии в прошлом.
    • Так что пользователь понимает, какие поверхности были проверены, приложение должно предоставить визуальный отзыв об этом эффекте, например приведение виртуальных теней на отсканированные поверхности, может помочь пользователю разместить голограммы на этих поверхностях.
    • В этом случае ограничивающие тома наблюдателя-поверхности должны обновляться в каждом кадре в пространственной системе координат, так что они следуют за пользователем.
  • Найти подходящее расположение

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

    • Для приложения может потребоваться определенная конфигурация поверхностей, например две крупные, плоские и противоположные стены, чтобы создать более holographic-зал зеркал.
    • В таких случаях приложению потребуется проанализировать поверхности, предоставляемые пространственным сопоставлением для определения подходящих поверхностей, и направить пользователя к ним.
    • Если анализ поверхности приложения не является надежным, у пользователя должен быть параметр отката. Например, если приложение неправильно определяет двери как плоскую стену, пользователю требуется простой способ исправить эту ошибку.
  • Сканирование части окружения

    • Приложение может захватывать только часть среды, которая направляется пользователем.
    • Например, приложение сканирует часть комнаты, чтобы пользователь мог разместить holographic-классифицированную рекламу для мебели, которую планируется продать.
    • В этом случае приложение должно записывать данные пространственного сопоставления в регионах, наблюдаемых пользователем во время проверки.
  • Сканирование всей комнаты

    • Приложению может потребоваться просмотр всех поверхностей в текущем помещении, включая пользователей, которые находятся за ним.
    • Например, игра может поставить пользователя в роль Гулливер в осаде от сотен маленьких Лиллипутианс подхода из всех направлений.
    • В таких случаях приложению необходимо определить, сколько поверхностей в текущей комнате уже было проверено, и направить пользователю взгляд на значительные промежутки.
    • Ключом к этому процессу является предоставление визуальной обратной связи, которая упрощает для пользователя, какие поверхности еще не были проверены. Приложение может, например, использовать туман на основе расстояния для визуального выделения областей, не охваченных областями пространственного сопоставления.
  • Создание исходного моментального снимка окружения

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

    • Приложение может реагировать на изменения окружающей среды только по указанному пользователем.
    • Например, пользователь может создать несколько трехмерных "статуес" друга, записывая их в разные моменты.
  • Разрешить пользователю изменять окружение

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

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

Обработка сетки

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

Имейте в виду, что данные пространственного сопоставления должны быть как можно точными для реальных поверхностей, поэтому любая обработка, которую вы применяете, переместит свои поверхности дальше от «правды».

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

  • Заполнение отверстия

    • Если не удается проверить небольшой объект, состоящие из темного материала, он оставит отверстие в окружающей области.
    • Отверстия влияют на перекрытия: голограммы могут рассматриваться как отверстия в непрозрачной области реального мира.
    • Отверстия влияют на райкастс: Если вы используете райкастс, чтобы помочь пользователям взаимодействовать с Surfaces, может быть нежелательно, чтобы эти лучи проходили через отверстия. Одним из способов устранения этой проблемы является использование пакета из нескольких райкастс, охватывающих регион соответствующего размера. Это позволит отфильтровать результаты выбросов, чтобы, даже если один райкаст пройдет небольшое отверстие, статистический результат по-прежнему будет действительным. Однако этот подход обусловлен затратами вычислительных ресурсов.
    • Отверстия повлияли на физические конфликты: объект, контролируемый функцией имитации физических объектов, может отбрасывать отверстие в этаже и потерять его.
    • Можно алгоритмически заполнять такие отверстия в сетке Surface. Однако необходимо настроить алгоритм таким образом, чтобы «реальные отверстия», например Windows и заталкивает, не заполняются. Надежное отличие "реальных дыр" от "мнимых отверстий" может быть затруднено, поэтому необходимо поэкспериментировать с различными эвристиками, такими как "size" и "Граничный фигура".
  • Удаление халлуЦинатион

    • Отражения, яркие огни и перемещение объектов могут оставлять небольшие задержки "халлуЦинатионс" плавающей точкой в середине воздуха.
    • ХаллуЦинатионс влияет на перекрытия: халлуЦинатионс может стать видимым, как темные фигуры перемещаются впереди и окклудинг другие голограммы.
    • ХаллуЦинатионс влияет на райкастс. Если вы используете райкастс, чтобы помочь пользователям взаимодействовать с поверхностями, эти лучи могут попасть на халлуЦинатион, а не на поверхность. Как и в случае с отверстиями, одним из способов устранения этой проблемы является использование многих райкастс вместо одного райкаст, но опять же это повлечет за собой вычислительные затраты.
    • ХаллуЦинатионс влияет на конфликты физических объектов: объект, контролируемый имитацией физикы, может быть задержан на халлуЦинатион и не может перемещаться по пустой области пространства.
    • Можно отфильтровать такие халлуЦинатионс из сетки Surface. Однако, как и в случае с отверстиями, необходимо настроить алгоритм таким образом, чтобы реальные небольшие объекты, такие как лампы и маркеры двери, не удалялись.
  • Сглаживание

    • Пространственное сопоставление может возвращать поверхности, которые выглядят как грубые или "шумные" в сравнении с реальными аналогами.
    • Гладкость влияет на конфликты физической связи: Если этаж является приблизительным, физически смоделированный шарик гольфа может не двигаться плавно по линии в прямой строке.
    • Плавность влияет на отрисовку. Если поверхность отображается напрямую, грубые нормали поверхности могут повлиять на внешний вид и нарушают вид "очистить". Это можно устранить с помощью соответствующего освещения и текстур в шейдере, который используется для визуализации поверхности.
    • Можно сгладить неровности в сетке поверхности. Тем не менее, это может помещать поверхность с соответствующей реальной поверхности. Поддержание близкой корреспонденции важна для создания точной перекрытияной голограммы и предоставления пользователям возможности достичь точных и предсказуемых взаимодействий с Holographic.
    • Если требуется только косметические изменения, может быть достаточно для сглаживания нормалей вершин без изменения положений вершин.
  • Поиск плоскости

    • Существует множество видов анализа, которые приложение может выполнять на поверхностях, предоставляемых пространственным сопоставлением.
    • Одним из простых примеров является "Поиск в плоскости"; определение ограниченных, преимущественно плоских областей поверхностей.
    • Плоские регионы можно использовать как holographic рабочих поверхностей, регионы, где holographic-содержимое может автоматически размещаться приложением.
    • Плоские регионы могут ограничивать пользовательский интерфейс, чтобы помочь пользователям взаимодействовать с поверхностями, которые лучше подходят для их нужд.
    • Плоские регионы можно использовать как в реальной среде, для holographic аналогов с функциональными объектами, такими как ЖК-экраны, таблицы или доски.
    • Плоские регионы могут определять области воспроизведения, образуя уровень игры для видео.
    • Плоские регионы могут помочь виртуальным агентам перемещаться по реальному миру, определяя области основания, с которыми могут посвящены реальные люди.

Создание прототипов и отладка

Полезные средства

  • эмулятор HoloLens можно использовать для разработки приложений, использующих пространственное сопоставление без доступа к физической HoloLens. он позволяет имитировать динамический сеанс на HoloLens в реалистичной среде, при этом все данные, которые обычно будут использоваться приложением, в том числе HoloLens движение, пространственные системы координат и сетки пространственных сопоставлений. Это можно использовать для предоставления надежных, повторяемых входных данных, которые могут оказаться полезными при отладке проблем и оценке изменений в коде.
  • чтобы воспроизвести сценарий, запишите данные пространственного сопоставления по сети из динамической HoloLens, а затем сохраните их на диск и повторно используйте в последующих сеансах отладки.
  • Windows 3d-представление портала устройств позволяет просматривать все пространственные поверхности, доступные в настоящее время через систему пространственных сопоставлений. Это дает основание для сравнения пространственных поверхностей внутри приложения; Например, можно легко определить, отсутствуют ли пространственные поверхности или они отображаются в неправильном месте.

Общие рекомендации по созданию прототипов

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

Устранение неполадок

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

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