ARコンテンツ開発ツールMARS(マース)
今回はMARS(Mixed and Augmented Reality Studio)という、
最新のARコンテンツの開発ツールを使ってみました。
ARコンテンツの作成において、
想定されるデプロイ先はモバイルデバイスであり、
デバイス越しに見る現実世界です。
MARSはこれまでの開発効率を一変し、
AR開発におけるイテレーションを加速させるツールです。
Mixed and Augmented Reality Studio (MARS) is a Unity extension that adds new functionality to support augmented and mixed reality content creation.
引用元:Unity
MARS is a Unity extension and a set of companion apps that provide the ability to address real-world objects and events as GameObjects. It comes with a new UI and controls for this dynamic content.
何ができるのか
まずはこちらのEditor上でのデモをご覧ください。

まるでスマホ越しにARを体験するかのように平面を認識し、
認識した平面上にオブジェクトを表示、
さらにはロボットを操作して宝石を回収するゲーム体験まで
全てがEditor上で完結しています。
実際にAndroid端末にデプロイしたものが下記GIFです。
シミュレート時の動作と遜色ない様子が見て取れます。

加えて、このシミュレート空間は様々な空間のシミュレートに対応しています。
下記のようにボタン1つで様々な空間上でシミュレートを行うことができます。

バージョン情報
Unity 2019.3.10f1
MARS version 1.0.1
導入方法
現在45日間のフリートライアルが可能です。
フリートライアルの期間を利用して、
実際に機能を検証し、その目で支払う価値があるか見極めてほしいと
公式のフォーラムでも回答がありました。
I understand that $600 can be onerous for some budgets, but for most of the folks we talked to who were making projects where MARS would slice entire months off the dev cycle, it was worth the price.
In any case, you have a 45 day free trial to see if MARS is really worth the cost. If it turns out it isn’t that valuable to you and your project, but you have other AR-related workflows or systems that are more important, please let us know—our roadmap is largely dictated by you, the users.
引用元:Unity
下記フォームより申請の手順を進みます。
申請フォーム
年額600ドルもしくは月額50ドルを選択できます。

支払方法などを入力後、アカウントと紐づいているアドレスに
メールが届きます。
下記画像を参考にPackageのダウンロードリンクを開いて
プロジェクトに導入します。

Seatの割り当て と緑で囲まれた箇所のリンクを開くと
組織での利用の際、設定が必要なSeatの割り当てについて方法が確認できます。
テンプレートのインポート
今回はMARSのPackageに含まれるテンプレートシーンをベースに
機能を見ていきます。
Editor上からWindow → Package Managerと進みます。
Samplesを下記画像を参考にインポートします。

インポート後、下記パスのシーンを開きます。
Assets/Samples/MARS/1.0.1/MARS Sample Templates/Templates/Game/Game_Simple.unity
ひとまず試したいときは通常のARFoudationをビルドする流れと同様です。
【参考リンク】:ARFaundation触ってみた
Proxy
Proxy(プロキシ)とはシーン内のゲームオブジェクトを
実世界のオブジェクトとして代替できる機能です。
A Proxy is a GameObject in a Scene that acts as a stand-in for a real-world object that your app can detect and use, such as a table, a face, or a cat.
引用元:Unity
例えば、Proxyを利用した場合、
1m×1mの平面を認識した際に平面の上にオブジェクト表示する
という機能を実装したい場合、
1m×1mの認識した平面をシーン内でオブジェクトとして扱うことができます。
さらに、1m×1mの平面を認識した際に~の後に続く処理も
Proxyの設定で関連付けることが可能です。
この機能のおかげで、Editor上でのシミュレートが可能になっています。
Replicator
Replicator(レプリケーター)を使えば、
先ほどProxyを利用した場合の例で挙げた、
1m×1mの認識した平面が多数存在した場合であっても
それぞれをシーン内でオブジェクトとして扱い、
Proxyの設定で任意の処理を関連付けることができます。
You can instruct your app to associate a single instance of a prefab with a particular Proxy or Proxy Group that your app discovers. However, to associate multiple instances of a prefab with numerous matching objects in the real-world, you can use a Replicator.
引用元 : Unity
下記画像は検知した水平方向の平面上に青い宝石を配置するという処理に
Replicatorを付与してシミュレート結果です。

Condition
1m×1mの平面を認識した際に平面の上にオブジェクト表示する
という処理の1m×1mの平面を認識の部分を担うのがConditionです。
今回利用したサンプルシーン内では、
Alignment ConditionとIs Plane Conditionが設定されており、
Alignment Conditionで認識時の向きの設定を行い、
Is Plane Conditonで平面として機能するように要求しています。

1m×1mという条件も設定することは可能です。
Plane Size Conditionを利用すれば、
平面として認識する最小サイズ、最大サイズを設定できます。

Action
1m×1mの平面を認識した際に平面の上にオブジェクト表示する
という処理の平面の上にオブジェクト表示する部分を担うのが
Actionです。
Show Children On Tracking Actionで
平面を認識した際にオブジェクトを表示、
Show Children In Bounds Actionで
平面からはみ出たオブジェクトを非表示にしています。

ちなみになぜ、Show Childrenになっているかというと、
平面としてシーン上に表示したいオブジェクトの子階層に
その平面に関連して処理を行いたいオブジェクトを配置する構造と
なっているからです。

最後に
今回はサンプルシーンをベースにMARSの機能を見ていきました。
しかし、まだまだ試していない機能が大量にあります。
UnityステーションにてMARSに関して非常に丁寧な解説を行っている
アーカイブ動画のリンクを貼っておくので
もっと深く機能について知りたい方は要チェックです。
Unity MARS導入セミナー(7月8日号) – Unityステーション