空間アンカー
空間アンカーは、システムが長期的に追跡するワールド内の重要な点を表します。 アンカーで固定されたホログラムを正確に固定するため、各アンカーには、他のアンカーや参照のフレームに基づいて調整可能な座標系があります。 アンカーの座標系でホログラムをレンダリングすると、ホログラムの位置は常に最も正確なものになります。 これには、時間の経過と共に、ホログラムの位置を若干調整しなければならないという代償が伴います。システムは、現実世界に基づいてホログラムの位置を継続的に移動させる必要があるためです。
空間アンカーを永続化し、アプリケーション セッション間およびデバイス間で共有することもできます。
- ローカル空間アンカーをディスクに保存して後で読み込み直すと、アプリは 1 台の HoloLens の複数のアプリケーション セッション間で現実世界の同じ場所を計算できます。
- Azure 空間アンカーを使用してクラウド アンカーを作成すると、アプリケーションは複数の HoloLens、iOS および Android デバイス間で空間アンカーを共有できます。 各デバイスで同じ空間アンカーを使用してホログラムをレンダリングすると、現実世界の同じ場所でユーザーがホログラムを見ることができます。 これにより、リアルタイム共有エクスペリエンスを実現できます。
- Azure 空間アンカーを使用して HoloLens、iOS および Android デバイスの間で非同期ホログラムの永続化を行うこともできます。 永続的なクラウド空間アンカーを共有すると、永続化した同じホログラムを長時間にわたって複数のデバイスに表示できます。これらのデバイスが同じ時間に一緒に存在しなくても可能です。
スタンディング スケールまたはルーム スケールで、直径 5 m 以内にあるケーブルが接続されたデスクトップ ヘッドセットを使用して体験する場合、通常は空間アンカーの代わりにステージ座標系を使用することができます。これにより、すべてのコンテンツをレンダリングする単一の座標系が提供されます。 ただし、建物のフロア全体を利用するなど、HoloLens を使用して 5 m 以上動き回るアプリケーションでは、コンテンツを継続的に安定させるために空間アンカーが必要になります。
空間アンカーは、世界の中に固定するホログラムに適しています。空間アンカーは、一度配置すると移動させることはできません。 ユーザーに追従する動的ホログラムには、アンカーに代わる代替案があります。 動的ホログラムは、静止基準系 (Unity のワールド座標系の土台) または接続座標系を使用して配置することをお勧めします。
ベスト プラクティス
以下の空間アンカー ガイドラインを使用すると、現実世界を正確に追跡する安定したホログラムをレンダリングできます。
空間アンカーはユーザーが配置した場所に作成する
通常、ユーザーは空間アンカーを明示的に配置します。
たとえば、HoloLens のアプリケーションで、ユーザーが視線を空間マッピング メッシュに向けることで、ホログラムを配置する場所を決めることができます。 ユーザーがホログラムを配置するためにタップすると、交点に空間アンカーを作成し、アンカーの座標系の原点にホログラムを配置します。
ローカル空間アンカーは、作成が簡単で高いパフォーマンスを提供します。 複数のアンカーが基になるセンサー データを共有できる場合、システムは内部データを結合します。 ユーザーが明示的に配置したホログラムごとに新しいローカル空間アンカーを作成することをお勧めします。ただし、以下に記載されているホログラムの剛性グループなどは除きます。
固定されたホログラムは必ずアンカーから 3 m にレンダリングする
空間アンカーは、アンカーの原点近くの座標系を安定させます。 ホログラムを原点から 3 m 以上離れた場所にレンダリングすると、レバーアーム効果により、原点からの距離に比例した顕著な位置エラーが発生する可能性があります。 ホログラムがユーザーから遠く離れた場所に存在しているため、ユーザーがアンカーの近くに立っている場合は機能します。 つまり、離れたホログラムの角度エラーは小さくなります。 しかし、ユーザーが遠くにあるホログラムに近づくと、ユーザーの視界にあるホログラムは大きくなり、アンカーの原点が離れていることによるレバーアーム効果が顕著になります。
剛体クラスターを形成すべきグループ ホログラム
アプリケーションにおいて、ホログラム同士の位置関係が固定されている場合、複数のホログラムで同じ空間アンカーを共有できます。
たとえば、部屋でホログラムの太陽系をアニメーションさせる場合は、すべての太陽系のオブジェクトを中心にある 1 つのアンカーに関連付けるとよいでしょう。 そうすることで、相互の位置に基づいてスムーズに移動できます。 この場合、太陽系全体はアンカーで固定されますが、太陽系の個々の構成要素はアンカーの周囲を動的に移動します。
ホログラムの安定性を維持するために重要なのは、上記の 3 m 規則に従うことです。
ローカルの空間アンカーの代わりに静止基準系を使用して非常に動的なホログラムをレンダリングする
部屋を歩き回っているキャラクターやユーザーに近い壁のそばに浮かぶ UI など、非常に動的なホログラムがある場合は、ローカルの空間アンカーをスキップし、静止基準系が提供する座標系にホログラムを直接レンダリングすることをお勧めします。 Unity では、WorldAnchor を使わずにワールド座標系にホログラムを直接配置することでこれを実現できます。 ユーザーがホログラムから非常に離れている場合、静止基準系内のホログラムでドリフトが発生する可能性があります。 しかし、これは動的ホログラムでは気づく可能性が低くなります。ホログラムが常に動いているか、あるいはその動きによってホログラムが常にユーザーの近くに維持されると、ドリフトが最小限に抑えられます。
動的ホログラムにおける興味深いケースとして、ある固定の座標系から別の座標系にアニメーションするオブジェクトがあげられます。 たとえば、10 m 離れている 2 つの城で、それぞれに空間アンカーがあり、片方の城からもう片方の城に大砲の弾を発射するとします。 弾が発射されたときには、静止基準系の適切な場所にレンダリングして、最初の城の固定されている座標系上の大砲の位置に重なるようにすることができます。 その後、静止基準系にある弾道をたどって弾を 10 m 飛ばします。 弾がもう片方の城に到達したときに、2 番目の城の固定されている座標系に移動させ、その城の剛体を使用した物理演算を行うことができます。
静止基準系はデバイス間で共有できないので、デバイス間で非常に動的なホログラムを共有している場合は、いずれかのクラウド空間アンカーを選んで親として機能させます。 ただし、ホログラムがすべてのデバイスで安定して表示されるように、動的ホログラムまたはそれを表示するデバイスのどちらかがアンカーから半径 3 m 以内に残る必要があります。
空間アンカーのグリッドを作成しない
ユーザーが動き回る場合、アプリケーションで空間アンカーを規則的に並べたグリッドを作成し、動的なオブジェクトが動くにつれてアンカーからアンカーに移動させたくなるかもしれません。 ただし、これを行う場合、アプリケーションで管理しなければならないことが増加し、システム自体が内部的に保持しているディープ センサーのデータを活用することもできません。 このような場合は、前のセクションで説明したように、ホログラムを静止基準系に配置すると、より良い結果を得ることができます。 静的な領域の周辺に一連のクラウド空間アンカーをあらかじめ配置しておく場合、アンカーのグリッドを作成するのではなく、上記の原則の下でユーザーに表示される重要なホログラムの場所に空間アンカーを配置することを検討してください。 これにより、重要なホログラムを最大限に安定させることができます。
不要になったローカル空間アンカーをリリースする
ローカル空間アンカーがアクティブな間、システムはそのアンカーの近くにあるセンサー データをそばに置き続けることを優先します。 空間のアンカーを使わなくなった場合、その座標系にアクセスしないようにします。 これにより、必要に応じて基となるセンサー データが削除されます。
これは、空間アンカー ストアに永続化させたローカル アンカーにとって特に重要です。 アンカーの背後にあるセンサー データは、今後のセッションでアプリケーションがアンカーを見つけることができるように、永続的に保持されます。そのため、他のアンカーを追跡するために使用できる領域が少なくなります。 今後のセッションでもう一度見つける必要があるローカル アンカーのみを保持します。 ユーザーにとって意味がなくなった場合は、ストアから削除することをお勧めします。
クラウド空間のアンカーのストレージは、シナリオで必要とされるだけ拡張することができます。 必要な数のクラウド アンカーを格納し、ユーザーがアンカーを再び必要としないことがわかったときにリリースできます。