Пространственное сопоставление в UnrealSpatial Mapping in Unreal

Пространственное сопоставление позволяет размещать объекты на физических поверхностях в реальном мире.Spatial mapping lets you place objects on physical surfaces in the real-world. Когда мир вокруг HoloLens сопоставляется, голограммы кажутся более реальными для пользователя.When the world around the HoloLens is mapped, holograms seem more real to the user. Пространственное сопоставление также обеспечивает привязку объектов в мире пользователя на основе признаков глубины. Это помогает убедить пользователя в том, что эти голограммы на самом деле находятся в его пространстве.Spatial mapping also anchors objects in the user's world by taking advantage of depth cues, helping convince them that these holograms are actually in their space. Голограммы, плавающие в пространстве или перемещающиеся вместе с пользователем не будут ощущаться как реальные, поэтому всегда следует помещать элементы в удобном расположении.Holograms floating in space or moving with the user won't feel as real, so you always want to place items for comfort whenever possible.

Дополнительные сведения о качестве пространственного сопоставления, размещении объектов, загораживании, отрисовке и других аспектах см. в разделе справки "Пространственное сопоставление".You can find more information on spatial mapping quality, placement, occlusion, rendering, and more, in the Spatial mapping document.

Включение пространственного сопоставленияEnabling Spatial Mapping

Чтобы включить пространственное сопоставление для HoloLens:To enable spatial mapping on HoloLens:

  • Выберите Edit > Project Settings (Правка > Параметры проекта) и прокрутите вниз до раздела Platforms (Платформы).Open Edit > Project Settings and scroll down to the Platforms section.
    • Выберите HoloLens и установите флажок Spatial Perception (Пространственное восприятие).Select HoloLens and check Spatial Perception.

Снимок экрана: параметры проекта HoloLens с выделенным параметром пространственного восприятия

Чтобы включить пространственное сопоставление (по умолчанию оно выключено) и отладить сетку MRMesh в игре для HoloLens:To opt into spatial mapping and debug the MRMesh in a HoloLens game:

  1. Откройте компонент ARSessionConfig и разверните раздел ARSettings > World Mapping (Параметры дополненной реальности > Сопоставление мира).Open the ARSessionConfig and expand the ARSettings > World Mapping section.

  2. Установите флажок Generate Mesh Data from Tracked Geometry (Генерировать данные сетки по отслеживаемой геометрии), который предписывает подключаемому модулю HoloLens начать асинхронную регистрацию данных пространственного сопоставления с выводом в Unreal посредством сетки MRMesh.Check Generate Mesh Data from Tracked Geometry, which tells the HoloLens plugin to start asynchronously getting spatial mapping data and surface it to Unreal through the MRMesh.

  3. Установите флажок Render Mesh Data in Wireframe (Отрисовывать данные сетки в виде каркасной модели), чтобы контур каждого треугольника сетки MRMesh показывался белым цветом.Check Render Mesh Data in Wireframe to show a white wireframe outline of every triangle in the MRMesh.

Хранилище пространственных привязок готово

Пространственное сопоставление во время выполненияSpatial Mapping at runtime

Изменить логику пространственного сопоставления во время выполнения можно путем настройки следующих параметров:You can modify the following parameters to update the spatial mapping runtime behavior:

  • Выберите Edit > Project Settings (Правка > Параметры проекта), прокрутите вниз до раздела Platforms (Платформы) и выберите HoloLens > Spatial Mapping (HoloLens > Пространственное сопоставление):Open Edit > Project Settings, scroll down to the Platforms section, and select HoloLens > Spatial Mapping:

Параметры пространственных привязок для проекта

  • Параметр Max Triangles Per Cubic Meter (Максимальное число треугольников на кубический метр) задает плотность треугольников в сетке пространственного сопоставления.Max Triangles Per Cubic Meter updates the density of the triangles in the spatial mapping mesh.
  • Параметр Spatial Meshing Volume Size (Размер объема для пространственных сеток) задает размер куба вокруг игрока, в пределах которого будут отрисовываться и обновляться данные пространственного сопоставления.Spatial Meshing Volume Size is the size of the cube around the player to render and update spatial mapping data.
    • Если предполагается, что приложение будет выполняться в обширном пространстве, следует указать в этом поле достаточно большое значение, чтобы оно лучше соответствовало пространству реального мира.If the expected application runtime environment is expected to be large, this value may need to be large to match the real-world space. Если приложению нужны голограммы только на поверхностях рядом с пользователем, значение в этом поле может быть небольшим.The value can be smaller if the application only needs to place holograms on surfaces immediately around the user. По мере перемещения пользователя по игровому миру вместе с ним перемещается и пространство для пространственных сопоставлений.As the user walks around the world, the spatial mapping volume will move with them.

Работа с сеткой MRMeshWorking with MRMesh

Сначала вам нужно запустить пространственное сопоставление:First, you need to start Spatial Mapping:

Схема функции ToggleARCapture с выделенным типом захвата Spatial Mapping (пространственное сопоставление)

После захвата пространственного сопоставления для пространства мы рекомендуем отключить его.Once spatial mapping has been captured for the space, we recommend toggling off spatial mapping. Пространственное сопоставление может быть выполнено после определенного периода времени или после того, как лучи, выпущенные во всех направлениях, возвратят столкновения с MRMesh.The spatial mapping may be completed either after a certain amount of time, or when raycasts in each direction return collisions against the MRMesh.

Чтобы получить доступ к сетке MRMesh во время выполнения:To get access to the MRMesh at runtime:

  1. Добавьте к субъекту Blueprint компонент ARTrackableNotify.Add an ARTrackableNotify Component to a Blueprint actor.

AR Trackable Notify для пространственных привязок

  1. Выберите компонент ARTrackableNotify и в панели Details (Сведения) разверните раздел Events (События).Select the ARTrackableNotify component and expand the Events section in the Details panel.
    • Нажмите кнопку + на событиях, которые нужно отслеживать.Select the + button on the events you want to monitor.

События пространственных привязок

В данном случае ведется мониторинг события On Add Tracked Geometry (При добавлении отслеживаемой геометрии), которое ведет поиск действительных мировых сеток, соответствующих данным пространственного сопоставления.In this case, the On Add Tracked Geometry event is being monitored, which looks for valid world meshes matching to spatial mapping data. Полный список событий можно найти в API объекта UARTrackableNotify.You can find the full list of events in the UARTrackableNotify component API.

Изменить материал сетки можно в графе событий схемы или в коде на C++.You can change the mesh’s material in the Blueprint Event Graph or in C++. На приведенном ниже снимке экрана показан вариант действий с графом событий схемы.The screenshot below shows the Blueprint route:

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

Пространственное сопоставление в C++Spatial Mapping in C++

В файле build.cs игры добавьте AugmentedReality и MRMesh в список PublicDependencyModuleNames:In your game's build.cs file, add AugmentedReality and MRMesh to the PublicDependencyModuleNames list:

PublicDependencyModuleNames.AddRange(
    new string[] {
        "Core",
        "CoreUObject",
        "Engine",
        "InputCore",    
        "EyeTracker",
        "AugmentedReality",
        "MRMesh"
});

Чтобы получать доступ к MRMesh, подпишитесь на делегатов OnTrackableAdded:To access the MRMesh, subscribe to the OnTrackableAdded delegates:

#include "ARBlueprintLibrary.h"
#include "MRMeshComponent.h"

void AARTrackableMonitor::BeginPlay()
{
    Super::BeginPlay();

    // Subscribe to Tracked Geometry delegates
    UARBlueprintLibrary::AddOnTrackableAddedDelegate_Handle(
        FOnTrackableAddedDelegate::CreateUObject(this, &AARTrackableMonitor::OnTrackableAdded)
    );
}

void AARTrackableMonitor::OnTrackableAdded(UARTrackedGeometry* Added)
{
    // When tracked geometry is received, check that it's from spatial mapping
    if(Added->GetObjectClassification() == EARObjectClassification::World)
    {
        UMRMeshComponent* MRMesh = Added->GetUnderlyingMesh();
    }
}

Примечание

Также существуют аналогичные делегаты для обновленных и удаленных событий: AddOnTrackableUpdatedDelegate_Handle и AddOnTrackableRemovedDelegate_Handle соответственно.There are similar delegates for updated and removed events, AddOnTrackableUpdatedDelegate_Handle and AddOnTrackableRemovedDelegate_Handle respectively.

Полный список событий можно найти в API объекта UARTrackedGeometry.You can find the full list of events in the UARTrackedGeometry API.

См. также статьюSee also