次の方法で共有


深度バッファー (Direct3D 9)

深度バッファー (多くの場合、z バッファーまたは w バッファーと呼ばれます) は、Direct3D で使用される深度情報を格納するデバイスのプロパティです。 Direct3D は、シーンをターゲット サーフェスにレンダリングするときに、関連付けられた深度バッファー サーフェス内のメモリをワークスペースとして使用して、ラスター化されたポリゴンのピクセルが互いを隠す方法を決定できます。 Direct3D では、最終的な色の値が書き込まれるターゲットとして、画面外の Direct3D サーフェスが使用されます。 レンダー ターゲット サーフェスに関連付けられている深度バッファー サーフェスは、シーン内の各可視ピクセルの深さを Direct3D に伝える深度情報を格納するために使用されます。

深度バッファリングを有効にしてシーンをラスター化すると、レンダリング サーフェス上の各ポイントがテストされます。 深度バッファー内の値は、投影空間内のポイント (x、y、z、w) の位置から、ポイントの z 座標または同種の w 座標にすることができます。 z 値を使用する深度バッファーは、多くの場合、z バッファーと呼ばれ、w 値を使用するバッファーは w バッファーと呼ばれます。 深度バッファーの種類ごとに長所と短所があり、これについては後で説明します。

テストの開始時に、深度バッファー内の深度値がシーンで可能な最大の値に設定されます。 レンダリング サーフェイスの色の値は、その時点の背景色の値または背景テクスチャの色の値に設定されます。 シーン内の各ポリゴンは、レンダリング サーフェス上の現在の座標 (x,y) と交差するかどうかをテストします。 その場合、現在のポイントの深度値 (z バッファー内の z 座標、w バッファー内の w 座標) がテストされ、深度バッファーに格納されている深度値よりも小さいかどうかが確認されます。 多角形の値の深度が小さい場合は、深度バッファーに格納され、多角形の色の値がレンダリング サーフェイス上の現在のポイントに書き込まれます。 その時点の多角形の深度値が大きい場合は、リスト内の次の多角形がテストされます。 このプロセスを次の図に示します。

深度値のテスト の図

手記

ほとんどのアプリケーションではこの機能を使用しませんが、Direct3D で使用される比較を変更して、深度バッファーとその後のレンダー ターゲット サーフェスに配置される値を決定できます。 これを行うには、D3DRS_ZFUNCのレンダリング状態の値を変更します。 一部のハードウェアでは、比較関数を変更すると、階層 z テストが無効になる場合があります。

 

市場に出回っているほぼすべてのアクセラレータが z バッファリングをサポートしているため、現在、z バッファーが最も一般的なタイプの深度バッファーになります。 ただし、ユビキタスな z バッファーには欠点があります。 関係する数学のため、z バッファー内の生成された z 値は、z バッファー範囲 (通常は 0.0 ~ 1.0 を含む) にわたって均等に分散されない傾向があります。 具体的には、遠方クリッピング平面とニア クリッピング 平面の比率は、z 値の分布が不均一である方法に強く影響します。 遠面距離と近面距離比 100 を使用すると、深度バッファー範囲の 90% がシーン深度範囲の最初の 10% に費やされます。 外部シーンを使用したエンターテイメントまたはビジュアル シミュレーションの一般的なアプリケーションでは、多くの場合、1,000 ~ 10,000 の範囲の遠方平面/ほぼ平面の比率が必要です。 比率が 1,000 の場合、範囲の 98% が深度範囲の最初の 2% に費やされ、比率が高いほど分布が悪化します。 これにより、遠くのオブジェクトで非表示のサーフェスアーティファクトが発生する可能性があります。特に、最も一般的にサポートされるビット深度である 16 ビット深度バッファーを使用する場合です。

一方、w ベースの深度バッファーは、多くの場合、z バッファーよりも近いクリッププレーンと遠いクリッププレーンの間で均等に分散されます。 主な利点は、遠く離れた領域と近くのクリッピング平面の距離の比率が問題ではなくなったということです。 これにより、アプリケーションは、目のポイントに近い比較的正確な深度バッファリングを取得しながら、大きな最大範囲をサポートできます。 w ベースの深度バッファーは完璧ではなく、近くのオブジェクトに対して非表示のサーフェスアーティファクトを示すことがあります。 w バッファー方式のもう 1 つの欠点は、ハードウェアのサポートに関連しています。w バッファリングは、z バッファリングほど広くハードウェアではサポートされていません。

z バッファーを使用するには、レンダリング中にオーバーヘッドが必要です。 z バッファーを使用する場合は、さまざまな手法を使用してレンダリングを最適化できます。 詳細については、「Z バッファー パフォーマンス」を参照してください。

手記

深度値の実際の解釈は、レンダラーに固有です。

 

このセクションでは、隠線と非表示サーフェスの削除に深度バッファーを使用する方法について説明します。

Direct3D レンダリング する