深度バイアス
深度バイアス
プリミティブのラスタ化中に生成されたフラグメントの深度値にバイアスをかけることができる。この機能によって、同一平面上のプリミティブを描画する際の z ファイティングの問題を緩和できる。
この機能は以前のバージョンの Microsoft® Direct3D® で公開されたが、リファレンス デバイスでは指定も実装もされていなかった。
D3DPRASTERCAPS_ZBIAS を公開し、指定されていない動作を実行する従来のデバイスと、深度バイアスに基づいて実際に傾斜的なスケーリングを実行できるデバイスを区別するために、D3DPRASTERCAPS_DEPTHBIAS と D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS が追加された。アプリケーションでは、2 つの浮動小数点値 D3DRS_DEPTHBIAS および D3DRS_SLOPESCALEDEPTHBIAS を指定する。これらはオフセットを計算するために使われる。このオフセットは、深度テストで使われたり、オプションで深度バッファに書き込まれたりする最終的な深度値を生成するために、フラグメントの補間された深度値に追加される。
Offset = m * D3DRS_SLOPESCALEDEPTHBIAS + D3DRS_DEPTHBIAS
ここで、m はレンダリングする三角形の最大深度勾配である。
m = max(delta z / delta x), abs(delta z / delta y))
D3DRS_DEPTHBIAS および D3DRS_SLOPESCALEDEPTHBIAS レンダリング ステートの単位は、z バッファリングと w バッファリングのどちらが有効であるかによって決まる。アプリケーションは適切な値を提供する必要がある。
バイアスは、ラインおよびポイント プリミティブには適用されない。ただし、ワイヤフレーム モードで描画された三角形にはこのバイアスを適用する必要がある。
API の変更
// RenderStates
D3DRS_SLOPESCALEDEPTHBIAS, // New, defaults to zero
D3DRS_DEPTHBIAS, // New, defaults to zero
// Caps
D3DPRASTERCAPS_DEPTHBIAS // New
D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS // New