日別アーカイブ: 2015年7月23日

Direct3D12 ROV を試してみる (2) Depth Test と半透明ソート

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 無し
dx12_rov_teapot_01.png

↓ROV あり, Depth Test 無し
dx12_rov_teapot_02.png

↓ROV 無し, Depth Test あり
dx12_rov_teapot_03.png

↓ROV あり, Depth Test あり
dx12_rov_teapot_04.png

ROV の目的とも言える半透明ソートも試してみました。

dx12_rov_teapot_05.png

力技ですがバッファ固定で 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