ホログラムの安定性

安定したホログラムを実現するためにHoloLens には、画像安定化パイプラインが組み込まれています。 安定化パイプラインはバックグラウンドで自動的に動作します。そのため、それを有効にするために追加の手順を行う必要はありません。 ただし、ホログラムの安定性を向上させ、安定性を低下させるシナリオを回避する手法を実行する必要があります。

ホログラム品質の用語

ホログラムの品質は、良好な環境と優れたアプリ開発の結果です。 HoloLens が周囲を追跡できる環境で、毎秒 60 フレームの一定速度で動作するアプリでは、ホログラムとその一致する座標系が確実に同期されます。ユーザーの観点からは、静止しているはずのホログラムが環境に対して相対的に移動することはありません。

次の用語は、環境に関する問題、一貫性のない、または低いレンダリング レート、その他の問題を特定する場合に役立ちます。

  • 精度。 ホログラムがワールド ロックされ、現実世界に配置された後は、ユーザーの動きや小さくてスパースな環境の変化に左右されることなく、周囲の環境と相対的に配置された場所に留まる必要があります。 ホログラムが後で予期しない場所に出現する場合は、精度の問題です。 このようなシナリオは、2 つの異なる部屋が同一に見える場合に発生する可能性があります。
  • ジッター。 ジッターとは、ホログラムの高周波の振動としてユーザーによって観察されるものであり、環境の低下を追跡したときに発生することがあります。 ユーザーにとっての解決策は、センサー チューニングを実行することです。
  • ジャダー。 レンダリング頻度が低いと、ホログラムの動きが不均一になったり、二重像になったりします。 ジャダーは、モーションを持つホログラムで特に顕著です。 開発者は、一定の 60 FPS を維持する必要があります。
  • ドリフト。 ユーザーは、ホログラムが最初に置かれていた場所から離れていくように見えるドリフトを確認します。 ドリフトは、空間アンカー (特に、マップされていない環境の部分) から離れた場所にホログラムを配置すると発生します。 空間アンカーの近くにホログラムを作成すると、ドリフトの可能性が低くなります。
  • ジャンプ性。 ホログラムがときどきその位置から "ポップ" または "ジャンプ" する場合。 追跡によってホログラムが調整され、環境の更新された理解に一致する場合に、ジャンプ性が発生する可能性があります。
  • スイム。 ホログラムがユーザーの頭の動きに応じて動き回っているように見える場合。 スイムは、アプリケーションで再投影が完全には実装されていない場合、HoloLens が現在のユーザーに合わせて調整されていない場合に発生します。 ユーザーは調整アプリケーションを再実行することで問題を解決できます。 開発者は安定性をさらに高めるために安定化平面を更新できます。
  • 色の分離。 HoloLens のディスプレイは、赤緑青緑のカラー チャネルを 60 Hz で点滅させる (個々の色フィールドは 240 Hz で表示されます) カラー シーケンシャル ディス プレイです。 ユーザーが動くホログラムを目で追跡するたびに、ホログラムの前端と後端が構成色で分離され、虹のような効果が生成されます。 分離の程度は、ホログラムの速度によって異なります。 まれに、静止しているホログラムを見ながら頭を素早く動かした場合でも、虹の効果が得られることがありますが、これは色の分離と呼ばれています。

フレーム レート

フレーム レートは、ホログラムの安定性で一番大事な部分です。 ホログラムがワールドで安定して見えるには、ユーザーに提示される各画像の、正しい場所にホログラムが描画されている必要があります。 HoloLens の表示は、1 秒あたり 240 回更新され、新しくレンダリングされたイメージごとに 4 つの個別の色フィールドが表示され、ユーザー エクスペリエンスは 60 FPS (1 秒あたりのフレーム数) になります。 可能な限り最高のエクスペリエンスを提供するには、アプリケーション開発者は 60 FPS を維持する必要があります。これは、16 ミリ秒ごとにオペレーティング システムに新しいイメージを一貫して提供することに相当します。

60 FPS 現実世界に存在しているようにホログラムを描画するには、HoloLens でユーザーの位置から画像をレンダリングする必要があります。 画像のレンダリングには時間がかかるため、HoloLensは、画像がディスプレイに表示される場合にユーザーの頭がどこにあるかを予測します。 ただし、この予測アルゴリズムは近似値です。 HoloLens には、レンダリングされた画像を調整して、予測された頭の位置と実際の頭の位置の不一致を考慮するハードウェアが備わっています。 この調整によって、ユーザーに表示される画像は正しい位置からレンダリングされ、ホログラムは安定しているように見えます。 画像の更新は小さな変更に最適で、モーション視差のような、レンダリングされた画像内の特定のものを完全に修正することはできません。

60 FPS でレンダリングすることで、安定したホログラムを作成するために次の 3 つのことを行っていることになります。

  1. イメージのレンダリングとそのイメージがユーザーに表示されるまでの全体的な待機時間を最小限に抑える。 ロックステップで実行されるゲームとレンダリング スレッドがあるエンジンでは、30 FPS で実行すると、待機時間がさらに 33.3 ms 長くなる可能性があります。 待機時間を短縮することで予測エラーが減少し、ホログラムの安定性が向上します。
  2. ユーザーの目に届くすべての画像の待機時間に一貫性があるようにします。 30 FPS でレンダリングした場合、ディスプレイには 60 FPS の画像が引き続き表示されます。つまり、同じ画像が 2 回連続して表示されます。 2 番目のフレームの待機時間は最初のフレームよりも 16.6 ミリ秒長く、より顕著な量のエラーを修正する必要があります。 このようにエラーの大きさに一貫性がないことで、60 Hz の不要なジャダーが発生することがあります。
  3. 一様ではない動作と二重画像によって特徴付けられるジャダーの出現を減らします。 高速なホログラムの動きと低いレンダリング レートは、顕著なジャダーに関連しています。 常に 60 FPS を維持しようとすることで、特定の移動ホログラムのジャダーを回避できます。

フレーム レートの一貫性 フレーム レートの一貫性は、1 秒あたりのフレーム数と同様に重要です。 コンテンツが豊富なアプリケーションでは、時にフレームが欠落することは避けられませんが、HoloLens には、不定期に発生する障害から復旧するための高度なアルゴリズムがいくつか実装されています。 ただし、常にフレームレートが変動している状態は、低いフレームレートで安定して動作している状態よりも、ユーザーにとって気づきやすいものです。 たとえば、5 つのフレーム (この 5 つのフレームの間は 60 FPS) に対してはスムーズにレンダリングして、次の 10 フレーム (この 10 つのフレームの間は 30 FPS) のフレームを 1 つおきにドロップするアプリケーションは、一貫して 30 FPS でレンダリングするアプリケーションよりも不安定に見えます。

これに関連して、Mixed Reality キャプチャが実行されているとき、オペレーティング システムはアプリケーションを 30 FPS に調整します。

パフォーマンス分析 アプリケーションのフレーム レートのベンチマークには、次のようなさまざまな種類のツールを使用できます。

  • GPUView
  • Visual Studio Graphics Debugger
  • Unity などの 3D エンジンに組み込まれたプロファイラー

ホログラムのレンダリング距離

人間の視覚システムは、オブジェクトを固定して焦点を当わせたときに、距離に依存する複数の信号を統合します。

  • 調節 - 個々の目の焦点。
  • 輻輳 - 2 つの目が内側または外側に動いて対象物を中心にすること。
  • 両眼視 - 左目と右目の画像の視差は、オブジェクトの固視点からの距離によって決まります。
  • シェーディング、相対的な角度のサイズ、その他の単眼の合図。

輻輳と調節は一意です。網膜外の合図は、異なる距離にある物体を認識するために目がどのように変化するかに関係するためです。 自然に見ているときに、輻輳と調節はリンクされています。 目の近くで何かが見える場合 (たとえば、口) は、目が交差し、近くの点に対応します。 目が無限大で何かを見る場合は、目は平行になり、目は無限大に調整されます。

HoloLens を装着したユーザーは、HoloLens の表示がユーザーから約 2.0 m 離れた光学的距離で固定されているため、鮮明な画像を維持するために常に 2.0 m に調整されます。 アプリ開発者は、コンテンツとホログラムをさまざまな深度に配置することで、ユーザーの両目が輻輳する場所を制御します。 ユーザーがさまざまな距離に合わせて調節し、収束する場合、2 つの手がかり間の自然なリンクが分断されます。その結果、特に競合の規模が大きい場合には、視覚の不快感や疲労につながる可能性があります。

ユーザーが収束するコンテンツを可能な限り 2.0 m に近づけることにより、両眼転導と調節の競合による不快感を回避するか最小限に抑えることができます (つまり、深度が大きいシーンでは、可能な場合は 2.0 m 付近に関心領域を配置します)。 コンテンツを 2.0 m 付近に配置できない場合、ユーザーの視線が異なる距離の間で前後に動くときに、両眼転導と調節の競合による不快感が最大になります。 言い換えると、50 cm の距離で静止したホログラムを見る方が、50 cm の距離にあるホログラムが時間の経過と共に近づいたり離れたりするのを見るよりもはるかに快適です。

また、2.0 m の距離にコンテンツを配置すると、2 つのディスプレイが完全に重なり合うように設計されているため、有効です。 この平面の外側に配置された画像の場合、ホログラフィック フレームの側面から移動すると、一方のディスプレイから表示され、もう一方のディスプレイにも表示されます。 この視野闘争は、ホログラムの深度の認識に混乱を与える可能性があります。

ユーザーからホログラムを配置する位置までの最適な距離

ユーザーからホログラムを配置する位置までの最適な距離

クリップ プレーン 快適さを高めるには、レンダリング距離を 85 cmでクリップし、コンテンツのフェードアウトを 1 m から開始することをお勧めします。 ホログラムとユーザーの両方が固定されているアプリケーションでは、ホログラムは 50 cm 近くでも快適に表示できます。このような場合、アプリケーションでクリップ プレーンを 30 cm より離して配置し、フェード アウトはクリップ プレーンから少なくとも 10 cm 離れた場所から開始する必要があります。 コンテンツが 85 cm 以内にある場合は常に、ユーザーがホログラムの近くや遠くに移動することが頻繁に起こらないか、ホログラムがユーザーの近くまたは遠くに移動することが頻繁に行われないかを確認することが重要です。これらの状況は、両眼転導と調節の競合による不快感を引き起こす可能性が最も高いからです。 コンテンツは、ユーザーから 85 cm 以内の操作の必要性を最小限に抑えるように設計する必要がありますが、コンテンツを 85 cm 以内でレンダリングする必要がある場合、開発者は、ユーザーやホログラムが 25% 以上深度方向に移動しないようなシナリオを設計するとよいでしょう。

ベスト プラクティス ホログラムを 2 m に配置できず、収束と順応の間の競合を回避できない場合、ホログラムの配置に最適なゾーンは 1.25 m~5 m です。 どのような場合でも、ユーザーが 1 + m 離れて操作できるようにコンテンツを構成する必要があります (たとえば、コンテンツ サイズと既定の配置パラメーターを調整します)。

再投影

HoloLensには、再投影と呼ばれる高度なハードウェア支援によるホログラフィック安定化手法があります。 再投影では、シーンがアニメーション化され、ユーザーの頭の動きに伴う視点 (CameraPose) の変化を考慮します。 アプリケーションでは、再投影 を最大限に活用するために、特定の操作を実行する必要があります。

再投影には主に 4 種類あります

  • 深度の再投影: アプリケーションでの作業量を最小限に抑えて最適な結果を生成します。 レンダリングされたシーンのすべての部分は、ユーザーからの距離に基づいて、個別に安定化されます。 一部のレンダリングの成果物は、深度に急な変化がある場所で表示されることがあります。 このオプションは、HoloLens 2 とイマーシブ ヘッドセットでのみ使用できます。
  • 平面の再投影: アプリケーションが安定性を正確に制御できるようにします。 アプリケーションによって平面が設定され、その平面上のすべてのものがシーンの最も安定した部分になります。 ホログラムは平面から離れるほど、安定性は低くなります。 このオプションは、すべての Windows MR プラットフォームで使用できます。
  • 自動平面再投影: システムは、深度バッファーの情報を使用して安定化平面を設定します。 このオプションは第 1 世代の HoloLens と HoloLens 2 で使用できます。
  • なし: アプリケーションが何も実行しない場合、平面の再投影は、ユーザーの頭の視線方向に 2 メートルで固定されている、安定化平面に対して使用されます。通常、サブ標準の結果が生成されます。

アプリケーションは、さまざまな種類の再投影を可能にするために、特定のアクションを実行する必要があります

  • 深度の再投影: アプリケーションは、レンダリングされたすべてのフレームの深度バッファーをシステムに送信します。 Unity では、[XR プラグイン管理] の下にある [Windows Mixed Reality 設定] ペインの [共有深度バッファー] オプションを使用して深度の再投影を行います。 DirectX アプリは CommitDirect3D11DepthBuffer を呼び出します。 アプリケーションで SetFocusPoint を呼び出すことはできません。
  • 平面の再投影: すべてのフレームで、アプリケーションは、安定化を行う平面の場所をシステムに伝えます。 Unity アプリケーションは SetFocusPointForFrame を呼び出します。共有深度バッファーを無効にする必要があります。 DirectX アプリは SetFocusPoint を呼び出しますが、CommitDirect3D11DepthBuffer を呼び出すことはできません。
  • 自動平面再投影: 有効にするには、深度の再投影の場合と同じように、アプリケーションが深度バッファーをシステムに送信する必要があります。 Mixed Reality Toolkit (MRTK) を使用するアプリでは、AutoPlanar Reprojection を使用するようにカメラ設定プロバイダーを構成できます。 ネイティブ アプリでは、HolographicCameraRenderingParametersDepthReprojectionMode をフレームごとに AutoPlanar に設定する必要があります。 HoloLens ジェネレーション 1 の場合、アプリケーションは SetFocusPoint を呼び出すことはできません。

再投影技法の選択

安定化の種類 イマーシブ ヘッドセット HoloLens 第 1 世代 HoloLens 2
深度の再投影 推奨 該当なし 推奨

Unity アプリケーションでは、Unity 2018.4.12+、Unity 2019.3+、または Unity 2020.3+ を使用する必要があります。 それ以外の場合は、自動平面再投影を使用します。
自動平面再投影 該当なし 推奨される既定値 深度の再投影で最適な結果が得られない場合に推奨

Unity アプリケーションでは、Unity 2018.4.12+、Unity 2019.3+、または Unity 2020.3+ を使用することをお勧めします。 以前のバージョンの Unity は、再投影結果がわずかに低下するものの動作します。
平面の再投影 非推奨 自動平面で最適な結果が得られない場合に推奨 いずれの深度オプションでも望ましい結果が得られない場合に使用します

深度が正しく設定されていることを確認しています

再投影の方法が深度バッファーを使用する場合は、深度バッファーの内容がアプリケーションのレンダリングされたシーンを表すことを確認することが重要です。 多くの要因によって問題が発生する可能性があります。 たとえば、ユーザー インターフェイスのオーバーレイをレンダリングするために使用される 2 番目のカメラがある場合は、実際のビューのすべての深度情報が上書きされる可能性があります。 透過オブジェクトは、深さを設定しないことが多くあります。 一部のテキストのレンダリングでは、既定で深さが設定されません。 深度がレンダリングされたホログラムと一致しない場合、レンダリングで視認できる不具合が発生します。

HoloLens 2 には、深度が設定されている場所とされていない場所を示すビジュアライザーがあり、デバイス ポータルから有効にすることができます。 [表示]>[ホログラムの安定性] タブで、[ヘッドセットの深度の視覚化の表示] チェックボックスをオンにします。 深度が適切に設定されている領域は青色になります。 深度が設定されていないレンダリング項目は赤でマークされ、修正する必要があります。

Note

深度の視覚化は、Mixed Reality のキャプチャでは表示されません。 デバイスでのみ表示されます。

一部の GPU 表示ツールでは、深度バッファーを視覚化できます。 アプリケーション開発者は、これらのツールを使用して、深さが適切に設定されていることを確認できます。 アプリケーションのツールのドキュメントを参照してください。

平面の再投影の使用

Note

デスクトップのイマーシブ ヘッドセットの場合、安定化平面の設定は、アプリの深度バッファーをシステムに提供してピクセルごとの深度ベースの再投影を有効にするよりも、ビジュアル品質が低下するため通常は逆効果です。 HoloLens で実行しない限り、通常は安定化平面を設定することは避けてください。

3D オブジェクトの安定化平面

デバイスは自動的にこの平面を選択しようとしますが、アプリケーションはシーン内のフォーカス ポイントを選択して支援する必要があります。 HoloLens で実行されている Unity アプリは、シーンに基づいて最適なフォーカス ポイントを選択し、SetFocusPoint() に渡す必要があります。 DirectX でフォーカス ポイントを設定する例は、既定のスピン キューブ テンプレートに含まれています。

Unity は Windows に深度バッファーを送信して、デスクトップ PC に接続されているイマーシブ ヘッドセットでアプリを実行するときに、ピクセルごとの再投影を有効にします。これにより、アプリによる明示的な作業を必要とすることなく、より優れたイメージ品質が提供されます。 アプリが HoloLens で実行されている場合、またはピクセルごとの再投影がオーバーライドされる場合は、フォーカス ポイントのみを指定する必要があります。

// SetFocusPoint informs the system about a specific point in your scene to
// prioritize for image stabilization. The focus point is set independently
// for each holographic camera.
// You should set the focus point near the content that the user is looking at.
// In this example, we put the focus point at the center of the sample hologram,
// since that is the only hologram available for the user to focus on.
// You can also set the relative velocity and facing of that content; the sample
// hologram is at a fixed point so we only need to indicate its position.
renderingParameters.SetFocusPoint(
    currentCoordinateSystem,
    spinningCubeRenderer.Position
    );

フォーカス ポイントの配置は、多くの場合、ホログラムで見ている内容によって異なります。 アプリには参照用の視線ベクトルがあり、アプリのデザイナーは、ユーザーに観察してもらいたいコンテンツを把握しています。

ホログラムを安定させるために開発者が実行できる最も重要なことは 60 FPS でレンダリングすることです。 60 FPS を下回ると、安定化平面の最適化に関係なく、ホログラムの安定性が大幅に減少します。

ベスト プラクティス 安定化平面を設定するための普遍的な方法はなく、アプリに固有のものです。 お客様のシナリオに最も適しているものを試してみることを主としてお勧めします。 ただし、この平面上のコンテンツはすべて完全に安定しているため、できるだけ多くのコンテンツに安定化平面を揃えるようにしてください。

次に例を示します。

  • 平面コンテンツ (読み取りアプリ、ビデオ再生アプリ) のみがある場合は、安定化平面をコンテンツを持つ平面に揃えます。
  • ワールド ロックされている小さな球体が 3 つある場合は、安定化平面がユーザーのビューに現在存在するすべての球体の中心を "通過する" ようにします。
  • 深度が大きく異なるコンテンツがある場合は、より深いオブジェクトを優先します。
  • ユーザーが見ているホログラムに合うように、安定化ポイントをフレームごとに調整してください

避けるべきこと 安定化平面は安定したホログラムを実現するための優れたツールですが、誤用されると、イメージが著しく不安定になる可能性があります。

  • "ファイア アンド フォーゲット" は行わないでください。 安定化表面が、ユーザーの背後に存在したり、ユーザーの視界に入らなくなったオブジェクトに取り付けられてしまったりすることがあります。 安定化平面の法線がカメラ前部の反対側に設定されていることを確認します (例:-camera. forward)
  • 両極端間を急激に行き来するようにして安定化平面を変更しないでください
  • 安定化平面を固定距離/向きに設定したままにしないでください
  • 安定化平面がユーザーを通過しないようにしてください
  • HoloLens ではなくデスクトップ PC で実行する場合は、フォーカス ポイントを設定しないでください。代わりに、ピクセルごとの深度ベースの再投影を利用してください。

色の分離

HoloLens ディスプレイの性質により、"色の分離" と呼ばれる成果物が認識されることがあります。 これは、イメージが個々の基本色 (赤、緑、青) に分離して表示されるものです。 特に白い物体は赤、緑、青の量が多いため、表示すると成果物が目立ちます。 これは、ホログラフィック フレーム間を高速で移動しているホログラムをユーザーが視覚的に追跡する場合に最も顕著です。 成果物が表れる他の様態としては、オブジェクトのゆがみ/変形です。 コントラストが高いか、赤、緑、青などの純粋色を持つオブジェクトの場合、色の分離はオブジェクトのさまざまな部分のゆがみとして認識されます。

ユーザーが頭を横に回転させたときにヘッド ロックされた白い丸いカーソルの色が、どのように分離するかを示す例。

ユーザーが頭を横に回転させるときの、ヘッドロックされた白い丸いカーソルの色の分離の例。

色の分離を完全に回避することは困難ですが、それを軽減するために使用できる手法がいくつかあります。

色の分離は次で見られます。

  • カーソルなどのヘッドロック ブジェクトを含む、すばやく移動するオブジェクト。
  • 安定化平面からかなり遠く離れたオブジェクト。

色の分離の効果を弱めるには、次のようにします。

  • オブジェクトによってユーザーの視線を遅らせます。 慣性のようなものがあり、"バネ" で視線にくっついているように見えるはずです。 この方法では、カーソルの速度が低下し (分離距離が短縮されます)、ユーザーの考えられる視線の背後に配置されます。 ユーザーが視線の移動を止めたときに、すぐに追いつくのであれば、自然な感じがします。
  • ホログラムを動かす場合に、ユーザーが目で追いかけることが想定される場合は、移動速度を 5°/秒未満に維持してください。
  • カーソルには、ジオメトリではなくライトを使用します。 視線に接続された仮想照明のソースは、対話型ポインターとして認識されますが、色の分離は行われません。
  • ユーザーが見つめているホログラムに合わせて、安定化平面を調整します。
  • オブジェクトを赤、緑、または青にします。
  • ぼやけたバージョンのコンテンツに切り替えます。 例えば、丸い白のカーソルを、進行方向を向いた、少しぼやけた線に変更することができます。

これまでと同様に、60 FPS でのレンダリングと安定化平面の設定が、ホログラムを安定させるための最も重要な手法です。 色の分離が目立つ場合は、まずフレーム レートが想定したものであるかどうかを確認してください。

関連項目