深度バイアス (Direct3D 9)
3D 空間で同一平面上にある多角形は、それぞれに z バイアスを追加することで、同一平面ではないかのように表示できます。 これは、シーン内のシャドウが適切に表示されるようにするために一般的に使用される手法です。 たとえば、壁の影は、壁と同じ深さの値を持つ可能性があります。 最初に壁をレンダリングしてから影をレンダリングすると、影が表示されないか、深度アーティファクトが表示される可能性があります。 効果を反転させるために、同一平面オブジェクトをレンダリングする順序を逆にすることができますが、深度アーティファクトは引き続き発生する可能性があります。
アプリケーションは、同一平面ポリゴンのセットをレンダリングするときにシステムが使用する z 値にバイアスを追加することで、同一平面ポリゴンが適切にレンダリングされるようにするのに役立ちます。 一連のポリゴンに z バイアスを追加するには、レンダリングする直前に IDirect3DDevice9::SetRenderState メソッドを呼び出し、 State パラメーターをD3DRS_DEPTHBIASに設定し、 Value パラメーターを適切な float 値に設定します (たとえば、適切な値は -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
関連トピック