座標系
基本的に、Mixed Reality アプリは、ホログラムをユーザーの周囲の空間に配置し、実際のオブジェクトと同様に見えたり聞こえたりするようにします。 物理的な部屋であれ、自分が作成した仮想領域であれ、これには、空間内の意味のある場所に、これらのホログラムを正確な位置と向きで配置することが関係します。 Windows には、ジオメトリを表すさまざまな現実世界の座標系が用意されています。これらは 空間座標系と呼ばれます。 これらのシステムを使用して、ホログラムの位置、向き、 視線レイ 、または 手の位置を推論できます。
デバイス サポート
機能 | HoloLens (第 1 世代) | HoloLens 2 | イマーシブ ヘッドセット |
静止座標系 | ✔️ | ✔️ | ✔️ |
従属座標系 | ✔️ | ✔️ | ✔️ |
ステージ座標系 | まだサポートされていません | まだサポートされていません | ✔️ |
空間アンカー | ✔️ | ✔️ | ✔️ |
空間マッピング | ✔️ | ✔️ | ❌ |
シーンの理解 | ❌ | ✔️ | ❌ |
Mixed Reality エクスペリエンスのスケール
Mixed Reality アプリは、ヘッドセットの向きを使用した 360° 動画ビューアーから、空間マッピングと空間アンカーを使用したフル ワールドスケールのアプリやゲームまで、広範囲にわたるユーザー エクスペリエンスに向けて設計できます。
エクスペリエンス スケール | 必要条件 | エクスペリエンスの例 |
---|---|---|
向き限定 | ヘッドセットの向き (垂直) | 360° 動画ビューアー |
着座スケール | 上記に加え、ゼロ位置に基づくヘッドセット位置 | レーシング ゲームやスペース シミュレーター |
立位スケール | 上記に加え、ステージ フロア原点 | 定位置で身をかわしていくアクションゲーム |
ルームスケール | 上記に加え、ステージ境界多角形 | パズルの周りを歩き回るパズル ゲーム |
ワールドスケール | 空間アンカー (通常空間マッピングも含む) | 現実世界の壁から敵が押し入ってくるゲーム (RoboRaid など) |
上記のエクスペリエンス スケールには、"マトリョーシカ人形" のように、上位が下位を包含するモデルが採用されています。 Windows Mixed Realityの主要な設計原則は次のとおりです。特定のヘッドセットは、ターゲット エクスペリエンススケールとより小さいスケール用に構築されたアプリをサポートします。
6DOF トラッキング | フロア定義 | 360° トラッキング | 境界定義 | 空間アンカー | 最大エクスペリエンス |
---|---|---|---|---|---|
No | - | - | - | - | 向き限定 |
はい | いいえ | - | - | - | 着座 |
はい | はい | いいえ | - | - | 立位 - 前方 |
はい | はい | はい | いいえ | - | 立位 - 360° |
はい | はい | はい | はい | いいえ | ルーム |
はい | はい | はい | はい | はい | ワールド |
HoloLens では、ステージ座標系はまだサポートされていません。 HoloLens のルームスケール アプリでユーザーの床や壁を検出するためには、現時点では空間マッピングまたはシーン理解を使用する必要があります。
空間座標系
すべての 3D グラフィックス アプリケーションは、デカルト座標系を使用して、仮想オブジェクトの位置と向きを判断します。 これらの座標系は、X、Y、Z の 3 つの垂直軸を確立します。シーンに追加する各オブジェクトは、座標系内で XYZ 位置を持ちます。 Windows は、物理世界で実際の意味を持つ座標系を 空間 座標系と呼び、その座標値をメートル単位で表します。 つまり、X 軸、Y 軸、Z 軸のいずれかに 2 単位離れた位置に配置されたオブジェクトは、Mixed Reality でレンダリングされるときに、互いに 2 メートル離れて表示されます。 この前提により、現実世界のスケールで簡単にオブジェクトと環境をレンダリングすることができます。
一般に、デカルト座標系は、XYZ 軸の方向を示すために手の位置を使用できるため、"右利き" または "左利き" と呼ばれます。 どちらの座標系でも、正の X 軸は右を指し、正の Y 軸は上を指します。 この 2 つの違いは、右側の座標系では Z 軸が 自分の方 を指し、左側の座標系では Z 軸が自分から 離れている 点です。
Windows 上の空間座標系 (したがって、Windows Mixed Reality) は常に右利きです。
注意事項
- Unity と Unreal では、左側の座標系が使用されます。
- 左利き座標と右利きの座標が最も一般的なシステムですが、3D ソフトウェアで使用される他の座標系もあります。 たとえば、3D モデリング アプリケーションで、Y 軸がビューアーの方向または離れた位置を指し、Z 軸が上を指す座標系を使用することは珍しいことではありません。
向き限定または着座スケールのエクスペリエンスを構築する
ホログラフィックレンダリングの鍵となるのは、動き回るユーザーの予測された頭の動きに合うように、アプリのホログラムに対するビューをフレームごとに変更することです。 ユーザーの頭の位置と頭の向きの変化に着目する着座スケールのエクスペリエンスは、静止座標系を使用して構築できます。
中には、頭の位置の変化を無視し、選択した向きとユーザーからの距離で常に固定しなければならないコンテンツもあります。 その代表的な例が 360° 動画です。360° 動画は、単一の固定視点からキャプチャされるため、ユーザーが見たようにビューの向きが変化する場合でも、ビューの位置がコンテンツに基づいて移動する錯覚を無駄にする可能性があります。 このような向き限定のエクスペリエンス は、従属座標系を使用して構築できます。
静止座標系
静止座標系によって提供される座標系は、ユーザーの頭の位置の変化を考慮しながらも、ユーザーの付近にあるオブジェクトの位置を、その世界に基づいて可能な限り安定的に保つように機能します。
Unity のようなゲーム エンジンにおける着座スケールのエクスペリエンスでは、エンジンの "ワールド原点" が静止座標系によって定義されます。特定のワールド座標に配置されるオブジェクトは、静止座標系における同じ座標を使用して、現実世界における位置が定義されます。 その世界に配置されたまま、ユーザーが歩き回っても同じ位置に留まるコンテンツは、ワールドロックされたコンテンツと呼ばれています。
一般にアプリは、起動時に静止座標系を 1 つ作成し、アプリの存続期間中はずっとその座標系を使い続けます。 Unity でアプリを開発する際は、単に、その原点 (ユーザーの最初の頭の位置と向き) を基準としてコンテンツを配置するだけでかまいません。 ユーザーが別の場所に移動した後も、着座スケールのエクスペリエンスを続けたければ、その位置の中心にワールド原点が来るように再度設定することができます。
時間と共に、ユーザーの環境についてシステムが学習する情報が増えていき、現実世界におけるさまざまなポイント間の距離が、最初の予想よりも長いか短いかをシステムが判断できるようになります。 HoloLens のアプリで、静止座標系にホログラムをレンダリングした場合に、ユーザーの移動範囲が幅約 5 メートルを超えると、それらのホログラムの観測位置にずれが生じることがあります。 ユーザーが歩き回る範囲が 5 メートルを超えるようなエクスペリエンスを想定する場合、ワールドスケールのエクスペリエンスを構築することになり、ホログラムの位置を安定的に維持するためには他の手法が必要となります。以降、その手法について説明します。
従属座標系
従属座標系は、歩き回るユーザーと一緒に移動します。その向きは固定で、アプリによって最初にフレームが作成されたときに定義されます。 これにより、ユーザーは、周囲を見回しながら、その座標系に配置されたコンテンツを快適に閲覧することができます。 このようにユーザーを基準としてレンダリングされるコンテンツは、ボディロックされたコンテンツと呼ばれています。
空間内のどこにいるかをヘッドセットが認識できなくても、従属座標系ならば唯一の座標系が得られ、それを使ってホログラムをレンダリングすることができます。 これは、空間内での位置をデバイスが見失ったことをユーザーに伝えるフォールバック UI を表示するための理想的な機能といえます。 ユーザーの再開を支援するために、着座スケール以上のアプリには、Mixed Reality ホームに表示されるような UI を使用して、向き限定のフォールバック機能を搭載することをお勧めします。
立位スケールまたはルームスケールのエクスペリエンスを構築する
イマーシブ ヘッドセットで着座スケールを超える立位スケールのエクスペリエンスを構築するには、ステージ座標系を使用します。
ルームスケールのエクスペリエンスを提供する場合は、ユーザーによってあらかじめ定義された 5 メートルの範囲内をユーザーに歩き回ってもらえば、ステージ境界もチェックできます。
ステージ座標系
イマーシブ ヘッドセットを最初にセットアップするときに、ユーザーは、ステージを定義します。ステージは、ユーザーが Mixed Reality を体験することになる部屋を表します。 ステージには最低限、ステージ原点、ユーザーによって選択された床位置を中心とする空間座標系、デバイスの使用が意図されている空間における前方方向が定義されます。 このステージ座標系の Y=0 フロア平面にコンテンツを配置することで、ホログラムは、ユーザーが立っている状態のときに違和感なく床の上に表示され、立位スケールのエクスペリエンスがユーザーに提供されます。
ステージ境界
ユーザーは必要に応じて、ステージ境界という、Mixed Reality の中で動き回ることが許された室内の領域を定義することができます。 その場合、アプリでそれらの境界を使用して、ホログラムが常にユーザーの手が届く場所に配置されるようにすることで、ルームスケール エクスペリエンスを構築できます。
ステージ座標系が提供するのは、床との関係性を持ったコンテンツの配置先となる単一の固定座標系であるため、仮想現実ヘッドセット向けに開発された立位スケールやルームスケールのアプリケーションを移植するための最も簡単な手段となります。 ただし、そうした VR プラットフォームと同様、単一の座標系がコンテンツを安定させることができるのは直径約 5 メートル (16 フィート) の範囲内に限られ、それを超えるとレバーアーム効果により、中心から遠く離れたコンテンツの誤差が、システムの調整が加わるにつれて顕著になっていきます。 5 メートルを超える場合は、空間アンカーが必要となります。
ワールドスケールのエクスペリエンスを構築する
HoloLens は、5 メートルの範囲を超えてユーザーが歩き回ることのできる真のワールドスケール エクスペリエンスに対応しています。 ワールドスケールのアプリを構築するには、ルームスケール エクスペリエンスに用いる手法を超えた新たな手法が必要となります。
単一の固定座標系が 5 メートルを超えて使用できない理由
現在、ゲーム、データ視覚化アプリ、または仮想現実アプリを作成する場合、一般的なアプローチは、他のすべての座標が確実にマップできる 1 つの絶対的なワールド座標系を確立することです。 その環境では、その空間における任意の 2 つのオブジェクトの位置関係を定義する安定した変換が常に見つかります。 これらのオブジェクトを移動しなければ、それらの相対変換は常に同じままです。 この種のグローバル座標系は、すべてのジオメトリを事前に知っている純粋な仮想世界をレンダリングするときにはうまく機能します。 今日のルームスケールの VR アプリでは、通常、この種の絶対的ルームスケール座標系の原点がフロアに確立されます。
これに対し、HoloLens などのテザリングされていない Mixed Reality デバイスは、周囲の空間をセンサーにより動的に認識し、ユーザーが建物のフロア全体を何メートルも歩き回るに従って、その周囲に関する知識を経時的に調整し続けます。 ワールドスケールのエクスペリエンスでは、すべてのホログラムを 1 つの固定座標系に配置した場合、それらのホログラムは、時間の経過と共に、周囲の空間または互いの位置関係に基づいて必然的にずれていきます。
たとえばヘッドセットが、ある時点で空間内の 2 つの位置が 4 メートル離れていると認識し、その後、その認識を調整し、その距離が実際には 3.9 メートルであると学習したとします。 仮に最初の時点で、これらのホログラムが 1 つの固定座標系で 4 メートル離れた位置に配置されていたとしたら、そのうちの 1 つは現実世界とは 0.1 メートル分ずれて表示され続けることになるでしょう。
空間アンカー
Windows Mixed Reality では、ホログラムが配置された空間内の重要な座標点をマークする空間アンカーを作成できるようにすることで、前のセクションで触れた問題が解決されています。 空間アンカーは、システムが長期的に追跡する必要がある、ワールド内の重要な点を表します。
周囲の空間をデバイスが学習する際、これらの空間アンカーは、必要に応じて互いにその位置を調整し、それぞれ現実世界に基づいて配置された正確な位置を保つことができます。 ユーザーがホログラムを配置した位置に空間アンカーを配置したうえで、その空間アンカーに基づいてホログラムを配置すれば、たとえユーザーが数十メートル動き回ったとしても、ホログラムは最適な位置安定性を確実に維持します。
このように空間アンカーが相互の位置関係に基づき継続的に調整される点が、空間アンカーに基づく座標系と静止座標系との大きな違いです。
静止座標系に配置されたホログラムはいずれも、固定された相互の位置関係を維持します。 ただし、ユーザーの移動距離が大きいときは、ユーザーの横にホログラムが安定的に表示されるよう、その座標系が、周囲の空間に基づいて補正される場合があります。
ステージ座標系に配置されたホログラムも、固定された相互の位置関係を維持します。 静止座標系とは対照的に、ステージ座標系は、その定義済みの物理的な原点に基づいて常に固定されたままです。 ただし、ステージの座標系にその 5 メートルの境界を超えてレンダリングされるコンテンツは、ユーザーがその境界内に立っている間しか、安定的に表示されません。
ある空間アンカーを使用して配置されたホログラムが、別の空間アンカーを使用して配置されたホログラムに基づいて補正される場合があります。 これによって、Windows は各空間アンカーの位置をよりよく理解することができます。あるアンカーが自身を左に調整し、別のアンカーは右に調整する必要があるような場合でも、正しく位置が認識されます。
常にユーザーの周辺で安定性が最適化される静止座標系とは対照的に、ステージ座標系と空間アンカーでは、その原点付近で安定性が確保されます。 このことは、時間が経過してもホログラムが正確な位置に留まる効果がありますが、ホログラムのレンダリング位置が、その座標系の原点から遠すぎた場合は、しだいにレバーアーム効果の影響が強くなる、ということでもあります。 これは、ステージまたはアンカーの位置と向きに対するわずかな調整が、アンカーからの距離に比例して拡大していくためです。
離れた空間アンカーの座標系に基づいて何かをレンダリングするときは、その原点の約 3 メートル以内に配置するのが、ひとつの目安となります。 ステージの原点付近であれば、離れたコンテンツをレンダリングしても問題ありません。位置誤差が増えたとしても、影響するのは小さなホログラムのみです。ユーザーから見て大きなずれは生じません。
空間アンカーの永続化
空間アンカーは、アプリの中断後やデバイスのシャットダウン後でもアプリが重要な位置を記憶しておくことにも役立ちます。
アプリで作成した空間アンカーをディスクに保存し、アプリの空間アンカー ストアに永続化することで、後からそれらを再び読み込むことが可能です。 アンカーを保存したり読み込んだりするときは、後からアンカーを識別できるよう、アプリにとって意味のある文字列キーを指定します。 このキーは、アンカーのファイル名と考えてください。 そのアンカーに、ユーザーがその場所に配置した 3D モデルなどの他のデータを関連付けたい場合は、アプリのローカル記憶域にそのデータを保存し、自分が選んだキーにそれを関連付けます。
ユーザーは、アンカーをストアに永続化することで、個々のホログラムを配置したり、アプリのさまざまなホログラムを配置するためのワークスペースを配置したりできます。アプリを何度使用しても、後からそれらのホログラムを、自分が把握している場所から見つけることが可能です。
Azure Spatial Anchors を使用して HoloLens、iOS および Android デバイスの間で非同期ホログラムの永続化を行うこともできます。 永続的なクラウド空間アンカーを共有すると、永続化した同じホログラムを長時間にわたって複数のデバイスに表示できます。これらのデバイスが同じ時間に一緒に存在しなくても可能です。
空間アンカーの共有
空間アンカーをリアルタイムで他のデバイスと共有することもできます。これによってリアルタイムの共有エクスペリエンスが実現します。
Azure Spatial Anchors を使用すれば、アプリは複数の HoloLens、iOS、Android のデバイス間で空間アンカーを共有できます。 各デバイスで同じ空間アンカーを使用してホログラムをレンダリングすると、現実世界の同じ場所ですべてのユーザーがホログラムを見ることができます。
ヘッドロックされたコンテンツを避ける
ヘッドロックされたコンテンツのレンダリングは避けるよう強くお勧めします。ヘッドロックされたコンテンツは、ディスプレイ (HUD など) の固定位置に留まります。 一般に、ヘッドロックされたコンテンツは、ユーザーにとって快適ではなく、周囲の空間に自然に溶け込んでいるような感覚もありません。
通常、ヘッドロックされたコンテンツは、ユーザーに従属するホログラムや空間そのものに配置されるホログラムに置き換えることをお勧めします。 たとえば、一般にカーソルは周囲の空間に表示し、オブジェクトの位置と距離を反映するよう、ユーザーの視線下で自然にスケーリングします。
トラッキング エラーに対処する
暗い廊下など一部の環境では、インサイドアウト方式のトラッキングを使用するヘッドセットが、周囲の空間の中で自身の正しい位置を把握できない場合があります。 正しく処理しないと、それが原因でホログラムが表示されなかったり間違った位置に表示されたりすることがあります。 以降、このエラーが発生しうる状況やユーザー エクスペリエンスへの影響、その状況を適切に処理するためのヒントについて取り上げます。
センサー データが不足していてヘッドセットが位置をトラッキングできない
ヘッドセットのセンサーが位置を認識できなくなることがあります。 これは次の場合に発生する可能性があります。
- 部屋が暗い
- センサーが髪や手で覆われている
- 周囲に十分なテクスチャがありません。
この状況では、ワールドロックされたホログラムをレンダリングするのに必要な精度でヘッドセットがその位置をトラッキングできなくなります。 空間アンカーや静止フレーム、ステージ フレームがどこにあるのか、デバイスを基準に判断することができません。 ただし、従属座標系でボディロックされたコンテンツをレンダリングすることは可能です。
アプリは、センサーの覆いを取り除く、照明を付けるといったヒントを表示するボディロックされたフォールバック コンテンツをレンダリングすることで、位置トラッキングの回復方法をユーザーに伝える必要があります。
環境の動的変化によりヘッドセットのトラッキングが不正確になる
室内を大勢の人々が歩き回っているなど、環境の動的な変化が激しいと、デバイスが位置を適切にトラッキングできません。 このケースでは、この動的な環境の中でデバイスが自らをトラッキングしようとして、ホログラムの表示位置が飛んだりずれたりするように見えることがあります。 このような状況に遭遇した場合は、もっと変化の少ない環境でデバイスを使用することをお勧めします。
時間と共に環境が著しく変化したために、ヘッドセットのトラッキングが不正確になる
家具や壁掛けなどの位置が変わっている環境でヘッドセットを使い始めると、ホログラムが元の位置からずれて見えることがあります。 その新しい空間でユーザーが動くと、システムの空間に対する認識がもはや事実とは異なるため、以前のホログラムの表示位置が飛んでしまうこともあります。 その後システムは、部屋の特徴を調整しようとする傍ら、環境の再マッピングを試みます。 このシナリオで、ユーザーによって空間に固定されたホログラムが適切な位置に表示されない場合は、ホログラムの置き換えをユーザーに促すことをお勧めします。
1 つの環境内に同じ空間が複数あるために、ヘッドセットのトラッキングが不正確になる
ときには自宅やその他の空間に、まったく同じ 2 つの領域が存在することもあります。 たとえば、まったく同じ 2 つの会議室、まったく同じ 2 つのコーナー エリア、デバイスの認識範囲を覆うまったく同じ大きな 2 つのポスターなどです。 このようなシナリオでは、まったく同じ部分をデバイスが区別できず、その内部表現の中で両者を同じものとしてマークしてしまう可能性があります。 これが原因で、ホログラムが本来のエリアとは別の場所に表示されてしまうことがあります。 環境に対するデバイスの内部表現が破損しているため、位置のトラッキングに失敗する頻度が多くなっていくことが考えられます。 このような場合は、システムの環境認識をリセットすることをお勧めします。 マッピングをリセットすると、配置されている空間アンカーがすべて失われます。 これによりヘッドセットが、環境内の領域を明確に区別して適切にトラッキングできるようになります。 ただし、同一の領域をデバイスが再び混同した場合には、問題が再発する可能性があります。