次の方法で共有


深度バイアス (Direct3D 9)

3D 空間で同一平面上にある多角形は、それぞれに z バイアスを追加することで、同一平面上にないかのように表示できます。 これは、シーン内のシャドウが適切に表示されるようにするために一般的に使用される手法です。 たとえば、壁の影は、壁と同じ深度値を持つ可能性があります。 最初に壁をレンダリングしてからシャドウをレンダリングすると、影が表示されないか、深度アーティファクトが表示される可能性があります。 効果を反転させるために、同一平面オブジェクトをレンダリングする順序を元に戻すことができますが、深度アーティファクトは引き続き発生する可能性があります。

アプリケーションは、コプラナポリゴンのセットをレンダリングするときにシステムが使用する z 値にバイアスを追加することで、コプラナポリゴンが適切にレンダリングされるようにするのに役立ちます。 z バイアスを一連のポリゴンに追加するには、レンダリングする直前に IDirect3DDevice9::SetRenderState メソッドを呼び出し、State パラメーターをD3DRS_DEPTHBIASに設定し、Value パラメーターを適切な浮動小数点値に設定します (たとえば、適切な値は -1.0 から 1.0 になります)。この値 SetRenderStateに渡すには、値を DWORDにキャストする必要もあります。 Z バイアス値を大きくすると、他の同一平面ポリゴンと共に表示されるときにレンダリングするポリゴンが表示される可能性が高くなります。

Offset = m * D3DRS_SLOPESCALEDEPTHBIAS + D3DRS_DEPTHBIAS

ここで、m はレンダリングされる三角形の最大深度勾配です。

m = max(abs(delta z / delta x), abs(delta z / delta y)) 

D3DRS_DEPTHBIASおよびD3DRS_SLOPESCALEDEPTHBIASレンダリング状態の単位は、z バッファリングと w バッファリングのどちらを有効にするかによって異なります。 アプリケーションは適切な値を指定する必要があります。

バイアスは、線と点のプリミティブには適用されません。 ただし、このバイアスは、ワイヤフレーム モードで描画される三角形に適用する必要があります。

// RenderStates
D3DRS_SLOPESCALEDEPTHBIAS, // Defaults to zero
D3DRS_DEPTHBIAS,           // Defaults to zero
// Caps
D3DPRASTERCAPS_DEPTHBIAS           
D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS 

ピクセル パイプライン