私が知っている限り、すべてのブレンディング操作にRT 0のアルファを再利用する方法はDXまたはGLにはありません。残念ながら、それはハードウェアでサポートされているものではないようです。
レンダーターゲットごとに異なるブレンドモードを構成したり、一部のブレンドモードを有効にしたり、他のブレンドモードを無効にしたりできます。ただし、レンダーターゲットでブレンドが有効になっている場合は、常に独自のアルファが使用されます。
「デュアルソースブレンディング」と呼ばれるモード(DX11ドキュメントとOGLドキュメントを参照)もあります。これにより、レンダーターゲットのアルファチャネルではなく、ピクセルシェーダーからの完全に別個の出力とブレンドするためのアルファを指定できます。ただし、このモードは現在のハードウェア上の1つのレンダーターゲットでのみ機能します。
私が知る限り、同じアルファを持つ複数のレンダーターゲットをブレンドするための唯一のオプションは次のとおりです。
- すべてのレンダーターゲットに同じアルファを出力します(たとえば、遅延シェーディングの場合と同様に、アルファチャネルに他の値を格納する機能を犠牲にします)。
- デュアルソースブレンドを使用して、レンダーターゲットごとに個別のパスでレンダリングを繰り返します。
- UAV /画像読み込みストアを使用して、ピクセルシェーダーでブレンドを実行します(ジオメトリが画面スペースで自己重複していない場合にのみ機能します。これは、競合状態に対する保護がないため、おそらく少し遅いです)。
- それをサポートするハードウェアでは、DX11.3 / DX12 Rasterizer-Order Views、NV_fragment_shader_interlock、またはINTEL_fragment_shader_ordering(後者はAMD GPUによっても公開されます)。これらは同じものの3つの名前です。基本的には、ピクセルシェーダーの「クリティカルセクション」で、他のピクセルシェーダーの呼び出しに対して、テクスチャをアトミックに読み取り、変更、書き込みできます。それは本質的に任意のプログラム可能なブレンディングを可能にしますが、おそらくかなり遅く、最近のハードウェアでのみ利用可能です。