Share via


修理操作

World Locking Tools の再調整操作は、シーン内のオブジェクトの一部を再配置すると、それらのオブジェクトを物理的なワールド アンカーに登録する方がよいとシステムが判断した場合に行います。

このセクションでは、再調整操作に至るまでの状況と、操作自体のしくみについてさらに詳しく説明します。

ここで重要なのは、再調整操作が頻繁に行われないという点です。 Refreeze 操作をトリガーする既定のエラー許容値はアプリケーションによってカスタマイズできますが、通常、Mixed Reality 環境では、異常な状況でのみ Refreeze 操作がトリガーされます。 Refreeze の必要性をもたらす一因となる可能性がある条件には、次のようなものがあります。

  • 環境不十分による追跡の損失。
  • 環境スキャンに影響を与えるヘッドの速い動き。
  • 動的な環境。
  • ループの終了 (つまり、以前にアクセスした場所に戻るラウンドアバウト パスでトラッキング エラーを累積)。

これらの問題の根本原因は不十分な追跡、つまり追跡エラーです。 合理的な環境である程度良好な追跡が行われると、特にスペースの最初のスキャン後に再調整操作がごくまれに発生します。

フラグメント マージ

多くの条件により、複数のフラグメントが存在する可能性があります。最も一般的な原因は、追跡が一時的に失われることです。 フラグメントは、共通の座標空間を共有するオブジェクトのコレクションとして定義されますが、1 つのフラグメントの座標空間は、別のフラグメントに対して不確定に配置されます。

十分な数の新しいセンサー データを受信して処理した後、以前は無関係だった 2 つのフラグメントのコンテンツを同じ空間で互いに適切に配置されるようにするには、フラグメント マージを実行します。

2つ (または以上) のフラグメントのコンテンツがマージされる新しい座標空間は任意です。 ここで言及しておくと、最終的な座標空間はいずれかのスペースの座標空間になり、これは、マージされるすべてのフラグメント (宛先フラグメントを除くすべてのフラグメント) の座標を調整する必要があることのみを意味します。 マージの最終ターゲットとして選択されたフラグメントのコンテンツは影響を受けません。

調整変換は、マージする各ソース フラグメントごとにシステムによって計算されます。 これらのフラグメント内の各接続ポイントの AdjustLocationDelegate は、調整変換を使用して呼び出されます。 この場合も、宛先フラグメントのアタッチメント ポイントは影響を受けず、AdjustLocationDelegates も呼び出されません。

このような状況の一例として、フラグメントの説明にある暗い廊下のようなシナリオで接続された 2 つのルームがあります。 初期フェーズでは、両方のフラグメント (ルーム) がスキャンされましたが、2 つのフラグメントの相対的な位置に関する情報はありません。 そのため、各フラグメントの内容が配置されている座標系は、そのルームにあるすべてのオブジェクト間で一定である限り、任意です。 たとえば、各ルームのコンテンツは、そのルームの南西の角にある座標系を原点する座標系にある場合があります。 同じフラグメント内にある 2 つのオブジェクトの座標は、その 2 つのオブジェクトの相対的な位置を示していますが、2 つの異なるフラグメント内にある 2 つのオブジェクトの座標は、相対的な位置を示すものはありません。

詳細情報が取得されると、2 つ目のフラグメントのコンテンツの座標を調整して、そのコンテンツの座標が最初のフラグメント内のオブジェクトに対して意味を持つようにすることができます。 たとえば、廊下のライトをオンにして廊下を横断する場合、2 つのフラグメントの間に存在するギャップを埋めることができます。 両方のルームにあるすべてのオブジェクトの座標が同じ一貫した座標空間に存在するように調整されている場合、2 つのフラグメントの間に実際の違いがなくなるため、それらのコンテンツはすべて 1 つの共通フラグメントに属していると見なされる場合があります。

複数のフラグメントを 1 つのフラグメントに折りたたむこの操作は、マージ操作です。

ここで重要なのは、ワールド ロックされたスペースのシーンに配置された通常の Unity オブジェクトの場合、マージ操作は効果がないという点です。 再調整操作からのオブジェクト移動は、アタッチメント ポイントによってのみ行われます。

Refreeze 操作

もう 1 つの状況として、アンカーの位置が時間の経過と共に調整されるという状況があります。 これは、最初の大まかなアンカー位置と、物理世界で最近改良された位置との差を補正するために回転/オフセット変換を行うのは適切ではなくなったことを示しています。 アンカー自体は、散発的な空間で互いに常に移動することに注意してください。 ただし、これらのアンカーから派生したアタッチメント ポイントは、ワールド ロックされたスペースに固定されています。

アンカー位置の更新によって、管理対象のアタッチメント ポイントが物理世界により適切に登録される可能性があることをシステムが認識すると、修正イベントが発生します。 新しいセンサー データを反映するためのアタッチメント ポイント位置の調整は、Refreeze 操作と呼ばれます。 マージ操作では、フラグメントのコンテンツはすべて 1 つの変換によって調整され、2 つのフラグメントの座標空間が 1 つの統合空間にマージされますが、Refreeze では、各アタッチメント ポイントに影響を与えるアンカーの更新された位置に基づいて各アタッチメント ポイントが個別に調整されます。

マージ操作の場合と同様に、各アタッチメント ポイントには、AdjustLocationDelegate によって計算された調整変換が通知されます。

条件が正しい場合、Refreeze もマージ操作を実行することがあります。 このマージは、Refreeze の暗黙的な部分と見なされます。マージ用に個別のイベントが生成されることはなく、Refreeze の一部として提供される調整変換には、アンカーの移動による個々の調整と、マージによるフラグメントの調整の両方が含まれます。

イベントの再調整に対応する

マージたは Refreeze のいずれにおいても、イベントの再調整に対する動作はアプリケーション次第です。 より正確に言うと、オブジェクトの種類によって動作が異なる可能性があるため、各アタッチメント ポイント ハンドラー次第になります。 通常、アタッチメント ポイントの影響を受けるオブジェクトは、GameObject.transform を介した調整変換によって移動されます。 その代わりに、頂点を手動で移動するなど、動きは他のメカニズムによって実装される場合があります。 一部のアプリケーションでは、マージの影響を受けたオブジェクトを破棄して、新しい作成サイクルを開始する方が有利な場合があります。

重要なのは、World Locking Tools は、アプリケーションが再調整操作に対してどのように動作するか、また動作するのかどうかに依存しないという点です。 これは、アプリケーション開発者のニーズ次第です。

再調整操作に対する通知と動作に適したメカニズムが アタッチメント ポイント です。 詳細とオプションについては、該当する記事で説明します。

関連項目