Unity Pro Tips

オフィシャル記事詳細

Unity MARS の Simulation システム

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

Unity MARS の Simulation システムは、拡張現実(AR)アプリ開発のテスト時間を短縮します。このシステムは、再生モードと編集モードの両方で、Unity Editor で平面や画像マーカーの検出など、世界を理解する機能を提供します。本記事では、このシステムの詳細と、クリエイターがこれを使用してコンテキストに適応した AR 体験を迅速に反復作成する方法をご紹介します

Unity MARS を使用すると、現実世界にインテリジェントに適応する複雑な AR 体験を簡単に作成できます。このオーサリングツールは、膨大な確率空間の中にあるデータのオーサリング、実世界のシナリオに対するイテレーションとテスト、環境にレスポンシブに適応するアプリの提供という、AR 開発者にとって最も一般的な 3 つのペインポイントを解決するために設計されました。 Simulation は、AR デバイスが物理的環境でどのように動作するかをプレビューする AR テストを Unity Editor 内で行えるようにすることで、イテレーションにかかる時間の問題を解決します。Simulation により、現実世界を模倣した、または現実世界から取り込んださまざまな環境でのテストが容易になります。これによって、適応性とアクセス性に優れたアプリや体験を簡単に作成できるようになります。Simulation を Unity MARS のプロキシおよび条件マッチングシステムと組み合わせることで、クリエイターは空間コンピューティングの限界を押し広げることができます。 システムとしての Simulation は、概念的には別々の機能でありながら、相互に連携してイテレーション時間を大幅に短縮する 2 つのコアな機能に分解することができます。

  1. 編集モードで独立してシーンの実行時のプレビューを行う機能。
  2. エディターで環境シーンを設定し、その環境に基づいた AR データを提供する機能。

Simulation のこれらの部分によって AR 開発がどのように改善されるのか、詳しく見ていきましょう。

実行時プレビューのしくみ

Simulation では、編集モードでシーンの実行時のプレビューを行うことができます。これにより、迅速なイテレーションをサポートし、現実世界のオブジェクトを表す柔軟なプロキシが現実世界でどのように動作するかを瞬時に理解することができます。実行時プレビューのプロセスでは、Simulation はアクティブなシーン内のゲームオブジェクトをコンテンツシーンと呼ばれるプレビューシーンにコピーします。そして、コンテンツシーン内にある、プロセスの実行に含まれる各 MonoBehaviour に runInEditMode フラグを設定します。Simulation のシーンプレビューに対応した MonoBehaviour の記述方法の詳細については、Unity MARS のドキュメントを参照してください。

Simulation ビューを使用すると、このシーン実行時のプレビューを、開いている Unity シーンから分離して操作することができます。Simulation ビューは、環境シーン(次のセクションで環境シーンについて詳しく説明します)の上にレンダリングされたコンテンツシーンを、三人称視点またはカメラの視点から表示するカスタムの Scene ビューです。

Unity MARS では、Simulation プレビューのデフォルトの動作はインスタントモードでの実行となります。このモードでは、実行プロセス全体が単一のフレームで発生し、Unity MARS はそのフレーム内で一度にすべてのデータに対してプロキシをマッチさせようと試みます。この動作は現実的ではありませんが、プロキシとその条件を定義すると即座にフィードバックが得られるという利点があります。

連続モードの Simulation プレビューを手動で開始および停止することもできます。このモードは、プレビューが停止するまでコンテンツシーン内の動作がフレームごとに実行されるという点で、より再生モードに似ています。物理演算や入力などの一部の Unity システムは再生モードでしか動作しないため、連続プレビューでのアプリのインタラクションや動作は制限されています。連続プレビューは、時間の経過とともに変化するデータにアプリがどのように反応するかを確認しながら、シーンの修正を素早く行うことができるので便利です。

Simulation システムは、アクティブなシーンに関連してコンテンツシーンの状態を追跡し、変更を加えても最新の状態を維持します。コンテンツシーンで実行されているコピーを持つオブジェクトのプロパティを変更すると、Simulation はその変更を検出し、その変更が同期されていない、つまりプレビューが再同期されるまで最新の変更が適用されないことを通知します。再同期プロセスでは、Simulation はコンテンツオブジェクトを破棄し、アクティブなシーンの新しいコピーに置き換えてから、新しいコピーの実行を開始します。

Simulation には、プレビューを自動的に再同期するオプションがあります。そのため、プロキシに対して反復して修正を行い、変更した内容が Simulation ビューに反映されるのを即座に確認することができます。これは、標準の Scene ビューだけでなく Simulation ビューでも動作する、Unity MARS のビジュアルオーサリング機能と組み合わせることで、特に強力に機能します。環境のコンテキストでプロキシ条件を変更し、条件のパラメーターの調整によって結果がどのように変化するかを即座に確認することができます。コピーにコストがかかるような大規模で複雑なシーンでは、自動同期オプションを無効にして、必要に応じて手動で再同期することをお勧めします。

Simulation による AR データの提供方法

環境の構築は、Simulation にとって不可欠です。環境とは、Simulation で実行されているアプリコンテンツとは別のオブジェクトのセットです。実際には、環境とは、Simulation ビューと再生モードの Game ビューの両方で、アプリのコンテンツに隠された形でレンダリングされる、独立した物理演算とライティングを使用したシーンのことです。このように分離されているのは、エディターでのテストの動作を AR デバイスでのテストにできるだけ近づけられるように、環境がエディターにおける現実の世界として機能するようにするためです。

データプロバイダーは、環境とコンテンツの間の重要なリンクです。他の種類の AR データプロバイダーと同様に、Simulation プロバイダーはアプリコンテンツと一緒に存在しますが、環境からの情報にもアクセスすることができます。実行時プレビューを使用するためには、これらのプロバイダーが再生モードと編集モードの両方で動作する必要があります。Simulation プロバイダーが環境情報を使用してデータを提供する方法は数多くありますが、Simulation が使用するデータソースには主に、合成データ、記録されたデータ、ライブデータという 3 つのカテゴリがあります。

合成データ

合成データは、実世界のイベントから生成されるのではなく、人為的に作成されます。このデータは、環境シーン内でインスタンス化されたプレハブから得られます。Unity MARS には、部屋、建物、屋外スペースなど、デフォルトの環境プレハブのセットが用意されています。また、独自のシミュレーションされた環境を作成することもできます。 Unity は、モーショントラッキング、ジオロケーション、平面検出、点群検出、画像マーカー検出、光推定などの合成データを使う AR 機能を備えた Simulation をローンチしました。これらのデータのほとんどは、環境プレハブ内の合成オブジェクトから瞬時に提供されます。

Simulation では、シミュレートされたデータ発見のプロセスを通じて、モーショントラッキング、点群検出、平面検出のためのデータを作成することもできます。シミュレートされた発見では、環境プレハブ(シミュレートされた「現実世界」)のコンテンツと Simulation のコンテンツシーン内のメインカメラ(シミュレートされた「デバイス」)の状態に基づいて、動的にデータが提供されます。モバイルデバイス上でのデータ発見をエミュレートするには、カメラが動いたときだけデータを検出し、カメラの錐台に入っている環境の一部だけを利用して、シミュレートされた世界の理解を追加します。また、モバイルデバイスで行うように、「かたまり」のように成長する平面も作成しますが、これらの平面は上下、左右、前後を向いているものに限って作成します。

記録されたデータ

Simulation では、AR セッションの記録を再生してデータを提供することもできます。こうした記録は、近日公開予定の Unity MARS コンパニオンアプリまたは Simulation 自体を使って作成できます。Unity MARS では、顔トラッキングデータの記録サンプルも用意されています。 記録されたセッションデータは、データタイプごとに 1 つのトラックがある Timeline アセットに格納されます。環境内の Playable Director がセッション記録の Timeline を再生し、アプリコンテンツ内のプロバイダーオブジェクトはデータトラックにバインドされているので、実際のデータを提供できます。セッション記録オブジェクトの詳細については、Unity MARS のドキュメントを参照してください。 セッション記録は Timeline として表現されるので、他の Timeline と同様に手を加えることができます。たとえば、ループの動作を変更したり、データトラックの内容を微調整したりできます。

編集モードでは、Timeline ウィンドウ内で記録をスクラブすることもできます。スクラブの重要な注意点として、プロキシシステムとその他の Unity MARS の動作は時間を遡って実行できないという点があります。そのため Simulation システムでは、時間のスクラブを実行時プレビューの再同期を必要とする変更として扱います。実行が再開されると、記録が新たに開始され、新しい時間に追いつくために実行がより高速なタイムスケールで実行されます。時間の再同期に対応した動作の記述方法の詳細については、Unity MARS のドキュメントを参照してください。

ライブデータ

このデータは、リアルタイムな現実世界の出来事から得られます。Unity は、ウェブカメラデバイスを介してライブカメラ画像を提供する機能を備えた Simulation をローンチしました。この場合、環境にはビデオプレイヤーオブジェクトとカメラ画像のクアッドが含まれ、アプリコンテンツ内のデータプロバイダーによって Raw テクスチャが提供されます。このテクスチャから顔トラッキングデータを取得するには、サードパーティのライセンスが必要です。

Unity MARS と AR 開発のレイヤー

Unity MARS は、AR Foundation、Simulation、またはカスタムプロバイダーからのデータを使用できます。これらのデータはすべて、プロキシマッチングシステムで使用される Unity MARS データベースと一般的な AR 機能のためのレイヤーを含む抽象化レイヤーを通過します。このように抽象化しておくことで、アプリのコンテンツとデータを使用するシステムは、データがどのデバイスから来ているのか、またはデータが Simulation から来ているのかどうかを知る必要がなくなります。

Unity は、Simulation が AR 開発のための強力なツールになると考えています。今年中には、Unity MARS を使用しているクリエイターが、プロキシシステムを必要とせずに Simulation システムを使用できるようになる見込みです。クリエイターは Simulation を独自の XR サブシステムとして使用することで、開発中のあらゆる種類の XR プロジェクトに柔軟性と Simulation のサポートを追加しつつ、編集モードのプレビューとエディターの AR 機能を利用できるようになります。もちろん、Simulation を含むすべての Unity MARS の機能は常に AR Foundation で動作します。

Simulation と Unity MARS の詳細について

Unity MARS の詳細については、Unity のウェブページをご覧ください。また、Unity フォーラムで、Simulation に関する詳しい議論や質問にぜひご参加ください。 Unity MARS を始める

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