Unity を検索

Unity MARS のクエリシステムが手続き型レイアウトを行う方法

2020年10月14日 カテゴリ: テクノロジー | 9 分 で読めます
取り上げているトピック
シェア

Unity MARS のクエリシステムは、周囲の現実世界に適応する拡張現実(AR)体験を簡単に作成します。指定した制約に基づいて、与えられた環境のなかでシーンをレイアウトする方法を見つけます。ここでは、このクエリシステムの仕組みについてご紹介します。

Unity MARS は、コンテキストに適応した AR をクリエイターが作成しやすくするために開発されました。私たちは AR 開発者が直面している主な課題、すなわち現実世界と関連するコンテンツの定義、 イテレーション時間と環境下でのテスト、現実世界のさまざまな環境でバーチャルコンテンツのレイアウト方法を適応させることなどを解決したいと考えていました。私たちは、これを適応可能なコンテンツの課題と呼んでいます。

クエリは、Unity MARS が適応可能なコンテンツの課題を解決する方法です。現実世界の場所に統合する必要があるバーチャルコンテンツのそれぞれ別個の部分(または別個のグループ)ごとに、Unity MARS はクエリを考案します。これは、現実世界の一部を記述する意味的にタグ付けされたデータに対するリクエストを意味します。クエリには以下のような高レベルな 2 つの部分があります。

  • クエリに一致するデータを定義する 1 つ以上の条件
  • Unity MARS が一致を見つけたときの動作を指定する 1 つ以上のアクション

各クエリは、バーチャルコンテンツと現実世界との間のリンクを表すプロキシ、またはプロキシグループの複数のプロキシで作成されます。

データエンティティ

Unity MARS データベースの各エントリは、ユーザーの周りにある現実世界の環境の単一の部分を表します。これらの部分には多くの形態があり、最も一般的なものとしては、表面、顔、イメージマーカーなどがあります。

エントリのいずれも、データ ID と呼ばれる番号で識別されます。また、特性(所定のデータタイプの名前付きプロパティ)はいくつあっても構いません。このモデルは、基本的にエンティティコンポーネントシステムと似ています。各特性はコンポーネントのようなものです。

データ使用量

各プロキシには Exclusivity(排他性)と呼ばれるプロパティがあり、一致する対象のデータをどのように使用するか、そして既に使用中のデータに対しては一致しようとする際にクエリがそれをいかに処理するかを制限します。すでに使用されているデータを追跡することで、ユーザーは各種のコンテンツが現実世界の異なる部分に移動することを確認することができます。排他性には次の 3 種類の設定方法があります。

  • 予約済みはこのデータへの排他的なアクセスを要求します。 共有または予約済みプロキシによって既に使用されていない必要があり、一致した後に他のプロキシが読み取り専用でのみ使用することができます。
  • 共有は、このデータの使用を要求していますが、それは排他的ではありません。 その他の共有プロキシがすでに使用している場合は、一致してから使用することができます。
  • 読み取り専用は、オプションを「使い切らない」と宣言しているので、常に任意のデータにアクセスすることができます。

クエリが一致した後、その中のすべてのプロキシはデータの排他性が指定された方法で、そのデータを「使用している」とマークされます。

条件

すべての条件は、検討しているデータの単一の特性を考慮し、条件に適合するかどうかを決定します。表面や顔のような追跡可能なデータに直接適合するのではなく、位置やサイズなどの特性に対して条件を作成する主な利点の 1 つは、同じ特性を持つデータで再利用できることです。

例として、平面サイズ条件を挙げてみましょう。

特性「bounds2dが必要です。これは、プロキシが探しているデータセグメントの 2 軸に沿った境界ボックスの容認サイズを説明し、データタイプ Vector2 (2 個の浮動小数点数)を持ちます。この条件は、「平面」としてタグ付けされ、画像マーカーにも存在する「bounds2d」特性を持つあらゆるデータに対して評価することができます。

まず始めに、Unity MARS は、最小サイズと最大サイズの間に収まらないものを除外して、bounds2d の特性を持つ利用可能なオプションを考慮します。

指定した範囲内に収まるオプションには評価が与えられます。1 は完璧、0 は一致しないとする 0~1 の尺度で、一致の度合いを評価します。これは「適合の度合い」とお考えください。平面サイズの条件では、範囲の中央に近い境界値の方が、端に近い境界値よりも高い評価を受けます。

プロキシに複数の条件がある場合、クエリが一致するためには、それぞれの条件が同じデータによって満たされなければなりません。さらに、各条件に対する評価は結合され、与えられたデータオプションに対してプロキシがどの程度一致するかを記述する評価を形成します。

例えば、プロキシが一致する表面が水平で上向きでなければならないという整列条件を追加した場合、一致する表面は整列条件と同様に前の平面サイズ条件を満たしていなければなりません。

システムは常に、全条件を考慮に入れた際、最高の評価を持つクエリに利用可能な一致を与えるようにしています。

グループと関係

プロキシグループ内に含まれるプロキシはすべて、同時に異なるデータと一致する必要があります。さらに、グループ内の任意の 2 つのプロキシ間の関係を定義することができます。

例として、高低差の関係は、実世界における高低の許容範囲を定義しています。Unity においては、高低差はワールドの Y 軸上の距離となります。ここでは大きな平面を検索しているプロキシと、小さな平面を検索している上方の別のプロキシの間に高低差の関係があり、この2つの間の距離としての関係を定義します。

関係は、両方のメンバーのデータを見ることを除いては、条件と同じように機能します。

高低差の関係はポーズ特性を利用して各オプションの空間内の位置を見つけ、それらが許容範囲内にあるかどうかを判断し、考慮された各可能性に対して 0 から 1 までの評価を与えます。平面サイズの条件と同様に、範囲の中央に近いデータのペアはより理想的であると考えられます。

各可能性のセットが、グループ内のすべての条件とリレーションによって形成された全体的なクエリにどれだけ一致するかを決定するために、グループ内のすべてのリレーションのスコアは、プロキシの条件の場合と同じように、グループ内のすべてのリレーションのスコアを組み合わせて、各グループのスコアを平均化する。

アクション

アクションは、一致が見つかった際に Unity MARS が行う動作を指定します。条件と同様、アクションは一致する特性データによって異なりますが、条件とは異なり複数の必須特性を指定できます。

すべてのプロキシがデフォルトとして備えている最も単純なアクションに Set Pose アクションがあります。これはポーズ特性、Pose 型(ワールド空間内での位置と回転)に依存しています。条件の場合と同様に、この特性を持たないデータオプションは除外されます。

クエリが一致すると、Set Pose アクションは一致したポーズ値を受け取って、バーチャルコンテンツをその位置に移動します。これが、このシミュレーションで見られるように、環境内で一致したクエリがローカライズされる方法です。

優先順位と競合の解決

いくつかのコンテンツを他のコンテンツよりも重要なものとして設定することができます。具体的には、各プロキシまたはプロキシグループに優先度設定を割り当てることができます。優先度には最低から最高までの 5 つのレベルがあり、デフォルト設定は「標準」です。

「競合解決」の段階で優先順位は、どのオブジェクトが最も一致するデータに最初にアクセスするべきかを決定する最初の要因として使用されます。複数のプロキシが同じデータ ID を最も一致するデータとして要求した場合、Unity MARS はどれが最も高い優先度を持っているかを見て、それをプロキシに割り当てます。優先度が等しい場合、データ ID はより良い一致評価を得たプロキシに割り当てられます。

グループグラフ

この問題は、たとえプロキシグループが 1 つだけの場合でもかなり複雑になる場合があります。データで何が起こっているかを概念化するのに役立つ方法として、グラフがあります。‏

ここでは、高低差と距離の関係を持つグループの例を示します。各頂点はプロキシを表し、各辺は 2 つのプロキシ間の関係を表します。

グループの一致の問題は、部分グラフ同型検索という専門用語で表現されます。この場合、システムは単に部分グラフに一致するものを探すのではなく、下のより大きなグラフ、つまり「検索空間」の中で最高の(最高評価の)インスタンスを探しています。この大きなグラフは、求められている関係の有効なインスタンスのセットから導き出されます。

上はすべてのレイヤーを組み合わせた状態で、下は各関係で定義されたレイヤーを分割した状態です。各頂点はデータ実体を表し、各辺は 2 つのデータ実体間の距離関係または高低差関係のいずれかの有効なインスタンスを表します。関係やグループのメンバーが多くなるほど、一致を検索する対象となるサブグラフ内のレイヤーは多くなり、視覚化した結果もより複雑なものとなります。

複雑性に対処する

プロキシグループに対して最も数学的に完全な一致を見つける課題において、グループのメンバーの数とデータセットのサイズが多くなってくると、組み合わせの数が劇的に増大するという現象が起こります。シーン全体が一度に考慮されるため、グループ化されていないプロキシを含む大きなシーンにはこれはあまり当てはまりません。

アプリケーションが断続的に停止することなく、複雑なクエリで動作し続けるために、システムは次の 3 つのことを行います。

まず、クエリを解決するための作業は、名前付きのステージに分け、それぞれの作業の一部を時間をかけて分散して行います。‏

第二に、システムは複雑さが増すにつれて近似戦略を適用します。つまり、非常に複雑なグループクエリに対して返される答えは、適当な計算量の中で見つけられた最良のものになります。

第三に、システムは最も複雑で優先度の高いクエリを最初に解いて、それらのクエリとの最適な一致の可能性を最大化します。より複雑なクエリほど、同じ評価の中で考慮されている他のクエリの考えられうる一致に対して、より大きな影響を与えることができます。

Unity MARS の クエリシステムについての詳細をご確認ください

Unity MARS と、AR 開発者に対するメリットについての詳細情報をご覧ください。また、Unity MARS のクエリシステムと手続き型レイアウトに関連した Unity フォーラム でのディスカッションにもぜひご参加ください。

今すぐ Unity MARS を 45 日間、無料でお試しいただけます。

 

無料トライアルを開始する

2020年10月14日 カテゴリ: テクノロジー | 9 分 で読めます
取り上げているトピック