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

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


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

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

Почему важно пространственное сопоставление?

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

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

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

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

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

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

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

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

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

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

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

Пространственное сопоставление и распознавание сцены WorldMesh

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

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

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

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

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

Illustrations of common Spatial Mapping usage scenarios: Placement, Occlusion, Physics and Navigation

Размещение

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

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

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

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

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

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

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

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

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

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

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

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

Физика

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

Использование Surface Observer

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

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

кэширование Mesh

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

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

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

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

Затем каждое приложение может выбрать следующее:

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

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

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

Отрисовка

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

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

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

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

Обработка Mesh

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

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

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

Raycasting и Столкновение

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

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

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

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

Возможности сканирования среды

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

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

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

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

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

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

  • Отсутствие возможностей сканирования

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

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

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

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

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

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

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

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

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

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

обработка Mesh

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

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

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

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

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

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

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

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

Прототипы и отладка

Полезные инструменты

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

Общие рекомендации по прототипам

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

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

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

См. также