1

MRT を使用して遅延シェーディングを実装しようとしています。そのためには、2 つのレンダリング ターゲットに色と法線を蓄積する必要があります。R32G32B32A32そのために 2 つのテクスチャを定義しました。

ピクセル バッファーは、両方のレンダリング ターゲットに出力します。ただし、値を置き換えたりブレンドしたりするのではなく、値を累積するように指示するにはどうすればよいですか?

次のブレンド状態を定義してみました:

blendState.RenderTarget[0].BlendEnable =            TRUE;
blendState.RenderTarget[0].RenderTargetWriteMask =  D3D11_COLOR_WRITE_ENABLE_ALL;
blendState.RenderTarget[0].SrcBlend =               D3D11_BLEND_ONE;
blendState.RenderTarget[0].DestBlend =              D3D11_BLEND_ONE;
blendState.RenderTarget[0].BlendOp =                D3D11_BLEND_OP_ADD;
blendState.RenderTarget[0].SrcBlendAlpha =          D3D11_BLEND_ONE;
blendState.RenderTarget[0].DestBlendAlpha =         D3D11_BLEND_ONE;
blendState.RenderTarget[0].BlendOpAlpha =           D3D11_BLEND_OP_ADD;
blendState.RenderTarget[1].BlendEnable =            TRUE;
blendState.RenderTarget[1].RenderTargetWriteMask =  D3D11_COLOR_WRITE_ENABLE_ALL;
blendState.RenderTarget[1].SrcBlend =               D3D11_BLEND_ONE;
blendState.RenderTarget[1].DestBlend =              D3D11_BLEND_ONE;
blendState.RenderTarget[1].BlendOp =                D3D11_BLEND_OP_ADD;
blendState.RenderTarget[1].SrcBlendAlpha =          D3D11_BLEND_ONE;
blendState.RenderTarget[1].DestBlendAlpha =         D3D11_BLEND_ONE;
blendState.RenderTarget[1].BlendOpAlpha =           D3D11_BLEND_OP_ADD;

しかし、私が得ている値は奇妙です。

助けてください!値を累積するにはどうすればよいですか?

4

1 に答える 1

1

遅延シェーディングを実装するには、技術的には法線または色を蓄積しないでください。これは、遅延処理 (光の計算/オクルージョン/被写界深度...) を実行するときに、各 MRT テクスチャ ピクセル (色/深度/法線) が必要になるためです。視点から最も近いオブジェクトを表します。

したがって、深さの状態を読み取り/書き込みに設定し、比較関数をless/lessequalに設定するだけで、ブレンドはまったく行われません。

于 2012-09-24T19:21:48.150 に答える