ホログラフィック レンダリングの概要

ホログラフィック レンダリングを使用すると、アプリケーションは、物理的な世界に正確に配置されているか、作成した仮想領域内にあるかにかかわらず、ユーザーを囲む世界の正確な場所にホログラムを描画できます。 ホログラムは、サウンドとライトで構成されるオブジェクトです。 レンダリングを使用すると、アプリケーションでライトを追加できます。

デバイス サポート

機能 HoloLens (第 1 世代) HoloLens 2 イマーシブ ヘッドセット
表示 ✔️ ✔️ ✔️

ホログラフィック レンダリング

ホログラフィック レンダリングの鍵は、使用されているデバイスの種類を判別することです。 HoloLens など、シースルー ディスプレイを使用するデバイスは、ライトを世界に追加します。 黒いピクセルは完全に透明ですが、より明るいピクセルは徐々に不透明になります。 ディスプレイからのライトが現実世界のライトに追加されるため、白ピクセルは半透明です。

ステレオスコピックのレンダリングでは、ホログラムに対して 1 つの深さのキューが提供されますが、接地効果を追加すると、ユーザーはホログラムの近くにあるサーフェスをより簡単に見られます。 1 つの接地方法として、近くのサーフェスのホログラムの周りに光彩を追加し、この光彩に対して影を描画する方法があります。 このようにして、影は環境からライトを取り去ったように見えます。 空間サウンドはもう 1 つの重要な詳細キューであり、ホログラムの距離と相対位置をユーザーが理解できるようにします。

Windows Mixed Reality イマーシブ ヘッドセットなど、不透明なディスプレイを持つデバイスは、世界をブロックします。 黒のピクセルは黒で塗りつぶされ、その他の色は、ユーザーに対してその色として表示されます。 アプリケーションは、ユーザーに表示されるすべてのものをレンダリングする役割を担います。 これにより、ユーザーに快適なエクスペリエンスを提供するために、一定のリフレッシュ レートを維持することがさらに重要になります。

予測されるレンダリング パラメーター

Mixed Reality ヘッドセット (HoloLens とイマーシブ ヘッドセットの両方) は、ユーザーの周囲と相対的な、ユーザーの頭の位置と向きを継続的に追跡します。 アプリケーションで次のフレームの準備が開始されると、フレームがディスプレイに表示される瞬間に、ユーザーの頭の将来の動きが予測されます。 この予測に基づいて、システムは、そのフレームに使用するビューと投影変換を計算します。 アプリケーションで正しい結果を得るには、これらの変換を使用する必要があります。 システム指定の変換が使用されていない場合、結果のイメージは実世界とは一致せず、ユーザーは不快に感じます。

Note

新しいフレームがディスプレイに到着するタイミングを正確に予測するために、システムは、アプリケーションのレンダリング パイプラインの有効なエンドツーエンドの待機時間を絶えず測定します。 システムはレンダリング パイプラインの長さに合わせて調整されますが、そのパイプラインをできるだけ短く維持することで、ホログラムの安定性を向上させることができます。

システム予測を強化する高度な手法を使用するアプリケーションでは、システム ビューと投影変換をオーバーライドできます。 これらのアプリケーションは、有効な結果を生成するために、カスタム変換の基礎としてシステム提供の変換を使用する必要があります。

その他のレンダリング パラメーター

フレームをレンダリングする場合、システムは、アプリケーションが描画する必要があるバックバッファー ビューポートを指定します。 このビューポートは、多くの場合、フレーム バッファーの最大サイズよりも小さくなります。 ビューポートのサイズにかかわらず、アプリケーションによってフレームがレンダリングされると、システムによってイメージが拡張され、ディスプレイ全体に表示されます。

必要なリフレッシュ レートでレンダリングできないアプリケーションの場合、メモリ負荷やレンダリング コストを減らすようにシステム レンダリング パラメーターを構成できますが、ピクセル エイリアシングが増加します。 バック バッファー形式は変更することもできます。そうすると、一部のアプリでメモリ帯域幅とピクセル スループットの向上に役立つ場合があります。

アプリがレンダリングするように求められているレンダリングの視錐台、解像度、フレームレートは、フレームごとに変化する可能性があり、左と右の目で異なる場合があります。 たとえば、Mixed Reality キャプチャ (MRC) がアクティブであり、写真またはビデオ カメラ ビューの構成がオプトインされていない場合、片目が大きな FOV または解像度でレンダリングされることがあります。

特定のフレームに対して、アプリケーションは、システムによって提供されるビュー変換、投影変換、およびビューポートの解決を使用してレンダリングする必要があります。 また、アプリケーションでは、レンダリングまたは表示パラメーターがフレーム間で固定されたままであると想定するべきではありません。 Unity のようなエンジンは、これらすべての変換を独自のカメラ オブジェクトで処理するので、ユーザーの物理的な動きとシステムの状態が常に尊重されます。 アプリケーションでその世界全体でのユーザーの仮想移動が許可されている場合 (ゲームパッドでのサムスティックの使用など)、そのオブジェクトを移動する、カメラの上に親のリモート処理オブジェクトを追加できます。 これにより、カメラにユーザーの仮想と物理の両方の動きが反映されます。 アプリケーションで、システムによって提供されるビュー変換、投影変換、またはビューポートの各ディメンションを変更する場合は、適切なオーバーライド API を呼び出すことによってシステムに通知する必要があります。

ホログラフィック レンダリングの安定性を高めるために、アプリでは、レンダリングに使用した深度バッファーを Windows の各フレームに提供する必要があります。 アプリが深度バッファーを提供している場合は、カメラからの深度をメートル単位で表した、一貫した深度の値を持つ必要があります。 これにより、ユーザーの頭が予測された位置から少しずれている場合に、システムはピクセルごとの深度データを使用して、コンテンツの安定性を向上させることができます。 深度バッファーを提供できない場合は、焦点と垂直線を提供して、コンテンツの大部分を切断する平面を定義することができます。 深度バッファーと焦点面の両方が指定されている場合、システムは両方を使用する可能性があります。 特に、アプリケーションで動きがあるホログラムを表示する場合は、深度バッファーと、速度ベクトルを含む焦点の両方を提供すると便利です。

このトピックの下位レベルの詳細については、「DirectX でのレンダリング」を参照してください。

ホログラフィック カメラ

Windows Mixed Reality には、ホログラフィック カメラの概念が導入されています。 ホログラフィック カメラは、3D グラフィックス テキストにある従来のカメラに似ています。外部 (位置と向き) と固有のカメラ プロパティの両方を定義します。 (たとえば、フィールド オブ ビューは、仮想 3D シーンを表示するために使用されます)。従来の 3D カメラとは異なり、アプリケーションはカメラの位置、向き、および固有のプロパティを制御できません。 代わりに、ホログラフィック カメラの位置と向きは、ユーザーの移動によって暗黙的に制御されます。 ユーザーの移動は、ビュー変換を使用してフレーム単位でアプリケーションにリレーされます。 同様に、カメラの組み込みプロパティはデバイスの調整された光によって定義され、投影変換を介してフレーム単位でリレーされます。

一般に、1 つのステレオ カメラ用にアプリケーションがレンダリングされます。 堅牢なレンダリング ループでは、複数のカメラがサポートされ、モノラル カメラとステレオ カメラの両方がサポートされます。 たとえば、ユーザーが Mixed Reality キャプチャ (MRC) のような機能をアクティブにした場合に、ヘッドホンの形状に応じて、システムは別の観点からアプリケーションにレンダリングするように要求することがあります。 複数のカメラのサポートが可能なアプリケーションでは、サポートできるカメラの種類オプトインすることによって、それらを取得できます。

ボリューム レンダリング

3D で医療 MRI やエンジニアリング ボリュームをレンダリングする場合、多くの場合、ボリューム レンダリング手法が使用されます。 これらの手法は、Mixed Reality において興味深いものとなり得ます。これにより、ユーザーが頭を動かすだけで自然にそのようなボリュームを主要な角度から見ることができます。

HoloLens (第 1 世代) でサポートされている解像度

  • ビューポートの最大サイズは、HolographicDisplay のプロパティです。 HoloLens は、既定では、ビューポートの最大サイズ (720p (1268 x 720)) に設定されます。
  • ビューポートのサイズは、HolographicCamera で ViewportScaleFactor を設定することによって変更できます。 このスケール係数は 0 から 1 までの範囲内です。
  • HoloLens (第 1 世代) でサポートされている最も低いビューポートのサイズは 720p の 50% です。これは 360p (634x360) です。 これは ViewportScaleFactor が 0.5 です。
  • 視覚の劣化のために 540p よりも低いものは推奨されませんが、ピクセル フィル レートのボトルネックを特定するために使用できます。

HoloLens 2 でサポートされている解決策

  • サポートされているレンダリング ターゲットの現在の最大サイズは、ビュー構成のプロパティです。 既定では、HoloLens 2 はレンダリング ターゲットの最大サイズ (1440x936) に設定されます。
  • アプリでは、RequestRenderTargetSize メソッドを呼び出して新しいレンダリング ターゲット サイズを要求することによって、レンダリング ターゲット バッファーのサイズを変更できます。 新しいレンダリング ターゲット サイズが選択されます。これは、要求されたレンダリング ターゲット サイズ以上になります。 この API によりレンダリング ターゲット バッファーのサイズが変更されます。これにより、GPU でのメモリの再割り当てが必要になります。 これには、GPU のメモリ負荷を減らすためにレンダリング ターゲットのサイズをスケール ダウンすることがあります。また、このメソッドを高頻度で呼び出すことはできません。
  • アプリでは、HoloLens 1 の場合と同じ方法でビューポートのサイズを変更できます。 GPU にメモリの再割り当ては追加されていないため、高頻度で変更できますが、GPU のメモリ負荷を軽減するために使用することはできません。
  • HoloLens 2 でサポートされている最も低いビューポートのサイズは 634 x 412 であり、既定のレンダリング ターゲット サイズが使用されている場合はViewportScaleFactor は約 0.44 です。
  • サポートされている最も低いビューポートのサイズよりも小さいレンダリング ターゲット サイズが指定されている場合、ビューポートのスケール係数は無視されます。
  • 視覚の劣化のために 540p よりも低いものは推奨されませんが、ピクセル フィル レートのボトルネックを特定するために使用できます。

関連項目