ラスタライザーの順序ビュー
ラスタライザー順序付きビュー (ROV) を使用すると、ピクセル シェーダー コードは UAV バインドを宣言でマークし、UAV のグラフィックス パイプライン結果の順序に対する通常の要件を変更できます。 これにより、Order Independent Transparency (OIT) アルゴリズムが機能し、複数の透明なオブジェクトがビュー内で互いに並んでいる場合のレンダリング結果が大幅に向上します。
概要
標準のグラフィックス パイプラインでは、透明度を含む複数のテクスチャを正しく合成できない場合があります。 ワイヤー フェンス、煙、火災、植生、色付きガラスなどのオブジェクトは、目的の効果を得るために透明度を使用します。 透明性を含む複数のテクスチャが互いに並んでいる場合に問題が発生します (たとえば、植生を含むガラスの建物の前にあるフェンスの前の煙)。 ラスタライザー順序付きビュー (ROV) を使用すると、基になる OIT アルゴリズムでハードウェアの機能を使用して透明度の順序を正しく解決できます。 透明度はピクセル シェーダーによって処理されます。
ラスタライザー順序付きビュー (ROV) を使用すると、ピクセル シェーダー コードは UAV バインドを宣言でマークし、UAV のグラフィックス パイプライン結果の順序に対する通常の要件を変更できます。
ROV は、重複するピクセル シェーダー呼び出しのペアに対する UAV アクセスの順序を保証します。 この場合、"重複" とは、呼び出しが同じ描画呼び出しによって生成され、ピクセル周波数実行モードの場合は同じピクセル座標を共有し、サンプル周波数モードでは同じピクセル座標とサンプル座標を共有することを意味します。
ピクセル シェーダー呼び出しの重複する ROV アクセスが実行される順序は、ジオメトリが送信される順序と同じです。 つまり、重複するピクセル シェーダー呼び出しの場合、ピクセル シェーダー呼び出しによって実行される ROV 書き込みを後続の呼び出しで読み取ることができる必要があり、前の呼び出しによる読み取りに影響を与えてはなりません。 ピクセル シェーダー呼び出しによって実行される ROV 読み取りは、前の呼び出しによる書き込みを反映する必要があり、後続の呼び出しによる書き込みを反映してはなりません。 これは、UAV では、通常、グラフィックス パイプラインの結果の固定順序によって設定される出力インバリアント保証から明示的に省略されるため、重要です。
実装の詳細
ラスタライザー順序付きビュー (ROV) は、次の新しい高レベル シェーダー言語 (HLSL) オブジェクトで宣言され、ピクセル シェーダーでのみ使用できます。
RasterizerOrderedBuffer
RasterizerOrderedByteAddressBuffer
RasterizerOrderedStructuredBuffer
RasterizerOrderedTexture1D
RasterizerOrderedTexture1DArray
RasterizerOrderedTexture2D
RasterizerOrderedTexture2DArray
RasterizerOrderedTexture3D
これらのオブジェクトは、他の UAV オブジェクト (RWBuffer
など) と同じ方法で使用します。
API の概要
ROV は、異なる動作セマンティクスを UAV に適用する HLSL 専用のコンストラクトです。 UAV に関連するすべての API は、ROV にも関連します。 次のメソッド、構造体、およびヘルパー クラスはラスタライザーを参照します。
- D3D11_RASTERIZER_DESC2: ラスタライザーの説明を作成するためのCD3D12_RASTERIZER_DESC2 ヘルパー クラスを示す、ラスタライザーの説明を保持する構造体。
-
D3D11_FEATURE_DATA_D3D11_OPTIONS2: サポートを示すブール
ROVsSupported
を保持する構造体。 - ID3D11Device::CheckFeatureSupport: サポートされている機能にアクセスするためのメソッド。
関連トピック