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

Пространственное сопоставление предоставляет подробное представление реальных поверхностей в среде вокруг HoloLens, что позволяет разработчикам создавать убедительные возможности смешанной реальности.Spatial mapping provides a detailed representation of real-world surfaces in the environment around the HoloLens, allowing developers to create a convincing mixed reality experience. Благодаря объединению реального мира с виртуальным миром приложение может показаться голограммным.By merging the real world with the virtual world, an application can make holograms seem real. Приложения также могут более естественно сопоставляться с ожиданиями пользователей, предоставляя привычные реальные поведения и взаимодействия.Applications can also more naturally align with user expectations by providing familiar real-world behaviors and interactions.


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

ВозможностьFeature HoloLens (1-го поколения)HoloLens (1st gen) HoloLens 2HoloLens 2 Иммерсивные гарнитурыImmersive headsets
пространственное сопоставлениеSpatial mapping ✔️✔️ ✔️✔️

Зачем важны пространственное сопоставление?Why is spatial mapping important?

Пространственное сопоставление позволяет размещать объекты на реальных поверхностях.Spatial mapping makes it possible to place objects on real surfaces. Это помогает привязать объекты в мире пользователя и использовать преимущества реальных подсказок по глубине мира. Окклудинг свои голограммы, основанные на других голограммах и реальных объектах, помогут убедить пользователя, что эти голограммы действительно находятся в своем пространстве.This helps anchor objects in the user's world and takes advantage of real world depth cues. Occluding your holograms based on other holograms and real world objects helps convince the user that these holograms are actually in their space. Голограммы с плавающей точкой или перемещение с помощью пользователя не покажется реальным.Holograms floating in space or moving with the user won't feel as real. По возможности размещайте элементы для удобства.When possible, place items for comfort.

Визуализируйте поверхности при помещении или перемещении голограмм (используйте предполагаемую сетку).Visualize surfaces when placing or moving holograms (use a projected grid). Это помогает пользователям понять, где лучше размещать голограммы, и показывает, не сопоставлено ли место, где они пытаются поместить голограмму.This helps users know where they can best place their holograms, and shows if the spot they're trying to place the hologram isn't mapped. Вы можете «элементы объявления» ближе к пользователю, если они имеют слишком большую часть угла.You can "billboard items" toward the user if they end up at too much of an angle.

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

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

Для пространственного сопоставления используются два типа основных объекта: "наблюдатель поверхности" и "пространственный Surface".The two primary object types used for spatial mapping are the 'Spatial Surface Observer' and the 'Spatial Surface'.

Приложение предоставляет наблюдателю пространственной поверхности один или несколько ограничивающих томов для определения областей пространства, в которых приложение должно получить данные пространственного сопоставления.The application provides the Spatial Surface Observer with one or more bounding volumes, to define the regions of space in which the application wishes to receive spatial mapping data. Для каждого из этих томов пространственное сопоставление предоставит приложению набор пространственных поверхностей.For each of these volumes, spatial mapping will provide the application with a set of Spatial Surfaces.

Эти тома могут быть стационарными (в фиксированном расположении, основанном на реальных условиях), или они могут быть присоединены к HoloLens (они перемещаются, но не поворачиваются с помощью HoloLens по мере перемещения в среде).These volumes may be stationary (in a fixed location based on the real world) or they may be attached to the HoloLens (they move, but don't rotate, with the HoloLens as it moves through the environment). Каждая пространственный поверхность описывает реальные поверхности в небольшом объеме пространства, представленной в виде сетки треугольников, прикрепленной к геозаблокированной пространственной системе координат.Each spatial surface describes real-world surfaces in a small volume of space, represented as a triangle mesh attached to a world-locked spatial coordinate system.

Так как HoloLens собирает новые данные о среде и при возникновении изменений в среде, пространственные поверхности будут отображаться, исчезнуть и измениться.As the HoloLens gathers new data about the environment, and as changes to the environment occur, spatial surfaces will appear, disappear, and change.

Пространственное сопоставление и сцены общие сведения о ВорлдмешSpatial Mapping vs. Scene Understanding WorldMesh

Для HoloLens 2 можно запросить статическую версию данных пространственного сопоставления, используя пакет SDK для сцены (параметр енаблеворлдмеш).For HoloLens 2, it's possible to query a static version of the spatial mapping data using Scene understanding SDK (EnableWorldMesh setting). Ниже приведены различия между двумя способами доступа к данным пространственного сопоставления.Here are the differences between two ways of accessing the spatial mapping data:

  • API-интерфейс пространственного сопоставления:Spatial Mapping API:
    • Ограниченный диапазон: данные пространственного сопоставления доступны приложениям в кэшированном "пузырьке" с ограниченным размером, чем пользователь.Limited range: the spatial mapping data available to applications in a limited size cached 'bubble' around the user.
    • Предоставляет обновления с низкой задержкой для измененных областей сетки с помощью событий Сурфацесчанжед.Provides low latency updates of changed mesh regions through SurfacesChanged events.
    • Уровень детализации сведений, управляемых треугольниками на параметр метра третьего уровня.Variable level of details controlled by Triangles Per Cubic Meter parameter.
  • Пакет SDK для понимания сцены:Scene understanding SDK:
    • Неограниченный диапазон — предоставляет все просканированные данные пространственного сопоставления в запросе RADIUS.Unlimited range - provides all the scanned spatial mapping data within the query radius.
    • Предоставляет статический моментальный снимок данных пространственного сопоставления.Provides a static snapshot of the spatial mapping data. Для получения обновленных данных пространственного сопоставления необходимо запустить новый запрос для всей сетки.Getting the updated spatial mapping data requires running a new query for the whole mesh.
    • Последовательный уровень детализации, управляемый параметром Рекуестедмешлевелофдетаил.Consistent level of details controlled by RequestedMeshLevelOfDetail setting.

Что влияет на качество пространственного сопоставления?What influences spatial mapping quality?

Несколько факторов, подробно описанных здесь, могут повлиять на частоту и серьезность этих ошибок.Several factors, detailed here, can affect the frequency and severity of these errors. Однако следует спроектировать приложение таким образом, чтобы пользователь мог достигнуть своих целей даже при наличии ошибок в данных пространственного сопоставления.However, you should design your application so that the user can achieve their goals even in the presence of errors in the spatial mapping data.

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

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

РазмещениеPlacement

Пространственное сопоставление предоставляет приложениям возможность представлять естественные и привычные формы взаимодействия с пользователем. что может быть более естественным, чем размещение телефона на столе?Spatial mapping provides applications with the opportunity to present natural and familiar forms of interaction to the user; what could be more natural than placing down your phone on the desk?

Ограничение размещения голограмм (или, как правило, выбор пространственных расположений) для находящихся на поверхностях обеспечивает естественное сопоставление из трехмерной (точки в пространстве) к 2D (точка на поверхности).Constraining the placement of holograms (or more generally, any selection of spatial locations) to lie on surfaces provides a natural mapping from 3D (point in space) to 2D (point on surface). Это сокращает объем информации, которую пользователь должен предоставить приложению, и ускоряет, упрощает и точнее взаимодействие пользователя.This reduces the amount of information the user needs to provide to the application and makes the user's interactions faster, easier, and more precise. Это справедливо, так как "расстояние на расстоянии" — это не то, что мы используем для физического обмена данными с другими людьми или компьютерами.This is true because 'distance away' isn't something that we're used to physically communicating to other people or to computers. При наведении указателя мыши на наш палец мы указываем направление, но не расстояние.When we point with our finger, we're specifying a direction but not a distance.

Важно отметить, что когда приложение определяет расстояние от направления (например, райкастся вдоль направления взгляда пользователя для поиска ближайшей пространственной поверхности), это должно привести к получению результатов, которые пользователь может надежно предсказать.An important caveat here's that when an application infers distance from direction (for example by doing a raycast along the user's gaze direction to find the nearest spatial surface), this must yield results that the user can reliably predict. В противном случае пользователь теряет свое представление об управлении, и это может быстро стать неприятной.Otherwise, the user will lose their sense of control and this can quickly become frustrating. Один из методов, который помогает в этом, заключается в том, чтобы сделать несколько райкастс, а не только один.One method that helps with this is to do multiple raycasts instead of just one. Статистические результаты должны быть более гладкими и предсказуемыми, менее подверженными воздействию влияния на временные результаты "выбросов" (как это может быть вызвано лучими, передаваемых через небольшие промежутки или на маленькие биты геометрии, о которых пользователь не знает).The aggregate results should be smoother and more predictable, less susceptible to influence from transient 'outlier' results (as can be caused by rays passing through tiny holes or hitting small bits of geometry that the user isn't aware of). Агрегирование или Сглаживание можно также выполнять с течением времени; Например, можно ограничить максимальную скорость, с которой голограмма может различаться на расстоянии от пользователя.Aggregation or smoothing can also be performed over time; for example, you can limit the maximum speed at which a hologram can vary in distance from the user. Простое ограничение минимального и максимального расстояния также может помочь, так что перемещенная голограмма не покидается на расстоянии или происходит сбой обратно в лицо пользователя.Simply limiting the minimum and maximum distance value can also help, so the hologram being moved doesn't suddenly fly away into the distance or come crashing back into the user's face.

Приложения также могут использовать форму и направление поверхностей для указания размещения голограмм.Applications can also use the shape and direction of surfaces to guide hologram placement. В случае с проникнутьом с помощью стен мы не должны полагаться на прокрутку с этажом, даже если это немного нечетным.A holographic chair shouldn't penetrate through walls and should sit flush with the floor even if it's slightly uneven. Этот тип функций, вероятно, будет зависеть от использования физических конфликтов, а не райкастс, однако будут применяться аналогичные проблемы.This kind of functionality would likely rely upon the use of physics collisions rather than raycasts, however similar concerns will apply. Если размещенная голограмма содержит много маленьких многоугольников, таких как находящиеся в кресле, может иметь смысл расширить физическое представление этих многоугольников до более широкого и гладкого, чтобы они могли продвигаться по пространственной поверхности без очистка.If the hologram being placed has many small polygons that stick out, like the legs on a chair, it may make sense to expand the physics representation of those polygons to something wider and smoother so that they're more able to slide over spatial surfaces without snagging.

В свою сторону ввод данных пользователем можно полностью упростить, а пространственные поверхности можно использовать для полного автоматического размещения голограмм.At its extreme, user input can be simplified away entirely and spatial surfaces can be used to do entirely automatic hologram placement. Например, приложение может разместить holographic-выключатель в другом месте на стене, чтобы пользователь мог нажать.For example, the application could place a holographic light-switch somewhere on the wall for the user to press. Те же предостережения о предсказуемости применяются вдвое. Если пользователь ждет управления размещением с голограммами, но приложение не всегда помещает голограммы там, где они предполагают (если светло-выключатель находится в другом месте, к которому пользователь не может достичь), это будет неприятной опыт.The same caveat about predictability applies doubly here; if the user expects control over hologram placement, but the application doesn't always place holograms where they expect (if the light-switch appears somewhere that the user can't reach), then this will be a frustrating experience. Это может быть хуже для автоматического размещения, требующего коррекции пользователя в определенный момент времени, чем просто потребовать от пользователя всегда выполнять самостоятельное размещение. так как предполагается успешное автоматическое размещение, ручное исправление вроде накладных расходов.It can actually be worse to do automatic placement that requires user correction some of the time, than to just require the user to always do placement themselves; because successful automatic placement is expected, manual correction feels like a burden!

Обратите внимание, что способность приложения использовать пространственные поверхности для размещения в значительной степени зависит от процесса сканированияприложения.Note also that the ability of an application to use spatial surfaces for placement depends heavily on the application's scanning experience. Если поверхность не была проверена, ее нельзя использовать для размещения.If a surface hasn't been scanned, then it cannot be used for placement. Приложение может сделать это понятным для пользователя, чтобы оно было полезно для сканирования новых поверхностей или выбора нового расположения.It's up to the application to make this clear to the user, so that they can either help scan new surfaces or select a new location.

Визуальная обратная связь с пользователем имеет первостепенное значение во время размещения.Visual feedback to the user is of paramount importance during placement. Пользователь должен быть уверен, что голограмма основана на ближайшей поверхности с эффектами заземления.The user needs to know where the hologram is based on the nearest surface with grounding effects. Они должны понимать, почему движение их голограммы ограничено (например, из-за конфликтов с другой соседней поверхностью).They should understand why the movement of their hologram is being constrained (for example, because of collisions with another nearby surface). Если они не могут поместить голограмму в текущее место, визуальная обратная связь должна сделать ее неясной.If they can't place a hologram in the current location, then visual feedback should make it clear why not. Например, если пользователь пытается поместить полугодовой полукруг в стену, то части дивана, расположенные позади стены, должны пулсате в цвет злость.For example, if the user is trying to place a holographic couch stuck half-way into the wall, then the portions of the couch that are behind the wall should pulsate in an angry color. Или наоборот, если приложению не удается найти пространственной контакт в расположении, где пользователь может видеть реальную поверхность, приложение должно сделать это ясно.Or conversely, if the application can't find a spatial surface in a location where the user can see a real-world surface, then the application should make this clear. Очевидное отсутствие влияния на заземление в этой области может достичь этой цели.The obvious absence of a grounding effect in this area may achieve this purpose.

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

Одним из основных способов использования поверхностей пространственного сопоставления является просто окклуде голограмм.One of the primary uses of spatial mapping surfaces is simply to occlude holograms. Это простое поведение оказывает огромное влияние на наблюдаемый реальный эффект голограмм, помогая создать висцералй смысл, который действительно не наследуется на том же физическом пространстве, что и пользователь.This simple behavior has a huge impact on the perceived realism of holograms, helping to create a visceral sense that really inhabits the same physical space as the user.

Перекрытия также предоставляет пользователю сведения; когда кажется, что голограмма перекрытоа реальной поверхностью, это позволяет получить дополнительные визуальные отзывы в отношении пространственного расположения этой голограммы в мире.Occlusion also provides information to the user; when a hologram appears to be occluded by a real-world surface, this provides extra visual feedback as to the spatial location of that hologram in the world. И наоборот, перекрытия может также с легкостью Скрыть информацию от пользователя; окклудингные голограммы, лежащие в основе стен, могут уменьшить визуальное неудобство.Conversely, occlusion can also usefully hide information from the user; occluding holograms behind walls can reduce visual clutter in an intuitive way. Чтобы скрыть или раскрыть голограмму, пользователю нужно просто переместить его заголовок.To hide or reveal a hologram, the user merely has to move their head.

Перекрытия также можно использовать в качестве простых ожиданий для естественного пользовательского интерфейса на основе привычных физических взаимодействий. Если голограмма перекрыто на поверхности, это связано с тем, что эта поверхность сплошна, поэтому пользователь должен предполагать, что голограмма будет конфликтовать с этой поверхностью и не пройдет ее.Occlusion can also be used to prime expectations for a natural user interface based upon familiar physical interactions; if a hologram is occluded by a surface it is because that surface is solid, so the user should expect that the hologram will collide with that surface and not pass through it.

Иногда перекрытия голограммы нежелательны.Sometimes, occlusion of holograms is undesirable. Если пользователь должен взаимодействовать с голограммой, он должен увидеть его, даже если он находится за реальной поверхностью.If a user needs to interact with a hologram, then they need to see it - even if it is behind a real-world surface. В таких случаях, как правило, имеет смысл визуализировать такую голограмму по-разному, если это перекрыто (например, путем уменьшения яркости).In such cases, it usually makes sense to render such a hologram differently when it's occluded (for example, by reducing its brightness). Таким образом, пользователь может визуально разыскать голограмму, но он по-прежнему знает, что он находится позади чего-нибудь.This way, the user can visually locate the hologram, but they'll still know it's behind something.

ФизикаPhysics

Использование физического моделирования является еще одним способом, в котором можно использовать пространственное сопоставление, чтобы усилить наличие голограмм в физическом пространстве пользователя.The use of physics simulation is another way in which spatial mapping can be used to reinforce the presence of holograms in the user's physical space. Когда мой резиновой шар на самом деле выходит за пределы рабочего стола, переводится на этаж и исчезает на диване, может быть трудно поверить, что это не так.When my holographic rubber ball rolls realistically off my desk, bounces across the floor and disappears under the couch, it might be hard for me to believe that it's not there.

Модель физического моделирования также предоставляет приложению возможность использовать естественные и привычные виды взаимодействия.Physics simulation also provides the opportunity for an application to use natural and familiar physics-based interactions. Перемещение фрагмента holographic с помощью этажа в этаж, скорее всего, будет проще, если мебель будет реагировать так, как будто она была перемещена по полу с соответствующей инерцией и трением.Moving a piece of holographic furniture around on the floor will likely be easier for the user if the furniture responds as if it were sliding across the floor with the appropriate inertia and friction.

Для создания реалистичных физических поведений вам, скорее всего, потребуется выполнить некоторую обработку сетки , например заполнение отверстий, удаление плавающих халлуЦинатионс и плавность грубых поверхностей.To generate realistic physical behaviors, you'll likely need to do some mesh processing such as filling holes, removing floating hallucinations and smoothing rough surfaces.

Кроме того, необходимо учитывать, как процесс сканирования приложения влияет на его физическое моделирование.You'll also need to consider how your application's scanning experience influences its physics simulation. Во-первых, отсутствующие поверхности не будут конфликтовать ни с чем. что происходит, когда резинка выходит из корридор и выходит за пределы известного мира?Firstly, missing surfaces won't collide with anything; what happens when the rubber ball rolls off down the corridor and off the end of the known world? Во вторых, необходимо решить, будет ли продолжать отвечать на изменения в среде с течением времени.Secondly, you need to decide whether you'll continue to respond to changes in the environment over time. В некоторых случаях вы захотите ответить как можно быстрее. Предположим, что пользователь использует двери и мебель в качестве перемещаемого баррикадеса при защите от темпестных стрелок.In some cases, you'll want to respond as quickly as possible; say if the user is using doors and furniture as movable barricades in defense against a tempest of incoming Roman arrows. В других случаях может потребоваться пропустить новые обновления. Если вы решите навестись на середину курса, вы можете поработать с более рацетраккным автомобилем в течение всего мира.In other cases though, you may want to ignore new updates; driving your holographic sports car around the racetrack on your floor may suddenly not be so fun if your dog decides to sit in the middle of the track.

Приложения могут использовать данные пространственного сопоставления, чтобы предоставить holographic (или агентам) возможность перемещаться по реальному миру таким же образом, как и реальный человек.Applications can use spatial mapping data to grant holographic characters (or agents) the ability to navigate the real world in the same way a real person would. Это может помочь в улучшении наличия holographic символов, запретив их одному и тому же набору естественных, привычных вариантов поведения пользователя и их друзей.This can help reinforce the presence of holographic characters by restricting them to the same set of natural, familiar behaviors as those of the user and their friends.

Возможности навигации также могут быть полезными для пользователей.Navigation capabilities could be useful to users as well. После того как схема навигации создана в определенной области, она может предоставить общий доступ для новых пользователей, не знакомых с этим расположением.Once a navigation map has been built in a given area, it could be shared to provide holographic directions for new users unfamiliar with that location. Эта схема может помочь в предотвращении бесперебойной работы пешеход трафика или во избежание всякое в опасных расположениях, таких как разработка сайтов.This map could be designed to help keep pedestrian 'traffic' flowing smoothly, or to avoid accidents in dangerous locations like construction sites.

Основные технические проблемы, связанные с реализацией функций навигации, будут надежно обнаруживать поверхности неанализируемой (люди не проходят по таблицам!) и корректно адаптации к изменениям в среде (люди не проходят через замкнутые двери).The key technical challenges involved in implementing navigation functionality will be reliable detection of walkable surfaces (humans don't walk on tables!) and graceful adaptation to changes in the environment (humans don't walk through closed doors!). Для сети может потребоваться определенная Обработка , прежде чем ее можно будет использовать для планирования пути и перехода по виртуальному символу.The mesh may require some processing before it's usable for path-planning and navigation by a virtual character. Смягчение сетки и удаление халлуЦинатионс могут помочь избежать зависания символов.Smoothing the mesh and removing hallucinations may help avoid characters becoming stuck. Вы также можете значительно упростить эту сетку, чтобы ускорить вычисление пути и вычислений навигации.You may also wish to drastically simplify the mesh to speed up your character's path-planning and navigation calculations. Эти трудности приступили к разработку технологии видеоигр, и в этих статьях есть множество доступных справочных материалов.These challenges have received a great deal of attention in the development of video game technology, and there's a wealth of available research literature on these topics.

Встроенные функции Навмеш в Unity нельзя использовать с областями пространственного сопоставления.The built-in NavMesh functionality in Unity cannot be used with spatial mapping surfaces. Это связано с тем, что поверхности пространственного сопоставления не известны до запуска приложения, но Навмеш файлы данных должны создаваться из исходных ресурсов заранее.This is because spatial mapping surfaces aren't known until the application starts, but NavMesh data files need to be generated from source assets ahead of time. Также обратите внимание, что система пространственных сопоставлений не будет предоставлять сведения о поверхностях далеко от текущего расположения пользователя.Also note that, the spatial mapping system won't provide information about surfaces far away from the user's current location. Поэтому приложение должно «запомнить» поверхности, если нужно создать карту большой области.So the application must 'remember' surfaces itself if it's to build a map of a large area.

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

В большинстве случаев пространственные поверхности должны быть невидимыми. чтобы избежать ненужных визуальных элементов и позволить реально говорить себе.Most of the time it's appropriate for spatial surfaces to be invisible; to minimize visual clutter and let the real world speak for itself. Тем не менее иногда полезно визуализировать поверхности пространственного сопоставления напрямую, несмотря на то, что их реальные аналоги видимы.However, sometimes it's useful to visualize spatial mapping surfaces directly, despite their real-world counterparts being visible.

Например, когда пользователь пытается поместить голограмму на поверхность (поместив в нее файл holographic, скажем), это может быть полезно для «заземления» голограммы путем приведения тени к поверхности.For example, when the user is trying to place a hologram onto a surface (placing a holographic cabinet on the wall, say) it can be useful to 'ground' the hologram by casting a shadow onto the surface. Это дает пользователю более четкое представление о точном физическом сходстве между голограммой и поверхностью.This gives the user a much clearer sense of the exact physical proximity between the hologram and the surface. Это также пример более общего способа визуального просмотра изменений до того, как пользователь зафиксирует в нем.This is also an example of the more general practice of visually 'previewing' a change before the user commits to it.

Визуализируя поверхности, приложение может предоставить пользователю общее представление о среде.By visualizing surfaces, the application can share with the user its understanding of the environment. Например, игра с платой holographic может визуализировать горизонтальные поверхности, идентифицированные как «таблицы», чтобы пользователь знал, где они должны работать.For example, a holographic board game could visualize the horizontal surfaces that it has identified as 'tables', so the user knows where they should go to interact.

Визуализация поверхностей может быть удобным способом отображения ближайших к пользователю пространств, которые скрыты от представления.Visualizing surfaces can be a useful way to show the user nearby spaces that are hidden from view. Это позволяет предоставить пользователю доступ к его кухни (и всем содержащимся в нем голограммам) из своей гостиной.This could provide a way to give the user access to their kitchen (and all of its contained holograms) from their living room.

Сетки Surface, предоставляемые пространственным сопоставлением, могут быть не в частности "чистыми".The surface meshes provided by spatial mapping may not be particularly 'clean'. Очень важно визуализировать их соответствующим образом.It's important to visualize them appropriately. Традиционные вычисления освещения могут выделять ошибки в нормалях в области визуального отприятного изображения, а «чистые» текстуры, проецированные на поверхность, могут помочь придать ей аккуратная внешний вид.Traditional lighting calculations may highlight errors in surface normals in a visually distracting manner, while 'clean' textures projected onto the surface may help to give it a tidier appearance. Можно также выполнить обработку сетки , чтобы улучшить свойства сетки перед отрисовкой поверхностей.It's also possible to do mesh processing to improve mesh properties, before the surfaces are rendered.

Примечание

В HoloLens 2 реализована новая сцена для понимания среды выполнения, которая предоставляет разработчикам смешанной реальности доступ к структурированному, высокоуровневой представлению среды, предназначенному для упрощения реализации размещения, перекрытия, физикы и навигации.HoloLens 2 implements a new Scene Understanding Runtime, that provides Mixed Reality developers with a structured, high-level environment representation designed to simplify the implementation of placement, occlusion, physics and navigation.

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

Отправной точкой для пространственного сопоставления является наблюдатель поверхности.The starting point for spatial mapping is the surface observer. Процесс программы выглядит следующим образом:Program flow is as follows:

  • Создание объекта наблюдателя SurfaceCreate a surface observer object
    • Укажите один или несколько пространственных томов, чтобы определить интересующие Вас регионы, в которых приложение хочет получить данные пространственного сопоставления.Provide one or more spatial volumes, to define the regions of interest in which the application wishes to receive spatial mapping data. Пространственный том — это просто фигура, определяющая область пространства, например сферу или поле.A spatial volume is simply a shape defining a region of space, such as a sphere or a box.
    • Используйте пространственный том с заблокированной мировой системой координат, чтобы указать фиксированную область физического мира.Use a spatial volume with a world-locked spatial coordinate system to identify a fixed region of the physical world.
    • Используйте пространственный том, изменяя каждый кадр с помощью системы пространственных координат, заблокированной телом, чтобы указать область пространства, которая перемещается (но не вращается) пользователем.Use a spatial volume, updated each frame with a body-locked spatial coordinate system, to identify a region of space that moves (but doesn't rotate) with the user.
    • Эти пространственные тома могут быть изменены позже в любое время, по мере изменения состояния приложения или пользователя.These spatial volumes may be changed later at any time, as the status of the application or the user changes.
  • Использование опроса или уведомления для получения сведений о пространственных поверхностяхUse polling or notification to retrieve information about spatial surfaces
    • Вы можете опросить наблюдатель Surface в любое время, чтобы получить состояние пространственной поверхности.You may 'poll' the surface observer for spatial surface status at any time. Вместо этого вы можете зарегистрироваться для события Change Surfaces наблюдателя, которое будет уведомлять приложение при изменении пространственных поверхностей.Instead, you may register for the surface observer's 'surfaces changed' event, which will notify the application when spatial surfaces have changed.
    • Для динамического пространственного тома, такого как View фрустум, или тома с блокировкой текста, приложения должны опрашивать изменения каждого кадра, задавая интересующую область, а затем получая текущий набор пространственных поверхностей.For a dynamic spatial volume, such as the view frustum, or a body-locked volume, applications will need to poll for changes each frame by setting the region of interest and then obtaining the current set of spatial surfaces.
    • Для статического тома, например Куба, охватывающего одну комнату, приложения могут зарегистрироваться для события Changed (поверхности), чтобы получать уведомления при изменении пространственных поверхностей внутри этого тома.For a static volume, such as a world-locked cube covering a single room, applications may register for the 'surfaces changed' event to be notified when spatial surfaces inside that volume may have changed.
  • Изменения поверхности процессаProcess surfaces changes
    • Выполните итерацию указанного набора пространственных поверхностей.Iterate the provided set of spatial surfaces.
    • Классификация пространственных поверхностей как добавленных, измененных или удаленных.Classify spatial surfaces as added, changed, or removed.
    • Для каждой добавленной или измененной пространственной поверхности при необходимости отправьте асинхронный запрос на получение обновленной сетки, представляющей текущее состояние поверхности, на нужном уровне детализации.For each added or changed spatial surface, if appropriate submit an asynchronous request to receive updated mesh representing the surface's current state at the desired level of detail.
  • Обработайте асинхронный запрос сетки (Дополнительные сведения см. в следующих разделах).Process the asynchronous mesh request (more details in following sections).

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

Пространственные поверхности представлены с помощью плотных сеток треугольников.Spatial surfaces are represented by dense triangle meshes. Хранение, отрисовка и обработка этих сеток могут потреблять значительные вычислительные ресурсы и хранилища.Storing, rendering, and processing these meshes can consume significant computational and storage resources. Таким образом, каждое приложение должно применять схему кэширования сетки в соответствии с потребностями, чтобы максимально сокращать ресурсы, используемые для обработки и хранения данных сетки.As such, each application should adopt a mesh caching scheme appropriate to its needs, to minimize the resources used for mesh processing and storage. Эта схема должна определять, какие сети следует сохранить, а какие — отклонять, а также обновлять сетку для каждой пространственной поверхности.This scheme should determine which meshes to keep and which to discard, and when to update the mesh for each spatial surface.

Многие из обсуждаемых рекомендаций непосредственно информируют о том, как приложение должно поподходить к кэшированию сетки.Many of the considerations discussed there will directly inform how your application should approach mesh caching. Следует учитывать, как пользователь перемещается через среду, какие поверхности требуются, когда будут отслеживаться различные поверхности и когда необходимо записать изменения в среде.You should consider how the user moves through the environment, which surfaces are needed, when different surfaces will be observed and when changes in the environment should be captured.

При интерпретации события Changed, предоставленного наблюдателем Surface, логика базового кэширования сетки выглядит следующим образом:When interpreting the 'surfaces changed' event provided by the surface observer, the basic mesh caching logic is as follows:

  • Если приложение видит идентификатор пространственной поверхности, который ранее не встречался, он должен рассматривать его как новую пространственное пространство.If the application sees a spatial surface ID that it hasn't seen before, it should treat this as a new spatial surface.
  • Если приложение видит пространственной контакт с известным ИДЕНТИФИКАТОРом, но с новым временем обновления, оно должно рассматриваться как обновленная пространственное поверхность.If the application sees a spatial surface with a known ID but with a new update time, it should treat this as an updated spatial surface.
  • Если приложение больше не видит пространственной поверхности с известным ИДЕНТИФИКАТОРом, оно должно рассматривать его как удаленную пространственное поверхность.If the application no longer sees a spatial surface with a known ID, it should treat this as a removed spatial surface.

Для каждого приложения необходимо выбрать следующие параметры.It's up to each application to then make the following choices:

  • Следует ли запрашивать сетку для новых пространственных поверхностей?For new spatial surfaces, should mesh be requested?
    • Обычно сетка должна запрашиваться немедленно для новых пространственных поверхностей, что может предоставить пользователю полезные новые сведения.Generally mesh should be requested immediately for new spatial surfaces, which may provide useful new information to the user.
    • Однако новые пространственные области, расположенные рядом с пользователем и перед ними, должны иметь приоритет, и их сеть должна быть запрошена первыми.However, new spatial surfaces near and in front of the user should be given priority and their mesh should be requested first.
    • Если новая сетка не нужна, то если, например, приложение постоянно или временно заблокировало свою модель среды, оно не должно запрашиваться.If the new mesh isn't needed, if for example the application has permanently or temporarily 'frozen' its model of the environment, then it shouldn't be requested.
  • Для обновленных пространственных поверхностей следует запрашивать сетку?For updated spatial surfaces, should mesh be requested?
    • Перед обновленными пространственными областями рядом с пользователем должен быть указан приоритет, и их сеть должна быть запрошена первыми.Updated spatial surfaces near and in front of the user should be given priority and their mesh should be requested first.
    • Также может быть целесообразно повысить приоритет для новых поверхностей, чем для обновленных поверхностей, особенно во время сканирования.It may also be appropriate to give higher priority to new surfaces than to updated surfaces, especially during the scanning experience.
    • Чтобы ограничить затраты на обработку, приложениям может потребоваться регулировать скорость обработки обновлений на пространственные поверхности.To limit processing costs, applications may wish to throttle the rate at which they process updates to spatial surfaces.
    • Можно определить, что изменения в пространственной поверхности являются небольшими, например если границы поверхности невелики, в этом случае обновление может быть недостаточно важным для обработки.It may be possible to infer that changes to a spatial surface are minor, for example if the bounds of the surface are small, in which case the update may not be important enough to process.
    • Обновления пространственных поверхностей за пределами текущего интересующего вас региона пользователя могут игнорироваться полностью, хотя в этом случае может быть более эффективным изменение пространственных ограничивающих томов, используемых наблюдателем Surface.Updates to spatial surfaces outside the current region of interest of the user may be ignored entirely, though in this case it may be more efficient to modify the spatial bounding volumes in use by the surface observer.
  • Для удаленных пространственных поверхностей следует ли отменять сетку?For removed spatial surfaces, should mesh be discarded?
    • Обычно сетка следует отменять немедленно для удаленных пространственных поверхностей, чтобы перекрытияная голограмма оставалась правильной.Generally mesh should be discarded immediately for removed spatial surfaces, so that hologram occlusion remains correct.
    • Тем не менее, если в приложении есть основания предполагать, что в ближайшее время будет появляться пространственное пространство (в зависимости от структуры взаимодействия с пользователем), это может оказаться более эффективным, чем отбросить ее и повторно создать позже.However, if the application has reason to believe that a spatial surface will reappear shortly (based upon the design of the user experience), then it may be more efficient to keep it than to discard its mesh and recreate it again later.
    • Если приложение создает крупномасштабную модель среды пользователя, то, возможно, не хотите вообще отбросить все сетки.If the application is building a large-scale model of the user's environment, then it may not wish to discard any meshes at all. Тем не менее потребуется ограничить использование ресурсов, но, возможно, путем буферизации сеток на диск, так как пространственные поверхности исчезают.It will still need to limit resource usage though, possibly by spooling meshes to disk as spatial surfaces disappear.
    • Некоторые сравнительно редкие события во время создания пространственной поверхности могут привести к замене пространственных поверхностей новыми пространственными областями в аналогичном расположении, но с разными идентификаторами.Some relatively rare events during spatial surface generation can cause spatial surfaces to be replaced by new spatial surfaces in a similar location but with different IDs. Таким образом, приложения, которые не удаляют удаленную поверхность, должны отказаться от использования нескольких перекрывающихся сеток пространственных поверхностей, охватывающих одно и то же расположение.So, applications that choose not to discard a removed surface should take care not to end up with multiple highly overlapped spatial surfaces meshes covering the same location.
  • Следует ли отменять сетку для других пространственных поверхностей?Should mesh be discarded for any other spatial surfaces?
    • Даже при наличии пространственной поверхности, если она больше не полезна для работы пользователя, она должна быть отклонена.Even while a spatial surface exists, if it's no longer useful to the user's experience then it should be discarded. Например, если приложение "заменяет" комнату на другой стороне двери с альтернативным виртуальным пространством, пространственные поверхности в этой комнате больше не важны.For example, if the application 'replaces' the room on the other side of a doorway with an alternate virtual space then the spatial surfaces in that room no longer matter.

Ниже приведен пример стратегии кэширования сетки с использованием пространственного и временного гистерезиса.Here's an example mesh caching strategy, using spatial and temporal hysteresis:

  • Рассмотрим приложение, желающее использовать фрустумый пространственный том в форме, который следует за взглядом пользователя по мере того, как они выглядят и обходится.Consider an application that wishes to use a frustum-shaped spatial volume of interest that follows the user's gaze as they look around and walk around.
  • Пространственный Surface может быть временно удалена из этого тома, просто потому, что пользователь выходит за пределы поверхности или с него... только для обратного просмотра или перехода чуть позже.A spatial surface may disappear temporarily from this volume simply because the user looks away from the surface or steps further away from it... only to look back or moves closer again a moment later. В этом случае отмена и повторное создание сетки для этой поверхности представляет множество избыточных процессов.In this case, discarding and re-creating the mesh for this surface represents many redundant processings.
  • Чтобы сократить число обработанных изменений, приложение использует две пространственные наблюдатели, которые находятся внутри другого.To reduce the number of changes processed, the application uses two spatial surface observers, one contained within the other. Больший объем представляет собой сферу, который следует за неактивностью пользователя. он перемещается только при необходимости, чтобы гарантировать, что его центр находится в пределах 2,0 метров пользователя.The larger volume is spherical and follows the user 'lazily'; it only moves when necessary to ensure that its center is within 2.0 meters of the user.
  • Новые и обновленные сетки пространственных поверхностей всегда обрабатываются с помощью меньшего внутреннего наблюдателя поверхности, но сетки кэшируются до тех пор, пока они не исчезнут из большего внешнего наблюдателя поверхности.New and updated spatial surface meshes are always processed from the smaller inner surface observer, but meshes are cached until they disappear from the larger outer surface observer. Это позволяет приложению избежать обработки большого количества избыточных изменений из-за перемещения локальных пользователей.This allows the application to avoid processing many redundant changes because of local user movement.
  • Так как пространственное пространство может также исчезнуть временно из-за потери данных отслеживания, приложение также откладывает отмену удаленных пространственных поверхностей во время отслеживания потерь.Since a spatial surface may also disappear temporarily because of tracking loss, the application also defers discarding removed spatial surfaces during tracking loss.
  • Как правило, приложение должно оценивать компромисс между сокращением обработки обновлений и увеличением объема используемой памяти для определения идеальной стратегии кэширования.In general, an application should evaluate the tradeoff between reduced update processing and increased memory usage to determine its ideal caching strategy.

ОтрисовкаRendering

Существуют три основных способа, в которых сетки пространственного сопоставления обычно используются для отрисовки.There are three primary ways in which spatial mapping meshes tend to be used for rendering:

  • Для визуализации поверхностиFor surface visualization
    • Часто бывает удобно визуализировать пространственные поверхности напрямую.It's often useful to visualize spatial surfaces directly. Например, приведение "Shadows" от объектов к пространственным областям может предоставить пользователю полезные визуальные отзывы, когда они помещают на поверхности самые голограммы.For example, casting 'shadows' from objects onto spatial surfaces can provide helpful visual feedback to the user while they're placing holograms on surfaces.
    • Следует помнить, что пространственные сети отличаются от типов сеток, которые может создать трехмерный исполнитель.One thing to bear in mind is that spatial meshes are different to the kind of meshes that a 3D artist might create. Топология треугольника не будет "чистым" в качестве топологии, созданной человеком, и сеть будет испытывать различные ошибки.The triangle topology won't be as 'clean' as human-created topology, and the mesh will suffer from various errors.
    • Чтобы создать привлекательный визуальный Aesthetic, вам может потребоваться выполнить некоторую обработку сетки, например, чтобы заполнить отверстия или плавные нормали к поверхности.To create a pleasing visual aesthetic, you may want to do some mesh processing, for example to fill holes or smooth surface normals. Вы также можете использовать шейдер для проецирования в сеть текстур, разработанных на основе исполнителя, а не напрямую визуализировать топологию сетки и нормали.You may also wish to use a shader to project artist-designed textures onto your mesh instead of directly visualizing mesh topology and normals.
  • Для окклудингной голограммы за реальными областямиFor occluding holograms behind real-world surfaces
    • Пространственные поверхности можно подготавливать к просмотру только по глубине, что влияет только на буфер глубины и не влияет на целевые объекты рендеринга цвета.Spatial surfaces can be rendered in a depth-only pass, which only affects the depth buffer and doesn't affect color render targets.
    • Это окклуде буфер глубины для последующего отображения голограмм, расположенных за пространственными областями.This primes the depth buffer to occlude subsequently rendered holograms behind spatial surfaces. Точная перекрытияа голограмм повышает смысл того, что голограммы действительно существуют в физическом пространстве пользователя.Accurate occlusion of holograms enhances the sense that holograms really exist within the user's physical space.
    • Чтобы включить визуализацию только по глубине, обновите состояние смешения, чтобы установить рендертаржетвритемаск в значение 0 для всех целевых объектов рендеринга цвета.To enable depth-only rendering, update your blend state to set the RenderTargetWriteMask to zero for all color render targets.
  • Изменение внешнего вида голограмм, перекрыто на реальных поверхностяхFor modifying the appearance of holograms occluded by real-world surfaces
    • Обычно визуализированная геометрия скрыта, когда она перекрыто.Normally rendered geometry is hidden when it's occluded. Это достигается путем установки функции глубины в состоянии шаблона глубины в значение "меньше или равно", что приводит к тому, что геометрия будет видна только в том месте, где она находится ближе к камере, чем у всех ранее визуализированных геометрических объектов.This is achieved by setting the depth function in your depth-stencil state to "less than or equal", which causes geometry to be visible only where it's closer to the camera than all previously rendered geometry.
    • Однако может оказаться полезным, чтобы определенный геометрический объект оставался видимым даже в том случае, если он перекрыто, и изменить его внешний вид при перекрыто как способ предоставления визуальной обратной связи с пользователем.However, it may be useful to keep certain geometry visible even when it's occluded, and to modify its appearance when occluded as a way of providing visual feedback to the user. Например, это позволяет приложению отображать расположение объекта, в то время как оно ясно, что находится за реальной поверхностью.For example, this allows the application to show the user the location of an object while making it clear that is behind a real-world surface.
    • Для этого создайте геометрию во второй раз с помощью другого шейдера, который создает требуемый внешний вид "перекрыто".To achieve this, render the geometry a second time with a different shader that creates the desired 'occluded' appearance. Прежде чем отображать геометрию во второй раз, внесите два изменения в состояние шаблона глубины.Before rendering the geometry for the second time, make two changes to your depth-stencil state. Сначала задайте для функции глубины значение "больше или равно", чтобы эта геометрия была видима только в том случае, если она находится дальше от камеры, чем у всех ранее визуализированных геометрических объектов.First, set the depth function to "greater than or equal" so that the geometry will be visible only where it's further from the camera than all previously rendered geometry. Во-вторых, установите Депсвритемаск равным нулю, чтобы буфер глубины не изменялся (буфер глубины должен по-прежнему представлять глубину геометрии, ближайшей к камере).Second, set the DepthWriteMask to zero, so that the depth buffer won't be modified (the depth buffer should continue to represent the depth of the geometry closest to the camera).

Производительность является важной проблемой при отрисовке сеток пространственных сопоставлений.Performance is an important concern when rendering spatial mapping meshes. Ниже приведены некоторые методы повышения производительности, связанные с отрисовкой сеток пространственных сопоставлений.Here are some rendering performance techniques specific to rendering spatial mapping meshes:

  • Настройка плотности треугольниковAdjust triangle density
    • При запросе сеток пространственных поверхностей от наблюдателя Surface запросите наименьшую плотность сетки треугольников, которая будет достаточной для ваших потребностей.When requesting spatial surface meshes from your surface observer, request the lowest density of triangle meshes that will suffice for your needs.
    • Может иметь смысл изменить плотность треугольника на поверхности с помощью поверхности, в зависимости от расстояния поверхности от пользователя и его релевантности для взаимодействия с пользователем.It may make sense to vary triangle density on a surface by surface basis, depending on the surface's distance from the user, and its relevance to the user experience.
    • Уменьшение числа треугольников сокращает потребление памяти и затраты на обработку вершин на GPU, но не влияет на затраты на обработку пикселов.Reducing triangle counts will reduce memory usage and vertex processing costs on the GPU, though it won't affect pixel processing costs.
  • Использовать отбор фрустумUse frustum culling
    • При исфрустуме не удается увидеть графические объекты, так как они выходят за пределы текущего отображаемого фрустум.Frustum culling skips drawing objects that cannot be seen because they are outside the current display frustum. Это сокращает затраты на обработку ЦП и GPU.This reduces both CPU and GPU processing costs.
    • Так как отбор выполняется для отдельных сеток, а пространственные поверхности могут быть большими, разбиение каждой сетки пространственных областей на небольшие фрагменты может привести к более эффективному исследовательному применению (в этом случае выводятся меньшее количество треугольников).Since culling is performed on a per-mesh basis and spatial surfaces can be large, breaking each spatial surface mesh into smaller chunks may result in more efficient culling (in that fewer offscreen triangles are rendered). Однако существует компромисс. чем больше сеток у вас есть, тем больше придется нарисовать вызовы, что может увеличить затраты на ресурсы ЦП.There's a tradeoff, however; the more meshes you have, the more draw calls you must make, which can increase CPU costs. В экстремальном случае фрустумные вычисления могут даже иметь измеряемую стоимость ЦП.In an extreme case, the frustum culling calculations themselves could even have a measurable CPU cost.
  • Настройка порядка отрисовкиAdjust rendering order
    • Пространственные поверхности обычно имеют большой размер, так как они представляют всю окружающую среду пользователя.Spatial surfaces tend to be large, because they represent the user's entire environment surrounding them. Затраты на обработку пикселей в GPU могут быть большими, особенно в случаях, когда имеется несколько уровней видимой геометрии (включая пространственные поверхности и другие голограммы).Pixel processing costs on the GPU can be high, especially in cases where there's more than one layer of visible geometry (including both spatial surfaces and other holograms). В этом случае слой, ближайший к пользователю, будет окклудинг все слои, так что все время GPU, потраченное на отрисовку более удаленных слоев, будет пролишним.In this case, the layer nearest to the user will be occluding any layers further away, so any GPU time spent rendering those more distant layers is wasted.
    • Чтобы уменьшить эту избыточную работу на GPU, она помогает визуализировать непрозрачные поверхности в порядке «от начала до конца» (ближе к первой, более отдаленным).To reduce this redundant work on the GPU, it helps to render opaque surfaces in front-to-back order (closer ones first, more distant ones last). По "непрозрачному" мы имеем в виду поверхности, для которых для параметра Депсвритемаск задано значение One в вашем состоянии.By 'opaque' we mean surfaces for which the DepthWriteMask is set to one in your depth-stencil state. При отрисовке ближайших поверхностей они покажут буфер глубины, чтобы более отдаленные поверхности эффективно пропускались процессором пикселей в GPU.When the nearest surfaces are rendered, they'll prime the depth buffer so that more distant surfaces are efficiently skipped by the pixel processor on the GPU.

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

Приложение может захотеть выполнять различные операции с сетчатыми сетками в соответствии с потребностями.An application may want to do various operations on spatial surface meshes to suit its needs. Данные индекса и вершин, предоставляемые с каждой сеткой пространственных поверхностей, используют тот же привычный макет, что и буферы вершин и индексов , которые используются для отрисовки сеток треугольников во всех современных API-интерфейсах отрисовки.The index and vertex data provided with each spatial surface mesh uses the same familiar layout as the vertex and index buffers that are used for rendering triangle meshes in all modern rendering APIs. Однако один ключевой факт, который следует учитывать, заключается в том, что треугольники пространственного сопоставления имеют порядок поворота на передний план по часовой стрелке.However, one key fact to be aware of is that spatial mapping triangles have a front-clockwise winding order. Каждый треугольник представляется тремя индексами вершин в буфере индекса сетки, и эти индексы определяют вершины треугольника в порядке по часовой стрелке , при просмотре треугольника с передней стороны.Each triangle is represented by three vertex indices in the mesh's index buffer and these indices will identify the triangle's vertices in a clockwise order, when the triangle is viewed from the front side. Передняя сторона (или снаружи) сеток пространственных областей соответствует, как и на лицевой стороне (видимой) стороны реальных миров.The front side (or outside) of spatial surface meshes corresponds as you would expect to the front (visible) side of real world surfaces.

Приложения должны выполнять только упрощение сетки, если грубая плотность треугольника, предоставляемая наблюдателем Surface, по-прежнему недостаточна. Эта работа является ресурсоемкой и уже выполняется средой выполнения для создания различных предоставленных уровней детализации.Applications should only do mesh simplification if the coarsest triangle density provided by the surface observer is still insufficiently coarse - this work is computationally expensive and already being performed by the runtime to generate the various provided levels of detail.

Так как каждый наблюдатель поверхности может предоставлять несколько неподключенных пространственных поверхностей, некоторым приложениям может потребоваться обрезать эти сетки пространственных областей, а затем Зиппер их вместе.Because each surface observer can provide multiple unconnected spatial surfaces, some applications may wish to clip these spatial surface meshes against each other, then zipper them together. Как правило, шаг обрезки является обязательным, поскольку соседние сетки пространственных областей часто перекрываются немного.In general, the clipping step is required, as nearby spatial surface meshes often overlap slightly.

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

Чтобы API-интерфейс физикы (например, Хавок) предоставил приложению функции райкастинг и конфликтов для пространственных поверхностей, приложение должно предоставить физические поверхности для API-интерфейса физикы.In order for a physics API (such as Havok) to provide an application with raycasting and collision functionality for spatial surfaces, the application must provide spatial surface meshes to the physics API. Сетки, используемые для физики, часто имеют следующие свойства:Meshes used for physics often have the following properties:

  • Они содержат только небольшое число треугольников.They contain only small numbers of triangles. Операции физикы потребляют больше вычислений, чем операции отрисовки.Physics operations are more computationally intensive than rendering operations.
  • Они "ограничены" водами ".They're 'water-tight'. Поверхности, которые должны быть сплошными, не должны иметь небольшие бреши; даже отверстия слишком малы, чтобы быть видимыми, могут вызвать проблемы.Surfaces intended to be solid shouldn't have small holes in them; even holes too small to be visible can cause problems.
  • Они преобразуются в выпуклой хуллс.They're converted into convex hulls. Выпуклой хуллс имеет несколько многоугольников и не имеет свободных отверстий, и они гораздо более эффективны для обработки, чем необработанные сетки треугольников.Convex hulls have few polygons and are free of holes, and they're much more computationally efficient to process than raw triangle meshes.

При выполнении райкастс с пространственными областями следует помнить, что эти поверхности часто сложны и нередко изменяют фигуры, как и на столе!When doing raycasts against spatial surfaces, bear in mind that these surfaces are often complex, cluttered shapes full of messy little details - just like your desk! Это означает, что одному райкасту часто недостаточно, чтобы предоставить достаточно информации о форме поверхности и форме пустого пространства рядом с ним.This means that a single raycast is often insufficient to give you enough information about the shape of the surface and the shape of the empty space near it. Обычно рекомендуется выполнять много райкастс в небольшой области и использовать статистические результаты для получения более надежного понимания поверхности.It's usually a good idea to do many raycasts within a small area and to use the aggregate results to derive a more reliable understanding of the surface. Например, при использовании среднего значения, равного 10 райкастс, для размещения голограммы на поверхности будет использоваться гораздо более гладкий и менее "неограниченный" результат, использующий только один райкаст.For example, using the average of 10 raycasts to guide hologram placement on a surface will yield a far smoother and less 'jittery' result that using just a single raycast.

Однако помните, что каждый райкаст может иметь высокую вычислительную стоимость.However, bear in mind that each raycast can have a high computational cost. В зависимости от сценария использования следует выплатить вычислительную стоимость дополнительного райкастс (для каждого кадра) относительно вычислительной стоимости обработки сетки , чтобы сгладить и удалять отверстия на пространственных поверхностях (выполняется при обновлении пространственных сеток).Depending on your usage scenario, you should trade off the computational cost of extra raycasts (done every frame) against the computational cost of mesh processing to smooth and remove holes in spatial surfaces (done when spatial meshes are updated).

Процесс сканирования средыThe environment scanning experience

Каждое приложение, использующее пространственное сопоставление, должно использовать проверку. процесс, с помощью которого приложение помогает пользователю проверять поверхности, необходимые для правильной работы приложения.Each application that uses spatial mapping should consider providing a 'scanning experience'; the process through which the application guides the user to scan surfaces that are necessary for the application to function correctly.

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

Характер этого процесса сканирования может сильно различаться в зависимости от потребностей конкретного приложения, но при проектировании необходимо иметь два основных принципа.The nature of this scanning experience can vary greatly depending upon each application's needs, but two main principles should guide its design.

Во-первых, необходимо четко понять, что связь с пользователем является основной задачей.Firstly, clear communication with the user is the primary concern. Пользователь всегда должен знать, выполняются ли требования приложения.The user should always be aware of whether the application's requirements are being met. Если они не соблюдаются, необходимо сразу же очистить пользователя, почему это так, и они должны быстро принять соответствующие меры.When they aren't being met, it should be immediately clear to the user why this is so and they should be quickly led to take the appropriate action.

Во-вторых, приложения должны попытаться обеспечить баланс между эффективностью и надежностью.Secondly, applications should attempt to strike a balance between efficiency and reliability. Если это возможно, приложения должны автоматически анализировать пространственные данные сопоставления, чтобы сэкономить время пользователя.When it's possible to do so reliably, applications should automatically analyze spatial mapping data to save the user time. Если это невозможно, приложения должны позволить пользователю быстро предоставить приложению дополнительные сведения, необходимые для этого.When it isn't possible to do so reliably, applications should instead enable the user to quickly provide the application with the additional information it requires.

Чтобы помочь вам в проектировании правильного процесса сканирования, определите, какие из следующих возможностей применимы к вашему приложению:To help design the right scanning experience, consider which of the following possibilities are applicable to your application:

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

    • Приложение может работать идеально без пошагового сканирования. Он узнает о поверхностях, которые наблюдаются в процессе естественного перемещения пользователей.An application may function perfectly without any guided scanning experience; it will learn about surfaces that are observed in the course of natural user movement.
    • Например, приложение, которое позволяет пользователю рисовать на поверхностях с помощью holographic и распылителя, требует знания только тех поверхностей, которые в настоящее время видны пользователю.For example, an application that lets the user draw on surfaces with holographic spray paint requires knowledge only of the surfaces currently visible to the user.
    • Среда может быть проверена, если это одна из них, в которой пользователь уже тратит много времени на использование HoloLens.The environment may be scanned already if it's one in which the user has already spent lots of time using the HoloLens.
    • Следует иметь в виду, что камера, используемая пространственным сопоставлением, может видеть 3,1 м перед пользователем, поэтому при пространственном сопоставлении не будет сведений о более удаленных поверхностях, если пользователь не насмотрел их на более близком расстоянии в прошлом.Bear in mind however that the camera used by spatial mapping can only see 3.1 m in front of the user, so spatial mapping won't know about any more distant surfaces unless the user has observed them from a closer distance in the past.
    • Так что пользователь понимает, какие поверхности были проверены, приложение должно предоставить визуальный отзыв об этом эффекте, например приведение виртуальных теней на отсканированные поверхности, может помочь пользователю разместить голограммы на этих поверхностях.So the user understands which surfaces have been scanned, the application should provide visual feedback to this effect, for example casting virtual shadows onto scanned surfaces may help the user place holograms on those surfaces.
    • В этом случае ограничивающие тома наблюдателя-поверхности должны обновляться в каждом кадре в пространственной системе координат, так что они следуют за пользователем.For this case, the spatial surface observer's bounding volumes should be updated each frame to a body-locked spatial coordinate system, so that they follow the user.
  • Найти подходящее расположениеFind a suitable location

    • Приложение может быть предназначено для использования в расположении с конкретными требованиями.An application may be designed for use in a location with specific requirements.
    • Например, приложению может потребоваться пустая область вокруг пользователя, чтобы они могли безопасно практиковаться в кунг-э.For example, the application may require an empty area around the user so they can safely practice holographic kung-fu.
    • Приложения должны заранее взаимодействовать с любыми конкретными требованиями и подключаться к ним с четкими визуальными отзывами.Applications should communicate any specific requirements to the user up-front, and reinforce them with clear visual feedback.
    • В этом примере приложение должно визуализировать экстент необходимой пустой области и визуально выделить присутствие любых нежелательных объектов в этой зоне.In this example, the application should visualize the extent of the required empty area and visually highlight the presence of any undesired objects within this zone.
    • В этом случае ограничивающие тома наблюдателя Surface должны использовать заблокированную в мире систему пространственных координат в выбранном расположении.For this case, the spatial surface observer's bounding volumes should use a world-locked spatial coordinate system in the chosen location.
  • Поиск подходящей конфигурации поверхностейFind a suitable configuration of surfaces

    • Для приложения может потребоваться определенная конфигурация поверхностей, например две крупные, плоские и противоположные стены, чтобы создать более holographic-зал зеркал.An application may require a specific configuration of surfaces, for example two large, flat, opposing walls to create a holographic hall of mirrors.
    • В таких случаях приложению потребуется проанализировать поверхности, предоставляемые пространственным сопоставлением для определения подходящих поверхностей, и направить пользователя к ним.In such cases, the application will need to analyze the surfaces provided by spatial mapping to detect suitable surfaces, and direct the user toward them.
    • Если анализ поверхности приложения не является надежным, у пользователя должен быть параметр отката.The user should have a fallback option if the application's surface analysis isn't reliable. Например, если приложение неправильно определяет двери как плоскую стену, пользователю требуется простой способ исправить эту ошибку.For example, if the application incorrectly identifies a doorway as a flat wall, the user needs a simple way to correct this error.
  • Сканирование части окруженияScan part of the environment

    • Приложение может захватывать только часть среды, которая направляется пользователем.An application may wish to only capture part of the environment, as directed by the user.
    • Например, приложение сканирует часть комнаты, чтобы пользователь мог разместить holographic-классифицированную рекламу для мебели, которую планируется продать.For example, the application scans part of a room so the user may post a holographic classified ad for furniture they wish to sell.
    • В этом случае приложение должно записывать данные пространственного сопоставления в регионах, наблюдаемых пользователем во время проверки.In this case, the application should capture spatial mapping data within the regions observed by the user during their scan.
  • Сканирование всей комнатыScan the whole room

    • Приложению может потребоваться просмотр всех поверхностей в текущем помещении, включая пользователей, которые находятся за ним.An application may require a scan of all of the surfaces in the current room, including those behind the user.
    • Например, игра может поставить пользователя в роль Гулливер в осаде от сотен маленьких Лиллипутианс подхода из всех направлений.For example, a game may put the user in the role of Gulliver, under siege from hundreds of tiny Lilliputians approaching from all directions.
    • В таких случаях приложению необходимо определить, сколько поверхностей в текущей комнате уже было проверено, и направить пользователю взгляд на значительные промежутки.In such cases, the application will need to determine how many of the surfaces in the current room have already been scanned, and direct the user's gaze to fill in significant gaps.
    • Ключом к этому процессу является предоставление визуальной обратной связи, которая упрощает для пользователя, какие поверхности еще не были проверены.The key to this process is providing visual feedback that makes it clear to the user which surfaces haven't yet been scanned. Приложение может, например, использовать туман на основе расстояния для визуального выделения областей, не охваченных областями пространственного сопоставления.The application could, for example, use distance-based fog to visually highlight regions that aren't covered by spatial mapping surfaces.
  • Создание исходного моментального снимка окруженияTake an initial snapshot of the environment

    • Приложению может потребоваться игнорировать все изменения в среде после получения исходного снимка.An application may wish to ignore all changes in the environment after taking an initial 'snapshot'.
    • Это может быть полезно во избежание нарушений данных, созданных пользователем, которые тесно связаны с первоначальным состоянием среды.This may be appropriate to avoid disruption of user-created data that is tightly coupled to the initial state of the environment.
    • В этом случае приложение должно создать копию данных пространственного сопоставления в исходном состоянии после завершения проверки.In this case, the application should make a copy of the spatial mapping data in its initial state once the scan is complete.
    • Приложения должны продолжать получать обновления данных пространственного сопоставления, если они все еще должны быть правильно перекрыто средой.Applications should continue receiving updates to spatial mapping data if holograms are still to be correctly occluded by the environment.
    • Продолжение обновления данных пространственного сопоставления также позволяет визуализировать все произошедшие изменения, что позволяет пользователю отличия между более ранними и текущими состояниями среды.Continued updates to spatial mapping data also allow visualizing any changes that have occurred, clarifying to the user the differences between prior and present states of the environment.
  • Создание моментальных снимков среды, инициированных пользователемTake user-initiated snapshots of the environment

    • Приложение может реагировать на изменения окружающей среды только по указанному пользователем.An application may only wish to respond to environmental changes when instructed by the user.
    • Например, пользователь может создать несколько трехмерных "статуес" друга, записывая их в разные моменты.For example, the user could create multiple 3D 'statues' of a friend by capturing their poses at different moments.
  • Разрешить пользователю изменять окружениеAllow the user to change the environment

    • Приложение может реагировать в реальном времени на любые изменения, внесенные в среду пользователя.An application may be designed to respond in real time to any changes made in the user's environment.
    • Например, пользователь, рисующий прикрытием, может активировать "сцену Change" для более holographic-воспроизводимого воспроизведения на другой стороне.For example, the user drawing a curtain could trigger 'scene change' for a holographic play taking place on the other side.
  • Помочь пользователю избежать ошибок в данных пространственного сопоставленияGuide the user to avoid errors in the spatial mapping data

    • Приложение может предоставить пользователю рекомендации для проверки среды.An application may wish to provide guidance to the user while they're scanning their environment.
    • Это может помочь пользователю избежать определенных видов ошибок в данных пространственного сопоставления, например, не отключаясь от сунлит окон или зеркал.This can help the user to avoid certain kinds of errors in the spatial mapping data, for example by staying away from sunlit windows or mirrors.

Один из дополнительных сведений о том, что "Range" данных пространственного сопоставления не ограничен.One extra detail to be aware of is that the 'range' of spatial mapping data isn't unlimited. Хотя при пространственном сопоставлении создается постоянная база данных с большими пространствами, она делает эти данные доступными для приложений в "пузырьковом" ограниченном размере вокруг пользователя.While spatial mapping does build a permanent database of large spaces, it only makes that data available to applications in a 'bubble' of limited size around the user. Если вы начинаете с начала длинного корридора и не сможете пройти с самого начала, то в конечном итоге пространственные поверхности возвращаются в начале.If you start at the beginning of a long corridor and walk far enough away from the start, then eventually the spatial surfaces back at the beginning will disappear. Это можно устранить путем кэширования этих поверхностей в приложении после исчезновения из доступных данных пространственного сопоставления.You can mitigate this by caching those surfaces in your application after they've disappeared from the available spatial mapping data.

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

Он может помочь обнаружить распространенные типы ошибок в поверхностях и фильтровать, удалять или изменять данные пространственного сопоставления соответствующим образом.It may help to detect common types of errors in surfaces and to filter, remove or modify the spatial mapping data as appropriate.

Имейте в виду, что данные пространственного сопоставления должны быть как можно точными для реальных поверхностей, поэтому любая обработка, которую вы применяете, переместит свои поверхности дальше от «правды».Bear in mind that spatial mapping data is intended to be as faithful as possible to real-world surfaces, so any processing you apply risks shifting your surfaces further from the 'truth'.

Ниже приведены некоторые примеры различных типов обработки сетки, которые могут оказаться полезными.Here are some examples of different types of mesh processing that you may find useful:

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

    • Если не удается проверить небольшой объект, состоящие из темного материала, он оставит отверстие в окружающей области.If a small object made of a dark material fails to scan, it will leave a hole in the surrounding surface.
    • Отверстия влияют на перекрытия: голограммы могут рассматриваться как отверстия в непрозрачной области реального мира.Holes affect occlusion: holograms can be seen 'through' a hole in a supposedly opaque real-world surface.
    • Отверстия влияют на райкастс: Если вы используете райкастс, чтобы помочь пользователям взаимодействовать с Surfaces, может быть нежелательно, чтобы эти лучи проходили через отверстия.Holes affect raycasts: if you're using raycasts to help users interact with surfaces, it may be undesirable for these rays to pass through holes. Одним из способов устранения этой проблемы является использование пакета из нескольких райкастс, охватывающих регион соответствующего размера.One mitigation is to use a bundle of multiple raycasts covering an appropriately sized region. Это позволит отфильтровать результаты выбросов, чтобы, даже если один райкаст пройдет небольшое отверстие, статистический результат по-прежнему будет действительным.This will allow you to filter 'outlier' results, so that even if one raycast passes through a small hole, the aggregate result will still be valid. Однако этот подход обусловлен затратами вычислительных ресурсов.However, this approach comes at a computational cost.
    • Отверстия повлияли на физические конфликты: объект, контролируемый функцией имитации физических объектов, может отбрасывать отверстие в этаже и потерять его.Holes affect physics collisions: an object controlled by physics simulation may drop through a hole in the floor and become lost.
    • Можно алгоритмически заполнять такие отверстия в сетке Surface.It's possible to algorithmically fill such holes in the surface mesh. Однако необходимо настроить алгоритм таким образом, чтобы «реальные отверстия», например Windows и заталкивает, не заполняются.However, you'll need to tune your algorithm so that 'real holes' such as windows and doorways don't get filled in. Надежное отличие "реальных дыр" от "мнимых отверстий" может быть затруднено, поэтому необходимо поэкспериментировать с различными эвристиками, такими как "size" и "Граничный фигура".It can be difficult to reliably differentiate 'real holes' from 'imaginary holes', so you'll need to experiment with different heuristics such as 'size' and 'boundary shape'.
  • Удаление халлуЦинатионHallucination removal

    • Отражения, яркие огни и перемещение объектов могут оставлять небольшие задержки "халлуЦинатионс" плавающей точкой в середине воздуха.Reflections, bright lights, and moving objects can leave small lingering 'hallucinations' floating in mid-air.
    • ХаллуЦинатионс влияет на перекрытия: халлуЦинатионс может стать видимым, как темные фигуры перемещаются впереди и окклудинг другие голограммы.Hallucinations affect occlusion: hallucinations may become visible as dark shapes moving in front of and occluding other holograms.
    • ХаллуЦинатионс влияет на райкастс. Если вы используете райкастс, чтобы помочь пользователям взаимодействовать с поверхностями, эти лучи могут попасть на халлуЦинатион, а не на поверхность.Hallucinations affect raycasts: if you're using raycasts to help users interact with surfaces, these rays could hit a hallucination instead of the surface behind it. Как и в случае с отверстиями, одним из способов устранения этой проблемы является использование многих райкастс вместо одного райкаст, но опять же это повлечет за собой вычислительные затраты.As with holes, one mitigation is to use many raycasts instead of a single raycast, but again this will come at a computational cost.
    • ХаллуЦинатионс влияет на конфликты физических объектов: объект, контролируемый имитацией физикы, может быть задержан на халлуЦинатион и не может перемещаться по пустой области пространства.Hallucinations affect physics collisions: an object controlled by physics simulation may become stuck against a hallucination and be unable to move through a seemingly clear area of space.
    • Можно отфильтровать такие халлуЦинатионс из сетки Surface.It's possible to filter such hallucinations from the surface mesh. Однако, как и в случае с отверстиями, необходимо настроить алгоритм таким образом, чтобы реальные небольшие объекты, такие как лампы и маркеры двери, не удалялись.However, as with holes, you'll need to tune your algorithm so that real small objects such as lamp-stands and door handles don't get removed.
  • СглаживаниеSmoothing

    • Пространственное сопоставление может возвращать поверхности, которые выглядят как грубые или "шумные" в сравнении с реальными аналогами.Spatial mapping may return surfaces that appear to be rough or 'noisy' in comparison to their real-world counterparts.
    • Гладкость влияет на конфликты физической связи: Если этаж является приблизительным, физически смоделированный шарик гольфа может не двигаться плавно по линии в прямой строке.Smoothness affects physics collisions: if the floor is rough, a physically simulated golf ball may not roll smoothly across it in a straight line.
    • Плавность влияет на отрисовку. Если поверхность отображается напрямую, грубые нормали поверхности могут повлиять на внешний вид и нарушают вид "очистить".Smoothness affects rendering: if a surface is visualized directly, rough surface normals can affect its appearance and disrupt a 'clean' look. Это можно устранить с помощью соответствующего освещения и текстур в шейдере, который используется для визуализации поверхности.It's possible to mitigate this by using appropriate lighting and textures in the shader that is used to render the surface.
    • Можно сгладить неровности в сетке поверхности.It's possible to smooth out roughness in a surface mesh. Тем не менее, это может помещать поверхность с соответствующей реальной поверхности.However, this may push the surface further away from the corresponding real-world surface. Поддержание близкой корреспонденции важна для создания точной перекрытияной голограммы и предоставления пользователям возможности достичь точных и предсказуемых взаимодействий с Holographic.Maintaining a close correspondence is important to produce accurate hologram occlusion, and to enable users to achieve precise and predictable interactions with holographic surfaces.
    • Если требуется только косметические изменения, может быть достаточно для сглаживания нормалей вершин без изменения положений вершин.If only a cosmetic change is required, it may be sufficient to smooth vertex normals without changing vertex positions.
  • Поиск плоскостиPlane finding

    • Существует множество видов анализа, которые приложение может выполнять на поверхностях, предоставляемых пространственным сопоставлением.There are many forms of analysis that an application may wish to perform on the surfaces provided by spatial mapping.
    • Одним из простых примеров является "Поиск в плоскости"; определение ограниченных, преимущественно плоских областей поверхностей.One simple example is 'plane finding'; identifying bounded, mostly planar regions of surfaces.
    • Плоские регионы можно использовать как holographic рабочих поверхностей, регионы, где holographic-содержимое может автоматически размещаться приложением.Planar regions can be used as holographic work-surfaces, regions where holographic content can be automatically placed by the application.
    • Плоские регионы могут ограничивать пользовательский интерфейс, чтобы помочь пользователям взаимодействовать с поверхностями, которые лучше подходят для их нужд.Planar regions can constrain the user interface, to guide users to interact with the surfaces that best suit their needs.
    • Плоские регионы можно использовать как в реальной среде, для holographic аналогов с функциональными объектами, такими как ЖК-экраны, таблицы или доски.Planar regions can be used as in the real world, for holographic counterparts to functional objects such as LCD screens, tables or whiteboards.
    • Плоские регионы могут определять области воспроизведения, образуя уровень игры для видео.Planar regions can define play areas, forming the basis of video game levels.
    • Плоские регионы могут помочь виртуальным агентам перемещаться по реальному миру, определяя области основания, с которыми могут посвящены реальные люди.Planar regions can aid virtual agents to navigate the real world, by identifying the areas of floor that real people are likely to walk on.

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

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

  • Эмулятор hololens можно использовать для разработки приложений, использующих пространственное сопоставление без доступа к физическим HoloLens.The HoloLens emulator can be used to develop applications using spatial mapping without access to a physical HoloLens. Он позволяет имитировать динамический сеанс на HoloLens в реалистичной среде, при этом все данные, которые обычно будут использоваться приложением, включают в себя движение HoloLens, пространственные системы координат и сетки пространственных сопоставлений.It allows you to simulate a live session on a HoloLens in a realistic environment, with all of the data your application would normally consume, including HoloLens motion, spatial coordinate systems, and spatial mapping meshes. Это можно использовать для предоставления надежных, повторяемых входных данных, которые могут оказаться полезными при отладке проблем и оценке изменений в коде.This can be used to provide reliable, repeatable input, which can be useful for debugging problems and evaluating changes to your code.
  • Чтобы воспроизвести сценарий, запишите данные пространственного сопоставления по сети из динамического HoloLens, а затем сохраните его на диск и повторно используйте в последующих сеансах отладки.To reproduce a scenario, capture spatial mapping data over the network from a live HoloLens, then save it to disk and reuse it in later debugging sessions.
  • Трехмерное представление портала устройств Windows позволяет просматривать все пространственные поверхности, доступные в настоящее время через систему пространственных сопоставлений.The Windows device portal 3D view provides a way to see all of the spatial surfaces currently available via the spatial mapping system. Это дает основание для сравнения пространственных поверхностей внутри приложения; Например, можно легко определить, отсутствуют ли пространственные поверхности или они отображаются в неправильном месте.This provides a basis of comparison for the spatial surfaces inside your application; for example, you can easily tell if any spatial surfaces are missing or are being displayed in the wrong place.

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

  • Поскольку ошибки в данных пространственного сопоставления могут сильно повлиять на взаимодействие с пользователем, рекомендуется тестировать приложение в самых разных средах.Because errors in the spatial mapping data may strongly affect your user's experience, we recommend that you test your application in a wide variety of environments.
  • Не загляните в привычку всегда тестировать в одном месте, например на рабочем столе.Don't get trapped in the habit of always testing in the same location, for example at your desk. Обязательно протестируйте различные поверхности различных позиций, фигур, размеров и материалов.Make sure to test on various surfaces of different positions, shapes, sizes, and materials.
  • Аналогичным образом, хотя синтетические или записанные данные могут быть полезны для отладки, они не будут прилагаться к одному и тому же небольшому количеству тестовых случаев.Similarly, while synthetic or recorded data can be useful for debugging, don't become too reliant upon the same few test cases. Это может задержать Поиск важных проблем, которые более разнообразные тесты будут перехвачены ранее.This may delay finding important issues that more varied testing would have caught earlier.
  • Рекомендуется выполнять тестирование с реальными (и идеальными нерекомендуемыми) пользователями, поскольку они могут не использовать HoloLens или приложение точно так же, как это делается.It's a good idea to perform testing with real (and ideally uncoached) users, because they may not use the HoloLens or your application in exactly the same way that you do. На самом деле, это может неожиданно повлиять на то, насколько поведений, знаний и допущений людей может быть.In fact, it may surprise you how divergent people's behavior, knowledge, and assumptions can be!

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

  • Чтобы обеспечить правильную ориентированность сеток Surface, каждый GameObject должен быть активен перед отправкой в Сурфацеобсервер, чтобы была создана его сетка.In order for the surface meshes to be orientated correctly, each GameObject needs to be active before it's sent to the SurfaceObserver to have its mesh constructed. В противном случае сетки будут отображаться в своем пространстве, но поворачиваются в странные углы.Otherwise, the meshes will show up in your space but rotated at weird angles.
  • GameObject, выполняющий сценарий, который обменивается данными с Сурфацеобсервер, должен быть установлен в качестве источника.The GameObject that runs the script that communicates with the SurfaceObserver needs to be set to the origin. В противном случае все объекты gameobject, которые были созданы и отправлены в Сурфацеобсервер для создания своих сеток, будут иметь смещение, равное смещению родительского игрового объекта.Otherwise, all of GameObjects that you create and send to the SurfaceObserver to have their meshes constructed will have an offset equal to the offset of the Parent Game Object. Это может привести к отображению нескольких метров сетки, что затрудняет отладку.This can make your meshes show up several meters away, which makes it hard to debug what is going on.

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