Unity Pro Tips

コミュニティー記事詳細

ゼロから学べるUnity MARS 簡単なARナビゲーションを作ろう

<このページで学べる内容>

UnityだけでARコンテンツを手軽に作成できる「Unity MARS」の概要を理解した上で、スマートフォンを利用して現実空間に矢印を出すARナビゲーションコンテンツの作り方をステップバイステップで学べます。今回は以下の環境で検証しています。 ・Unity 2019.4.12f1 LTS ・Unity MARS 1.1.1 ・macOSX 10.15.6(Unityを使用する環境) ・iOS 13.7(iPhone 8)

Unity MARSとは?

Unity MARSとは、UnityベースのMR&ARコンテンツ向けオーサリングツール。正式名称は「Mixed and Augmented Reality Studio」で、Mixed Reality(MR、複合現実)やAugmented Reality(AR、拡張現実)のコンテンツを作ることに特化した機能拡張セットです。UnityでARを扱う手段は他にもありますが、Unity MARSを使うことで、より直感的なコンテンツ作成が可能になります。

例えば、指定した範囲の平面や顔、登録したマーカーなどを検出したらARコンテンツを表示できます。部屋や事務所、工場など、特定空間の特定位置にARを出現させたいときは、3Dモデルで空間を作っておくことで、どのように見えるかというシミュレーションも行えます。これにより、実際の現場でどのようにARが見えるかを直感的に確認できるようになります。

Unity MARSでできること

2020年10月現在、Unity MARS では以下のことができます。前述した内容をより詳しく解説します。

平面を検出してARオブジェクトを表示させる

平面の検出範囲を指定できるため、色々な環境に適用しやすくなります。例えば、以下の画面では、50×50cm〜100×100cmの平面を見つけたらARオブジェクトを表示させるという条件を指定しています。左側の赤枠が平面の例(実際、場所は問いません)、右側の赤枠が条件の指定です。

マーカーを認識してARオブジェクトを表示させる

「Marker Library」という名前で、Unityが提供しているARKitとAR Coreに両対応したマルチプラットフォームAR環境「AR Foundation」の「Reference Image Library」と似た機能になります。画像情報をクラウドにアップロードすることなく、マーカーとして使えます。

Marker Libraryの例を以下に示します。「Add Image」で登録欄を追加し、「Select」部分でProject Viewに配置されている画像を選択して登録します。

以下の例は、Unityロゴのマーカーを検出したら、ナイフとフォークの3DCGオブジェクトをAR表示するという処理の一部です。

顔、および顔の動きを認識してARエフェクトをつける

例えば、以下のようなことができます。

*引用元:https://docs.unity3d.com/Packages/com.unity.mars@1.0/manual/FaceTracking.html#face-tracking-considerations

実空間でのAR表示を事前にシミュレーション

Unity MARSには「Simulation View」、「Device View」という機能があります。Simulation Viewは3DCGで作られた環境のどこにARが表示されるかを俯瞰できる仕組みです。Unity MARSはいくつかの環境や家具などをプリセットで用意しており、Simulation Viewから選択できます。

上の画像の左上がGame Viewで、いつもUnityでコンテンツ開発をするときに使っている確認ウィンドウです。右上のSimulation Viewでは、Game Viewで配置したAR用オブジェクトが、想定した環境でどのように表示されるかをチェックできます。ここでは部屋の環境を表示していますが、ビル、工場、博物館などいろいろな環境を選べます。また、自分で作った3DCGモデルを登録することも可能です。

例えば、自分の部屋を模した壁と床の一部を作って登録した場合、Simulation ViewとDevice Viewでは以下のように表示されます。

画面下半分のDevice Viewでは、視点を移動すると特徴点と検出した平面が次々と現れます。この検出した特徴点は、右上のSimulation Viewでも同期して表示されます。また、指定する条件を満たすとARコンテンツも表示されます。

この2つのSimulation View、Device Viewにより、実機にデプロイしなくてもAR表示がシミュレーションできるわけです。

Unity MARSが向いている方、向いていない方

Unity MARSの利用が向いているのは以下のような方です。

実際に使用する環境をシミュレーションしながらアプリを調整したい

過去のUnityブログにも記載があるように、Unity MARSにおいてはこの部分が最も特徴的です。シミュレーションしながらARアプリ開発を行いたい場合は、Unity MARSが最適です。

Simulation ビュー は、MARS の提供する最も重要な新機能のひとつです。MR/AR アプリケーションの特筆すべき特徴のひとつは、定義が必要な空間が 2 つ(Unity のワールド空間と現実世界の空間)あることです。Simulation ビューでは、オブジェクトを配置して、シミュレートされた現実世界空間でイベントのテストを行うことができます。

https://blogs.unity3d.com/jp/2019/10/02/labs-spotlight-project-mars/

一方、以下のような用途には Unity MARSは向いていません。

VRアプリを作りたい

2020年10月現在、Unity MARSはVRをサポートしていません。Unity MARSの紹介ページにあるように、AR Foundationに対応するデバイスが対象です

AR Foundation を使用して体験を一度ビルドすれば、ARKitARCoreMagic LeapHololens デバイスなどのすべての AR プラットフォームにデプロイできます。Unity MARS に現実世界を理解させるには、AR Foundation の使用を推奨します。

https://unity.com/ja/products/unity-mars

Unity MARSの利用準備

ライセンスの購入

事前準備の方法や詳細は、Unity Technologies Japanの高橋さんが動画にて詳しく説明しているので、本記事では概要だけ記載します。

Unity MARS導入セミナー(7月8日号) - Unityステーション Unity MARS概要編

購入手続きは公式ページの「無料で試す」から行えます。Unity MARSを使用するにはUnityライセンスとは別に1年間のサブスクリプション契約が必要で 72,000円/年となります。購入手続き後45日間は無料で利用できます。

詳細は、動画の18:00〜24:40頃を参照ください。

環境構築

開発用のPCとAR表示させるためのデバイスを準備します。PC、デバイスの対応状況と、今回の動作検証環境は以下のとおりです。

  対応状況 今回の検証環境
開発用PCのOS Windows/MacmacOSX 10.15.6
開発用PCで動かすUnityのバージョンUnity2019.3.0f6以降*1 Unity2019.4.12f1
対応するデバイスHoloLens 2*2、MagicLeap、ARKit/ARCore対応端末*3 iPhone 8(iOS13.7)

*1: https://www.youtube.com/watch?v=9h5TUiIf-Ks (15:49頃)
*2:HoloLens1/2では、一部の機能しか使うことができません
*3: https://docs.unity3d.com/Packages/com.unity.mars-ar-foundation-providers@1.1/manual/index.html

Unity MARSのサブスクリプション契約をすると、.unitypackageのダウンロードリンクを含んだメールが送られてきます。この.unitypackageを自分のUnityにインポートすると、Unity MARSが使えるようになります。

作例:Unity MARSで簡単なARナビゲーションを作る

Unity MARSでできることはいろいろありますが、独特の新しい用語が多いので、実際に簡単なサンプルを作って慣れるのが早いです。この記事では、マーカーを認識してオブジェクトを表示する「Image Marker」を使って簡単なARナビゲーションを作ってみます。

概要

マーカーを認識すると、矢印のオブジェクトを表示するだけのコンテンツです。

上の例では、Simulation Viewであらかじめ部屋の出口付近に矢印を出せるように調整してからiPhoneで動作を確認しています。今回は矢印の位置をSimulation Viewで調整しながら作る方法を紹介します。

部屋の一部をモデリングする

完全なモデリングをすると大変ですが、今回はARで表示する矢印がわかる程度で十分なので、以下のようにシンプルなモデルにしました。

これは私の部屋の一部で、赤枠の部分はドア幅の数値になります。ここに収まるように矢印を配置するのが目的です。3Dモデルができたら、「Myroom.fbx」という名前でFBX形式で保存します。

Unityで新規プロジェクトを作り、部屋のデータをSimulation対象に登録する

今回はUnity2019.4.12f1で「ARSample」という新規プロジェクトを作り、Projectフォルダに先ほどの「Myroom.fbx」をドラッグしてインポートしました。以下の手順を踏むことで「Myroom.fbx」がSimulationで使えるようになります。

1.Hierarchy Viewで右クリック、「Create Empty」で空のGameObjectをつくり、名前を「Myroom」とする

2. 「Inspector」から「Environment Setting」コンポーネントを追加する

3. Hierarchy Viewの「Myroom」オブジェクトを右クリック、「Create Empty」で空のGameObjectを作り、名前を「Clipping Region」とする

4. 「Clipping Region」に「XRay Region」コンポーネントを追加する

5. 「Project」フォルダで「Myroom.fbx」を選択し、Hierarchy Viewの「Myroom」オブジェクトの子になるようにドラッグする

この時点で、「Myroom」というオブジェクトはこのような構成になります。

6. Hierarchy Viewの「Myroom」オブジェクトを「Project」フォルダにドラッグしてPrefabにする

7. 「Project」フォルダに生成された「Myroom Prefab」を選択し、Inspector Viewで「Environment」ラベルを設定する

シーンが未保存の場合、保存してくださいという画面が出るので、シーンに名称をつけて保存します。

これで、Simulation Viewに「Myroom」オブジェクトが追加されます。

Simulation Viewは、「Window」メニューから「MARS」→「Simulation View」と選択することで表示できます。

Simulation Viewで「Myroom」オブジェクトが選べるようになったら、Hierarchy Viewに表示されているMyroomは不要なので削除します。

もし追加されていない場合、Hierarchy Viewの「Myroom」を選択し、Inspector Viewで「MARS Environment Settings」の「Add to Synthetic Environment」を選択します。以下の画像は追加済みなのでグレーアウトしてクリックできませんが、未追加であれば選択可能です。

8. Simulation Viewでライト設定を行う

追加直後は暗いままで見づらいため、ライトを設定します。以下の画像の(1)(2)(3)のように、Simulation Viewの「Select Type」を「Environment」に変更してからライトのアイコンを選択します。

なお、この時点ではSimulation Viewに「Current Scene can’t be simulated.」のような警告が出ていますが、これはまだHierarchy ViewでMARS Session(後述)を入れていないためで、ライト設定には問題ありません。

Simulation Viewでのカメラ移動はFAQに書いてあるとおりです。マウスの右ボタンを押しながらWASDキーで前後左右に移動します。また、右ボタンを押しながら「E」キーで上、「Q」キーで下に移動します。

How do I move in Device View?
First, press the Play button in the View toolbar. Then, hold the right mouse button to look around, and move using WASD controls. Use Q and E to lower and raise your height.

https://docs.unity3d.com/Packages/com.unity.mars@1.0/manual/FAQ.html

Image Markerを使って、マーカを認識したら矢印を表示させる

はじめに、「Window」メニューから「MARS」→「MARS Panel」を選択します。

「MARS Panel」が表示されるので、「Image Marker」を選択します。

この時点で、Hierarchy Viewがこのように変わります。

「Image Marker」だけでなく「MARS Session」も追加され、Main Cameraは「MARS Session」の子オブジェクトに変わり、「MARS Camera」コンポーネントが追加されます。この「MARS Session」の追加で、Simulation Viewに表示されていた「Current Scene can’t be simulated.」の警告が消えます。

「Image Marker」は、マーカ認識をさせるためのコンポーネントですが、空のGameObjectにProxyコンポーネント、Proxyコンポーネントの中に「Marker Condition」というconditionを追加したものと同等です。

Proxyとは、Unity MARS特有の概念です。一般的に、ARアプリは、「〜を認識したら、〜を表示する/実行する」という流れで動きます。たとえば、「マーカーを認識したら矢印を表示させる」とか、「顔を認識したら、メガネを表示させる」などです。

Proxyは、「〜を認識したら」を設定するためのものです。以下の公式マニュアルでは、テーブルの平面を認識したら、という意味で図が表示されています。

引用元:https://docs.unity3d.com/Packages/com.unity.mars@1.1/manual/MARSConcepts.html#proxy

今回は、「マーカーを認識したら」の設定に該当する「Marker Condition」を使います。「Marker Condition」は「Image Marker」の「Inspector」にあります。

「Image Marker」追加直後は、「No marker library Assigned in this Scene」という警告が表示されています。

「Marker library」とは、認識対象のマーカーが登録されたものです。Project viewで「Create」→「MARS」→「Marker Library」と選択し、任意の名前をつけて「marker library」ファイルを作成します。

「Marker Library」に画像を登録します。Projectフォルダに生成された「Marker Library」を選択して「Inspector」上で画像を登録します。

ここではUnityロゴの画像を使用しています。これにより、この画像が認識対象になります。マーカには固有のIDが振られますが、クラウド上で登録するなどはありません。IDは開発環境の中だけで生成されます。

Hierarchy Viewにある「Image Marker」を選択し、「Inspector」でこのMarker Libraryを登録します。

選択し、「+」ボタンを押して先ほど作成したMarker Libraryを選択すると、ライブラリの中に入っている画像が表示されます。マーカのサイズは自分で指定することができます。ここではA4サイズにしました。

この時点で、Scene Viewには登録した画像が貼り付いた板状のオブジェクトが確認できます(見えない場合、Scene Viewで拡大してみてください)。

続けて、マーカが認識されたときに表示される3Dモデルを指定します。今回はBlenderの円錐と円柱の基本図形の組み合わせだけで作った矢印の3Dモデルを使用します。Hierarchy Viewの「Image Marker」の子になるように矢印を配置します。

これで、実機にデプロイすると先ほど登録したMARSという模様の画像を認識して矢印が表示されるようになります。

Simulation ViewでARの表示位置を調整する

Simulation Viewに先ほどのマーカを登録すると、どの辺りにAR表示されるかを確認できます。

マーカーを登録するには、MARS Panel (消えている場合、「Window」メニューから「MARS」→「MARS Panel」で表示させます)の画像の(1)にあたる「Synthetic Image Maker」ボタンを選択します。

ボタンを押すと、上の画像の(2)のように、「Environment Hierarchy」に「Simulated Markers」という階層が表示され、Simulation ViewにはGizmo付きの四角い枠のものが表示されます。

Environment Hierarchyとは、Unityで普段使うScene Viewではなく、Simulation Viewに追加するMARS関係専用のHierarchyです。先ほどの「Synthetic Image Marker」ボタンによって、「MARS Session」に登録したImage LibraryがSimulation Viewに表示されます。

「Simulated Markers」の子オブジェクトに「Simulated Marker」があります。これを「Inspector」で確認して先ほど登録した画像(今回はUnityロゴ)を選択すると、Simulation ViewにUnityロゴ、AR表示させたい3Dモデルが表示されます。

もしSimulation Viewの中にマーカが表示されないときは部屋の3Dモデルに埋もれているか、サイズが小さい可能性があるので、「Transform」や「Size」の数値を調整してみてください。 さて、Simulation Viewに矢印の3Dモデルが表示されていますが、少し壁に寄りすぎているようです。矢印の表示位置を変えるには、Scene Viewに表示してある矢印オブジェクトの位置を変更します。するとSimulation Viewの中でリアルタイムに矢印オブジェクトの位置が移動します。

実機にデプロイして動作を確認する

実際に動かした結果です。アプリ起動後は、なるべくマーカがカメラに大きく映るようにデバイスを移動させました。

このように、Simulation Viewで配置したときと同じような位置に矢印が表示されることが確認できます。このアプリはマーカを認識しないと何も起きないので、アプリが動いていることの確認も兼ねて、特徴点を可視化するGameObjectを追加しています。 (これを追加しなくても動きます)

「Point Cloud Visualizer」は「MARS Panel」から追加します。上の画像の(1)を選択すると、(2)のように、Hierarchy Viewに「Point Cloud Visualizer」が追加されます。これにより、アプリ起動時に特徴点が見えるようになります。

今回のサンプルプロジェクトについて

今回の動画確認ができるためのfbxデータ、maker library、サンプルシーン(sim_test)を1つのunitypackageにまとめてGitHubに公開しています。

https://github.com/flushpot1125/UnityMARS_ImageMarkerTest

以下の手順で開くことができます。

1. Unity2019.4.12f1で新しくプロジェクトを作成する
2. Unity MARSの購入手続きで取得した「MARS_Installer.unitypackage」をインポートする
3..GitHubよりImageMarkerTest.unitypackageをダウンロードしてインポートする
4. iOS/Androidに合わせて、Package ManagerでARKit/ARCore XR Pluginをインストールする
5. 「MyProject」→「sim_test」シーンを開く
6. Build Settingで設定してiOS/Android向けにデプロイする

Simulation ViewにMyroomが追加されていない場合、「sim_test」を開いてから再度Simulation Viewを開いてください。

おわりに

Unity MARSは独特の書き方が多いですが、いろいろと可能性を感じる仕組みです。また、AR Foundationがベースなので対応するデバイスも多く、今後のARコンテンツ開発に適していると思います。

機会あれば、Unity MARSのテンプレートの活用方法など、もう少し詳しい使い方の紹介をしたいと思います。

筆者紹介:Limes

Unity、XRなどに関連した分野を中心にイベント登壇、ブログ執筆などを行っています。 Ex-Unity Certified Developer (2016-2018) / Microsoft MVP for Development Technologies (2016/10-2018/6) / Windows Development (2018/7-) Ph. D.
・Blog:https://www.crossroad-tech.com/
・Twitter: https://twitter.com/WheetTweet

この記事はいかがでしたか?