3D 空間で同一平面上にある多角形は、それぞれに z バイアス (または深度バイアス) を追加することで、同一平面上にないかのように表示できます。
これは、シーン内のシャドウが適切に表示されるようにするために一般的に使用される手法です。 たとえば、壁の影は、壁と同じ深度値を持つ可能性があります。 アプリケーションが最初に壁をレンダリングしてからシャドウをレンダリングすると、影が表示されないか、深度アーティファクトが表示される可能性があります。
アプリケーションは、(D3D11_RASTERIZER_DESC1の DepthBias メンバーから) バイアスを、システムが同一平面ポリゴンのセットをレンダリングするときに使用する z 値に追加することで、同一平面ポリゴンが適切にレンダリングされるようにするのに役立ちます。 z 値が大きいポリゴンは、z 値が小さいポリゴンの前に描画されます。
深度バイアスを計算するには、2 つのオプションがあります。
出力マージャー ステージに現在バインドされている深度バッファーに UNORM 形式がある場合、または深度バッファーがバインドされていない場合、バイアス値は次のように計算されます。
Bias = (float)DepthBias * r + SlopeScaledDepthBias * MaxDepthSlope;
ここで、r は、float32 変換された深度バッファー形式で 0 > 最小表現可能な値です。 DepthBias と SlopeScaledDepthBias 値は、D3D11_RASTERIZER_DESC1 構造体メンバーです。 MaxDepthSlope 値は、ピクセルでの深度値の水平方向と垂直方向の傾斜の最大値です。
浮動小数点深度バッファーが出力マージャー ステージにバインドされている場合、バイアス値は次のように計算されます。
Bias = (float)DepthBias * 2**(exponent(max z in primitive) - r) + SlopeScaledDepthBias * MaxDepthSlope;
ここで、r は浮動小数点表現の仮数ビットの数です (非表示ビットを除く)。たとえば、float32の場合は 23 です。
その後、バイアス値は次のようにクランプされます。
if(DepthBiasClamp > 0)
Bias = min(DepthBiasClamp, Bias)
else if(DepthBiasClamp < 0)
Bias = max(DepthBiasClamp, Bias)
その後、バイアス値を使用してピクセル深度を計算します。
if ( (DepthBias != 0) || (SlopeScaledDepthBias != 0) )
z = z + Bias
深度バイアス演算はクリッピング後の頂点で行われるため、深度バイアスはジオメトリ クリッピングには影響しません。 バイアス値は特定のプリミティブに対して一定であり、補間器の設定前に各頂点の z 値に追加されます。 機能レベル 10.0 以降を使用する場合、すべてのバイアス計算は 32 ビット浮動小数点演算を使用して実行されます。 バイアスは、ワイヤフレーム モードで描画される線を除き、ポイントプリミティブまたはラインプリミティブには適用されません。
シャドウ バッファー ベースのシャドウを含むアーティファクトの 1 つは、シャドウ にきび、またはシェーダーの深度計算とシャドウ バッファー内の同じサーフェスの深度との間のわずかな違いによるサーフェス シャドウ自体です。 これを軽減する 1 つの方法は、シャドウ バッファーをレンダリングするときに、DepthBias と SlopeScaledDepthBias を 使用することです。 シャドウ バッファーのレンダリング中にサーフェスを十分にプッシュして、比較結果 (シャドウ バッファー z とシェーダー z の間) がサーフェス全体で一貫性を保ち、ローカルのセルフシャドウを回避するという考え方です。
ただし、DepthBias と slopeScaledDepthBias を使用すると、非常に鋭い角度で表示された多角形によってバイアス方程式が非常に大きな z 値を生成する場合に、新しいレンダリングの問題が発生する可能性があります。 これにより、多角形がシャドウ マップ内の元のサーフェスから非常に遠くにプッシュされます。 この特定の問題を軽減するのに役立つ 1 つの方法は、計算された z バイアスの大きさに上限 (正または負) を提供する DepthBiasClampを使用することです。
手記
機能レベル 9.1、9.2、9.3 の場合、DepthBiasClamp はサポートされていません。
関連トピック