【MagicLeap × Vuforia】オブジェクトトラッキングをMagicLeapで実装する方法


MagicLeap開発において、画像ではない現実の物体を起点にオブジェクトを生成したいという場合があるかと思います。

その場合、オブジェクトトラッキングとunityを活用してMagicLeapで実装します。

今回の記事ではこの「オブジェクトトラッキング」の実装方法を解説していきます。

※オブジェクトトラッキングの機能としてモデルターゲットの他にオブジェクトターゲットが別途存在しますが、今回はモデルターゲットを「オブジェクトトラッキング」と呼称し取扱います。

オブジェクトトラッキング開発に必要な端末・ソフトウェア

ツール/端末 説明
Magic Leap 1 開発端末
Vuforia オブジェクトトラッキングの機能を提供してくれるツール
Unity  アプリケーション開発環境
現実の物体 トラッキング対象。今回は牛乳パックを使用
3Dモデル生成ツール 今回はTrnio を使用
Blender(任意)   モデリングツール。Trnioで撮影した3Dモデルの余分な部分を削除するために使用

オブジェクトトラッキング実装の大まかな流れ

①現実の物体から3Dモデルを生成します

②3Dモデルにいらないところが含まれていたらblenderで整えます

③整えたモデルをVuforiaが提供している「MTG」というアプリケーションに入れ3Dモデルを加工します

④加工し終わると.unitypackageができるのでそれをUnityにインポートし、ビルドします

⑤ビルドしたものをMagicLeapに入れて完成です

上記クリックすると詳細説明箇所に遷移します。

↑オブジェクトトラッキングの完成形

※トラッキングしていることが分かりやすいように意図的にトラッキングの位置をずらしています。実際はしっかりと重なった状態でトラッキングされます。

詳細なオブジェクトトラッキング実装の手順

①現実の物体から3Dモデルを生成

まず対象となる物体を3Dモデル化する必要があります。

現実の物体を3Dモデル化する方法にはいくつかありますが、今回はApple Storeで提供されているTrnioという有料アプリを用いて3Dモデルを生成しました。

ちなみに、iOSでは数多くの3Dモデル生成アプリがあり、その多くがLiDERセンサーを使用しますが、このTrnioはRGBカメラだけで3Dモデルが生成できるアプリなので、最新のスマートフォンやタブレットをお持ちでない方も活用することができます。

今回、生成した3Dモデルはobj形式で書き出しました。

②Blenderで3Dモデルを整形する

生成した3Dモデルは撮影環境や撮影方法により、時折不要な部分を含んでいたり、斜めになっていたりと扱いにくくなっていることがあります。

上記のように逆さになったり、牛乳パック以外に机の一部も含まれていたりします。

このようにモデルが煩雑な状態では、これからの作業で不都合なことが多くあるためモデルを整える必要があり、今回はblenderを使いました。詳しい内容は公式サイトから学べます。

【整形の手順】

  1. Trnioから書き出されたモデルをblenderにimportして作業を行います。

  2. 位置がずれていたり、角度が斜めになっていた場合には作業をしやすいように原点付近に調整します。
  3. モデルの一部削除はblenderのModelingのタブから作業するとできます。
    以下の画像のようにいらない部分を選択して左クリック。その後、Delete Verticesを選択して削除します。これを繰り返して、いらないところを削除します。
  4. 一通り作業したのち、Exportからこのモデルを書き出します。
    今回はobj形式で書き出しました。
    このblenderでの一連の作業は、操作が分ければ20分弱くらいでできます。

③3DモデルをVufoiraへ登録

整形が完了したら、Vuforiaに3Dモデルを登録していきます。

3Dモデルの登録の前に、Vuforiaを使うために、Vuforiaのdeveloperサイトから登録を行う必要があります。

その後、ダウンロードからModelTargetGeneratar(以下MTG)をダウンロードします。

開発にはライセンスが必要なので、下記の画像のように同サイトのDevelopのタブからからライセンスキーも取得しておきます。

MTGの設定方法

ダウンロードしたMTGを立ち上げ、自分のアカウントでログインして左上にあるCreateボタンから整形した3Dモデルを選んでファイルを生成します。

そうすると3DモデルがVuforiaで加工できるようになるので、各種設定を行います。

以下、各項目での設定の詳細を説明します。

  • Model Up Vector : 見やすい方向を選択
  • Model Type : Defaultを選択
  • Motion Hint : Adaptiveを選択
  • Guide Views : Create Advanced Viewの方を選択

最後に右上のProgressがReadyになっていれば成功です。

公式で言及されている詳しい設定はこちら

MTGの設定に関する補足事項

右側のデータベースを作成するところから、データベースに入れるモデルを作成してクラウドで学習させます。

train開始で出てくる選択はRealisticの方を選びます。

牛乳パックの3Dモデルを処理する場合、1時間弱かかります。

MTGの作業が終了するとExportからunitypackageができます。

④Unityでのインポートと設定

ここからUnityでの作業に入ります。

unityを入れていない方はunityの公式から設定を行ってください。

今回はunityのバージョンは2019.4系を使ってますがMagicLeapSDKとVuforiaに対応するなら他のバージョンでも問題ありません。

⑤Magic Leapの設定

念のために、MagicLeap開発できる状態になるまでの説明を軽くご紹介します。

詳しくは下記のリンクを参考にしてください。

https://xr-hub.com/archives/21691

  • MagicLeapにユーザー登録してライセンス作成
  • SDKとそれに対応したMagicLeapのサンプルをダウンロード
  • Unityでサンプルを開く
  • SDKのパスをそのUnityプロジェクトの設定からパスを通す
  • UnityにMagicLeapのキーを設定する

それではこれまで作成した内容を実際にMagicLeapで体験できるようにしていきます。

まず、Unity Asset StoreでVuforiaのアセットが提供されているので、そのアセットをダウンロードします。

※Unityのversionに対応しているかはこちらから確認ください。

次にライセンスキーを記入します。パスは<Assets  > Resources > VuforiaConfiguration >で記入場所はApp License Key です。

次に、MTGの作業で生成した.unitypackageをUnityにimportします。

AssetStoreからダウンロードしてきたsceneの中に2-ModelTragetsというシーンを探して開いてください。パスは < Assets > Sample Resources > Scenes > 2-Model Targets > です。

Hierarchyの下の+ボタンから < vuforia engine > Model Target > から Model Tragertをシーン上のModelTargetsの子供として生成、もしくはサンプルにあるModelTargetの対象の項目やデータセットをトラッキングしたいものに変更します。

次にModelTargetの親であるModelTargetsのコンポーネントの設定を行います。

Model Target Mode をMODEE_ADVANCEDに設定し、使うデータセットの名前を設定します。下の画像ではBranchNextというのがそれに当たります。

設定し終わったらビルドを行い、The Labを通してMLデバイスにインストールすれば完了です。(以下の画像は再掲)

今回の開発全体に関する追記事項

  • 作業工程がイメージトラッキングより多く、時間のかかる作業が含まれてます。
  • 物体の検知が可能なのが目から30cmくらいから始めます。
  • 良くも悪くも3Dモデルの取得が撮影する人の丁寧さに大きく左右され、検知の精度の大きな要因になっています。

まとめ

以上が、MagicLeapでオブジェクトトラッキングさせる方法でした。

ぜひ、皆様の今後の開発にお役に立てると幸いです。

他にも技術的な記事がたくさんあるので、ぜひご一読ください。

参考記事)【MagicLeap入門】Unityのセットアップ手順を1から解説!

参考記事)【MagicLeap入門】Toolkitのセットアップから使い方を解説


この記事はいかがでしたか?
もし「参考になった」「面白かった」という場合は、応援シェアお願いします!

株式会社x garden CGO(Chief Growth Officer)
Unityエンジニアとして日々Unityと奮闘中
自他共に認めるゲーマー
Splatoon最高記録:世界6位(リグマペア)
ApexLegends最高記録:5連チャンピオン