Unreal での空間マッピングSpatial Mapping in Unreal

空間マッピングを使用すると、HoloLens の周囲の世界を見せることで、物理的な世界の表面にオブジェクトを配置できるようになります。これにより、ホログラムがユーザーにとってより現実的に見えるようになります。Spatial mapping makes it possible to place objects on surfaces in the physical world by showing the world around the HoloLens, which makes holograms seem more real to the user. また、空間マッピングでは、実際の奥行きの手掛かりを利用して、ユーザーの世界にオブジェクトを固定します。これにより、これらのホログラムが実際に空間に存在することをユーザーに納得させることができます。空間に浮かんでいるホログラムやユーザーと一緒に動くホログラムは、それほどリアルではありません。Spatial mapping also anchors objects in the user's world by taking advantage of real world depth cues. This helps convince the user that these holograms are actually in their space; holograms floating in space or moving with the user will not feel as real. できるだけ快適さを追求してアイテムを配置したいと考えています。You 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:

  • [編集] > [プロジェクトの設定] を開いて、 [プラットフォーム] セクションまで下にスクロールします。Open Edit > Project Settings and scroll down to the Platforms section.
    • [HoloLens] を選択し、 [空間認知] をオンにします。Select HoloLens and check Spatial Perception.

空間認知が強調表示されている HoloLens プロジェクト設定機能のスクリーンショット

HoloLens ゲームで空間マッピングをオプトインし、 [MRMesh] をデバッグするには、次のようにします。To opt into spatial mapping and debug the MRMesh in a HoloLens game:

  1. [ARSessionConfig] を開き、 [ARSettings] > [ワールド マッピング] セクションを展開します。Open the ARSessionConfig and expand the ARSettings > World Mapping section.

  2. [追跡対象ジオメトリからメッシュ データを生成する] をオンにします。これにより、空間マッピング データの非同期取得を開始し、MRMesh を介して Unreal に表示するように HoloLens プラグインに指示されます。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. 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:

  • [編集] > [プロジェクトの設定] を開き、 [プラットフォーム] セクションまで下にスクロールして、 [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. 一方、アプリケーションでユーザーの周囲の表面にホログラムを配置するだけであれば、このフィールドを小さくすることができます。On the other hand, this 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.

MRMesh の操作Working with MRMesh

最初に、空間マッピングを開始する必要があります。First, you need to start Spatial Mapping:

空間マッピング キャプチャの種類が強調表示されている ToggleARCapture 関数のブループリント

空間の空間マッピングのキャプチャが済んだら、空間マッピングをオフにすることをお勧めします。Once spatial mapping has been captured for the space, we recommend toggling spatial mapping off. 空間マッピングは、一定の時間が経過した後、または各方向のレイキャストから 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. ブループリント アクターに ARTrackableNotify コンポーネントを追加します。Add an ARTrackableNotify Component to a Blueprint actor.

空間アンカーの AR Trackable Notify

  1. ARTrackableNotify コンポーネントを選択し、 [詳細] パネルの [イベント] セクションを展開します。Select the ARTrackableNotify component and expand the Events section in the Details panel.
    • 監視するイベントの [ + ] ボタンをクリックします。Click the + button on the events you want to monitor.

空間アンカーのイベント

この場合は、 [追跡ジオメトリの追加] イベントが監視され、空間マッピング データに一致する有効なワールド メッシュが検索されます。In this case, the On Add Tracked Geometry event is being monitored, which looks for valid world meshes matching to spatial mapping data. イベントの完全な一覧については、UARTrackableNotify コンポーネント API を参照してください。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 ファイルで、AugmentedRealityMRMesh を 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.

イベントの完全な一覧については、UARTrackedGeometry API を参照してください。You can find the full list of events in the UARTrackedGeometry API.

関連項目See also