yotiky Tech Blog

とあるエンジニアの備忘録

MRTK3 を使ったHoloLens2、Meta Quest3、MagicLeap2のマルチデバイスプロジェクト環境の構築

目次

開発環境

  • Unity 2022.3.21f1
  • MRTK3
    • Input 3.1
    • UX Components 3.1.1
    • Core Definition 3.1.1
  • HoloLens2
    • OpenXR Plugin 1.10.0
  • Meta Quest3
    • OpenXR Plugin 1.10.0
    • Meta XR Core SDK 62.0.0
    • Meta XR Interaction SDK 62.0.0
    • Meta XR Interaction SDK OVR Integration 62.0.0
  • MagicLeap2
    • MagicLeap Setup Tool 2.0.7
    • MagicLeap MRTK3 1.0.0-pre6
    • MagicLeap SDK 2.0.0

概要

MetaQuestとMagicLeapはどちらもプラットフォームがAndroidのため、1つのプロジェクトだと環境が競合する。

また、MagicLeapは他のデバイスと同じMRTKを共有できない。 MagicLeapはMRTKをForkして変更を加えているため、公式のツールからではなく独自のセットアップツールから導入する必要がある。

github.com

更に現時点(2024/3)では、MagicLeapのOpenXRはMRTKでは対応できていないため、OpenXRを使わないようアナウンスされている。

If updating to Magic Leap Unity SDK 1.10.0 or 1.11.0, there may be a compile issue if your project contains the Unity OpenXR package. A workaround for this is to remove the OpenXR package from the project in this situation.

エディタ拡張で環境の設定を切り替える事も考えられるが、今回は「Cubeをハンドトラッキングで操作する」共有のコンテンツプロジェクトとデバイス毎のプロジェクトを分け、upmで参照する構成で環境を構築する。

2024/3/22 追記
MRTK3 でもOpenXRに対応したもよう
検証記事書いた yotiky.hatenablog.com

コンテンツプロジェクト

手順

  • 3D(URP) Template でプロジェクトを作成
  • Mixed Reality Feature Toolで以下をインストール
    • MRTK3
      • MRTK Core Definition 3.1.1
      • MRTK Input 3.1
      • MRTK UX Components 3.1.1
  • Project Settings > Package Manager
  • Package Manager
    • My Registriesを選択して、以下をインストール
      • glTFast
      • KTX/Basis Universal Texture
  • Project Settings > XR Plug-in Management > Project Validation
    • Fix Allを実行
  • 以降、Assets\Contents配下に作成していく

  • 空のSceneを作成してCubeを追加

    • Position Z:1
    • Rotation X:30 Y:30
    • Scale X:0.3 Y:0.3 Z:0.3
    • ObjectManipulator
  • 他プロジェクトから読み込み用のSceneLoaderを作成しておく
public class MainSceneLoader : MonoBehaviour
{
    [SerializeField] private string sceneName = "Main";

    void Start()
    {
        SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
    }
}
  • package.json を追加
{
"name": "com.vnext.contents",
"displayName": "vNext Contents",
"description": "",
"version": "0.0.1",
"unity": "2022.3",
"license": "",
"author": "yotiky",
"dependencies": {}
}
  • Assmebly Definitions を追加
    • 適宜、Assembly Definition References を追加

補足

依存関係のパッケージを追加する場合

  • package.jsonのdependenciesに追加する
  "dependencies": {
    "com.cysharp.r3": "1.1.11",
    "org.nuget.r3" : "1.1.11"
  }
  • 利用する側では、Project Settings > Package Manager でRegistriesが登録されていれば自動で解決してくれる

特殊フォルダー

yotiky.hatenablog.com

HoloLens

手順

  • 3D(URP) Template でプロジェクトを作成
  • Mixed Reality Feature Toolで以下をインストール
    • MRTK3
      • MRTK Core Definition 3.1.1
      • MRTK Input 3.1
      • MRTK UX Components 3.1.1
    • Platform Support
      • OpenXR Plugin 1.10.0
  • Project Settings > Package Manager
  • Package Manager
    • My Registriesを選択して、以下をインストール
      • glTFast
      • KTX/Basis Universal Texture
  • PlatformをUWPに変更
  • Project Settings > XR Plug-in Management > Project Validation
    • Fix Allを実行
  • Project Settings > XR Plug-in Management > OpenXR

    • Enabled Interaction Profilesに以下を追加
  • 新しくSceneを追加

  • Main Cameraを削除して、MRTK XR Rigを追加
    • Camera Offsetを編集
      • Position Y:0
      • Tracking Origin Mode : Device
      • Camera Y Offset : 0
  • MRTKInputSimulator を追加

  • Project Settings > Package Manager

    • add package from disk で コンテンツプロジェクトのpackage.jsonを参照する
    • Packages\manifest.json絶対パスになっているので相対パスに修正しておく
    • "com.vnext.contents": "file:../../Unity.Contents/Assets/Contents",
  • 空のGameObjectを作成して、ContentsSceneLoaderを追加する

  • Build Settings

    • Scenes In Build にこのプロジェクトとコンテンツプロジェクトの2つのSceneを追加する
  • Project Settings > Player

    • Company Name、Product Name、Package Nameを適宜設定

Quest

手順

  • 3D(URP) Template でプロジェクトを作成
  • Mixed Reality Feature Toolで以下をインストール
    • MRTK3
      • MRTK Core Definition 3.1.1
      • MRTK Input 3.1
      • MRTK UX Components 3.1.1
    • Platform Support
      • OpenXR Plugin 1.10.0
  • Project Settings > Package Manager
  • Package Manager
    • My Registriesを選択して、以下をインストール
      • glTFast
      • KTX/Basis Universal Texture
  • PlatformをAndroidに変更
  • Project Settings > XR Plug-in Management > Project Validation
    • Fix Allを実行
  • 新しくSceneを追加
  • Main Cameraを削除して、MRTK XR Rigを追加
    • Camera Offsetを編集
      • Position Y:0
      • Tracking Origin Mode : Device
      • Camera Y Offset : 0
    • Main Cameraを編集
      • Output
        • HDR Rendering : Off
      • Camaera Settings Manager
        • Opaque Display
          • Clear Mode : Solid Color
          • Clear Color : 0,0,0,0
        • Transparent Display
          • Clear Mode : Solid Color
          • Clear Color : 0,0,0,0
  • MRTKInputSimulator を追加
  • Asset Storeから以下をMy Assetsに登録してインストール
    • Meta XR Core SDK
    • Meta XR Interaction SDK
    • Meta XR Interaction SDK OVR Integration
  • 「Enable Meta XR Feature Set」のダイアログが出るが必ずCancelする
    • 永遠と出続ける...
  • Project Settings > Meta XR

    • 以下の項目をignoreしてからFix Allを実行
    • Oculus must be added to the XR Plugin active loaders

    • Unity's OpenXR Plugin is not recommended when using the Oculus SDK, please use Oculus XR Plug-in instead

  • Project Settings > Player

    • 設定が書き換わってるか確認
  • Project Settings > Quality

    • Android のDefault Level をPerfomantに変更

    • Textures
      • Global Mipmap Limit : 0: Full Resolution
      • Anisotropic Textures : Per Texture
    • Soft Particleの設定はない(参考)
    • Terrain
      • Billboards Face Camera Position : チェック

  • Project ウィンドウから URP-Performant のURP Assetを選択

    • Quality
      • Anti Aliasing(MSAA) : 4x
    • Lighting(参考)
      • Additional Light : Per Pixel
      • Per Object Limit : 1

  • Project Settings > XR Plug-in Management

    • OpenXRとMeta XR feature groupをチェック
  • Project Settings > XR Plug-in Management > OpenXR
    • Enabled Interaction Profiles : 空
      • コントローラー使う時は「Oculus Touch Controller Profile」を追加
    • Open XR Feature Groups > Meta XR
      • Hand Tracking : チェック
      • Meta Quest Support : チェック外す
      • Motion Controller Model : チェック
  • Project Settings > XR Plug-in Management > Project Validation

    • 以下の項目を以外のFixを実行
    • Oculus must be added to the XR Plugin active loaders

    • Unity's OpenXR Plugin is not recommended when using the Oculus SDK, please use Oculus XR Plug-in instead

    • Editの項目は適宜無視
  • Scene に空のGameObjectを作成して、OVR ManagerとOVR Passthrough Layerを追加する

    • XR Plug-in Management > Project Validation に Passthrough の項目が出てくるのでFixを実行
    • OVR Manager
      • Target Devices : Quest3にチェック
      • Quest Features > Hand Tracking Support : Controllers And Hands
      • Insight Passthrough : Enable Passthroughにチェック
    • OVR Passthrough Layer
      • Placement : Underlay
      • Opacity : 1
  • Project Settings > Package Manager

    • add package from disk で コンテンツプロジェクトのpackage.jsonを参照する
    • Packages\manifest.json絶対パスになっているので相対パスに修正しておく
    • "com.vnext.contents": "file:../../Unity.Contents/Assets/Contents",
  • 空のGameObjectを作成して、ContentsSceneLoaderを追加する

  • Build Settings

    • Scenes In Build にこのプロジェクトとコンテンツプロジェクトの2つのSceneを追加する
  • Project Settings > Player

    • Company Name、Product Name、Package Nameを適宜設定

補足

コントローラーを使う場合

  • Project Settings > XR Plug-in Management > OpenXR
    • Enabled Interaction Profiles : Oculus Touch Controller Profile を追加する
  • ハンドトラッキングでは操作できなくなる

ずっと出続ける「Enable Meta XR Feature Set」のダイアログ

  • Enableにすると何が変わるかと言うと以下Standaloneの設定

  • Enableにしてみてもさしあたり特に影響なさそうに見える

MagicLeap

手順

  • Magic Leap Hubを開く

    • Package Manager
      • Unity のパッケージをすべてインストール
      • All タブでUnity MRTK3のインストール先フォルダを開いておく
  • 3D(URP) Template でプロジェクトを作成

  • Asset StoreからMagic Leap Setup ToolをMy Assetsに登録してインストール

  • Magic Leap > Project Setup Toolを開く

    • Magic Leap SDK に最新のSDKのフォルダを設定
    • Apply Allを実行
    • Add Magic Leap Registryダイアログ
      • Use Magic Leap Registryを選択
        • Project Settings > Package Managerに追加される
  • Project Settings > XR Plug-in Management > Project Validation
    • 問題がないことを確認
  • Assets\Settings 配下のURP関連ファイルを全て削除
  • 新たにURP Asset(with Universal Renderer)を作成
    • Quality
      • HDR : チェックを外す
    • Shadows
      • Last Border : 5
  • Project Settings > Graphics

    • Scriptable Render Pipeline Settings に作成したURP Assetを設定
  • Mixed Reality Feature Toolで以下をインストール

    • MRTK3
      • MRTK Core Definition 3.1.1
      • MRTK Input 3.1
      • MRTK UX Components 3.1.1
  • Project Settings > Package Manager
  • エクスプローラーでPackagesフォルダを開く

    • com.magicleap.mrtk3フォルダを作成
    • Magic Leap Hubで開いておいたフォルダから、com.magicleap.mrtk3-1.0.0-pre.6.tgzをコピペする
  • Package Manager

    • add package from tarball
      • 上記、com.magicleap.mrtk3-1.0.0-pre.6.tgzを追加する
    • My Registriesを選択して、以下をインストール
      • glTFast
      • KTX/Basis Universal Texture
  • Project Settings > MRTK3
    • ProfileにMRTKProfile-MagicLeapを設定
  • Project Settings > MRTK3 > Magic Leap Settings
    • Permissions で権限を設定
      • EYE_TRACKING
      • HAND_TRACKING
      • etc
    • AndroidManifest.jsonにも追加
<manifest>
    <uses-permission android:name="com.magicleap.permission.EYE_TRACKING" />
    <uses-permission android:name="com.magicleap.permission.HAND_TRACKING" />
</manifest>
  • Project Settings > XR Plug-in Management > Project Validation

    • 問題ないか確認
  • 新しくSceneを追加

  • Main Cameraを削除して、MRTK XR Rig - MagicLeapを追加
    • 公式には書かれてないが必要に応じて、Camera Offsetを編集
      • Position Y:0
      • Tracking Origin Mode : Device
      • Camera Y Offset : 0
  • MRTKInputSimulator を追加

  • Project Settings > Package Manager

    • add package from disk で コンテンツプロジェクトのpackage.jsonを参照する
    • Packages\manifest.json絶対パスになっているので相対パスに修正しておく
    • "com.vnext.contents": "file:../../Unity.Contents/Assets/Contents",
  • 空のGameObjectを作成して、ContentsSceneLoaderを追加する

  • Build Settings

    • Scenes In Build にこのプロジェクトとコンテンツプロジェクトの2つのSceneを追加する
  • Project Settings > Player
    • Company Name、Product Name、Package Nameを適宜設定

補足

ジオメトリシェーダやMRTKの空間メッシュのシェーダを使う場合

KeyBoard

  • プロジェクトで Hololens システム キーボードを使用している場合は、システム キーボードの呼び出しを MRTK の NonNativeKeyboard の代替機能に置き換える必要があります。

関連

yotiky.hatenablog.com