ラスタライザー順序指定ビューRasterizer-ordered views

ラスタライザー順序指定ビュー (ROV) により、ピクセル シェーダー コードで、順序指定されていないアクセス ビュー (UAV) のバインディングに対して、UAV のグラフィックス パイプライン結果の順序に関する通常の要件を変更する宣言をマークできます。Rasterizer-ordered views (ROVs) allow pixel shader code to mark unordered access view (UAV) bindings with a declaration that alters the normal requirements for the order of graphics pipeline results for UAVs. これにより、順序非依存の透明性 (OIT) アルゴリズムを動作させることができ、それにより、複数の透明オブジェクトがビュー内で互いに並んでいる場合にレンダリング結果を向上させることができます。This enables order-independent transparency (OIT) algorithms to work, which give much better rendering results when multiple transparent objects are in line with each other in a view.

概要Overview

標準グラフィックス パイプラインでは、透明性を含む複数のテクスチャを正しく合成するのに問題が生じる場合があります。Standard graphics pipelines may have trouble correctly compositing together multiple textures that contain transparency. ワイヤー フェンス、煙、火、植物、色付きガラスなどのオブジェクトでは、目的の効果を得るために透明性が使用されます。Objects such as wire fences, smoke, fire, vegetation, and colored glass use transparency to get the desired effect. 透明性を含む複数のテクスチャが互いに並んでいると、問題が発生します (たとえば、植物を含むガラスの建物の前のフェンスの前の煙)。Problems arise when multiple textures that contain transparency are in line with each other (smoke in front of a fence in front of a glass building containing vegetation, as an example). ラスタライザー順序指定ビュー (ROV) を使用すると、基になる OIT アルゴリズムにより、ハードウェアの機能を使用して透明性の順序を正しく解決しようと試みることができます。Rasterizer-ordered views (ROVs) enable the underlying OIT algorithms to use features of the hardware to try to resolve the transparency order correctly. 透明性はピクセル シェーダーによって処理されます。Transparency is handled by the pixel shader.

ラスタライザー順序指定ビュー (ROV) により、ピクセル シェーダー コードで、UAV のバインディングに対して、UAV のグラフィックス パイプライン結果の順序に関する通常の要件を変更する宣言をマークできます。Rasterizer-ordered views (ROVs) allow pixel shader code to mark UAV bindings with a declaration that alters the normal requirements for the order of graphics pipeline results for UAVs.

ROV により、重複するピクセル シェーダー呼び出しのペアへの UAV アクセスの順序が保証されます。ROVs guarantee the order of UAV accesses for any pair of overlapping pixel shader invocations. この場合、"重複する" とは、呼び出しが同じ描画呼び出しによって生成され、ピクセル周波数実行モードの場合に同じピクセル座標を共有し、サンプル周波数モードの場合に同じピクセルと同じ座標を共有することを意味します。In this case “overlapping” means that the invocations are generated by the same draw calls and share the same pixel coordinate when in pixel-frequency execution mode, and the same pixel and sample coordinate in sample-frequency mode.

ピクセル シェーダー呼び出しの重複する ROV アクセスが実行される順序は、ジオメトリが送信される順序と同じです。The order in which overlapping ROV accesses of pixel shader invocations are executed is identical to the order in which the geometry is submitted. つまり、重複するピクセル シェーダー呼び出しでは、ピクセル シェーダー呼び出しによって実行される ROV 書き込みを、後続の呼び出しで読み取ることができるようにする必要があり、また前の呼び出しによる読み取りに影響が及ばないようにする必要があります。This means that, for overlapping pixel shader invocations, ROV writes performed by a pixel shader invocation must be available to be read by a subsequent invocation and must not affect reads by a previous invocation. ピクセル シェーダー呼び出しによって実行される ROV 読み取りには、前の呼び出しによる書き込みを反映させる必要があり、また後続の呼び出しによる書き込みは反映させないようにする必要があります。ROV reads performed by a pixel shader invocation must reflect writes by a previous invocation and must not reflect writes by a subsequent invocation. これは UAV にとって重要です。固定順序のグラフィックス パイプライン結果によって通常設定される出力不変の保証から明示的に外されるためです。This is important for UAVs because they are explicitly omitted from the output-invariance guarantees normally set by the fixed order of graphics pipeline results.

実装の詳細Implementation details

ラスタライザー順序指定ビュー (ROV) は、次の新しい上位レベルシェーダー言語 (HLSL) オブジェクトを使用して宣言し、ピクセル シェーダーでのみ使用できます。Rasterizer-ordered views (ROVs) are declared with the following new High Level Shader Language (HLSL) objects, and are only available to the pixel shader:

  • RasterizerOrderedBuffer
  • RasterizerOrderedByteAddressBuffer
  • RasterizerOrderedStructuredBuffer
  • RasterizerOrderedTexture1D
  • RasterizerOrderedTexture1DArray
  • RasterizerOrderedTexture2D
  • RasterizerOrderedTexture2DArray
  • RasterizerOrderedTexture3D

これらのオブジェクトは、他の UAV オブジェクト (RWBuffer など) と同じ方法で使用します。Use these objects in the same manner as other UAV objects (such as RWBuffer etc.).

API の概要API summary

ROV は、各種の動作セマンティクスを UAV に適用する HLSL のみの構築物です。ROVs are an HLSL-only construct that applies different behavior semantics to UAVs. UAV に関連するすべての API は、ROV にも関連します。All APIs relevant to UAVs are also relevant to ROVs. 次のメソッド、構造体、およびヘルパー クラスはラスタライザーを参照するので注意してください。Note that the following method, structures, and helper class reference the rasterizer: