🥽

【Unity】Apple Vision Proで画像マーカーによるAR

に公開

Unity Polyspatialを使用したApple Vision Pro向けアプリで画像マーカーを使用したARをおこなう場合、iOSやAndroidのときと同じようにARFoundationのARTrackedImageManagerコンポーネントを使用します。

https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@6.3/manual/features/image-tracking.html

Projectウィンドウで右クリックCreate > XR > Reference Image LibraryによりXRReferenceImageLibraryアセットを作成し、マーカーとして使用する画像を登録します。PolyspatialではSpecify Sizeで実寸値の入力が必須となっています。

次にHierarchyウィンドウで右クリックXR > XR Origin (Mobile AR)XR Originオブジェクトを作成し、このオブジェクトにAdd ComponentからARTrackedImageManagerコンポーネントを追加します。ARTrackedImageManagerコンポーネントのSerialized Libraryプロパティに先ほど作成したXRReferenceImageLibraryを設定します。

画像マーカーを検出したときに表示したいオブジェクトがある場合、Tracked Image Prefabプロパティに表示したいオブジェクトのプレハブを登録します。スクリプトで処理したい場合は以下のようにtrackableChangedプロパティを利用します。

using UnityEngine;
using UnityEngine.XR.ARFoundation;

public class ImageTrackingSample : MonoBehaviour
{
    [SerializeField] ARTrackedImageManager trackedImageManager;

    void OnEnable()
    {
        trackedImageManager.trackablesChanged.AddListener(HandleTrackedImagesChanged);
    }

    void OnDisable()
    {
        trackedImageManager.trackablesChanged.RemoveListener(HandleTrackedImagesChanged);
    }

    void HandleTrackedImagesChanged(ARTrackablesChangedEventArgs<ARTrackedImage> eventArgs)
    {
        foreach (var added in eventArgs.added)
        {
            Debug.Log($"Added: {added.referenceImage.name}");
        }

        foreach (var updated in eventArgs.updated)
        {
            Debug.Log($"Updated: {updated.referenceImage.name}, Tracking State: {updated.trackingState}");
        }

        foreach (var removed in eventArgs.removed)
        {
            Debug.Log($"Removed: {removed.Value.referenceImage.name}");
        }
    }
}

画像トラッキングはvisionOSのWorld Trackingとは連動していないようで、ARAnchorManagerコンポーネントを用いたAnchorトラッキングと比べて位置合わせの精度が落ち、位置の補正も1秒に1回程度しか行われないのでカクついたような挙動になります。ただし、画像マーカーから離れたり視線を外したりしてARTrackedImagetrackingStateLimitedになるとWorld Trackingによる位置合わせになるようです。

ARTrackedImageManagerコンポーネントにはMax Number Of Moving Imagesという動く画像マーカーに対応するためのプロパティがありますが、Apple Vision Proは動く画像マーカーには対応していないようで、値を変えても挙動は変わりません。

https://discussions.unity.com/t/polyspatial-support-for-moving-images/334254

ARTrackedImageManagerはカクついたような表示となるので、画像マーカーをもとにしたARをしたい場合、ARAnchorManagerと組み合わせて画像マーカーを認識したらWorld Anchorを同じ場所に配置してアンカーにより位置合わせしたほうが良い結果になるかもしれません。

Discussion