DirectX12 / DirectX11.3 の ROV のテスト続きです。
前回はこちら→ 「Direct3D12 ROV (Rasterizer Order View) を試してみる」
ROV は自分で Depth Test できます。
R32_FLOAT の UAV を 1枚追加しています。
RasterizerOrderedTexture2D UBuffer0 : register( u0 ); // R8G8B8A8
RasterizerOrderedTexture2D UBuffer1 : register( u1 ); // R32F
PS_OUT pmain( VS_OUT pin, float4 pos : SV_Position )
{
float diffuse= max( dot( pin.Normal, Light ), 0.0f ) + 0.2f;
float4 color= Color * diffuse;
uint2 addr= uint2( pos.xy );
float depth= UBuffer1[addr];
if( pos.z <= depth ){
UBuffer0[addr]= color; // color書き込み
UBuffer1[addr]= pos.z; // depth書き込み
}
PS_OUT pout;
pout.Color= color;
return pout;
}
下記は UAV (UBuffer0) の結果です。(Geforce GTX960)
↓ROV 無し, Depth Test 無し
↓ROV あり, Depth Test 無し
↓ROV 無し, Depth Test あり
↓ROV あり, Depth Test あり
ROV の目的とも言える半透明ソートも試してみました。
力技ですがバッファ固定で 4レイヤーまで。一旦 UAV にカラーを保存して 2 pass 目で Blend しています。fp32 Blend を使った方法と違い手前の 4枚を選択できるので破綻が少なくなっています。
関連エントリ
・Direct3D12 ROV (Rasterizer Order View) を試してみる
・3D 低レベル API の違い Direct3D 12/Metal
・Direct3D 12 GeForce GTX970 は FeatureLevel 12_1 対応、Resource Bind/Heap Tier は低い
・3D 低レベル API の現状 Direct3D 12/Metal
すごー!これは楽しみだー。
ありがとうございます。
対応 GPU が増えて欲しいですね。