ステンシルバッファとは何ですか?
コンピューターグラフィックスのプログラミングでは、ステンシルバッファーは、他のグラフィックバッファーに関連して使用してさまざまな効果を達成するか、シーンの領域をマスクして処理またはレンダリングされないメモリの領域です。ステンシルバッファーは、黒と白の画像に似たピクセルあたりのバッファーであり、バッファ内の各位置は、ほとんどの場合1バイトの長さであるが、1ビットほど小さい値を保持できます。バッファーはもともと、実際のステンシルのように真のまたは誤ったマスクとして機能するように設計されていたため、ステンシルバッファーの異なる領域の値をゼロ以外の値に設定することで、シーンの領域を不明瞭にしたり無視したりすることができます。シャドウボリュームの描画、オブジェクトの周りにハローの実装、オブジェクトが互いに重複する領域を見つけるなど、単純なマスキング以外のバッファーには多くの用途があります。多くの場合、バッファーはグラフィックスカードのグラフィックメモリに維持されるため、Renderi中に迅速にアクセスできますng。
ステンシルバッファーの概念は、グラフィックスパイプラインを介して移動する際に3次元(3D)シーンに適用できる2次元(2D)マスクを作成する方法でした。 3D頂点の位置がゼロに設定されていないステンシルバッファーの領域に関連する3D頂点の位置が、その頂点を無視し、その残りのパイプライン処理がスキップされる可能性があります。これにより、プログラマーはシーンの小さな部分のみをレンダリングしたり、画像を不規則な形のビューポートにしたりする方法を可能にします。たとえば、より大きなシーン内の小さな鏡の反射など、鏡の形がバッファーにステンシルとして描かれ、その形状を描きます。
メモリの懸念は、バッファ内の各ピクセルが真または偽のみである可能性がある単一ビット値のグリッドであるステンシルバッファーの元の形式につながりました。グラフィックカードが開発されるにつれてED、ほとんどのバッファーは、各ピクセルの位置で完全なバイト値を保持できるようになり、プログラマーが場所でより複雑な値を持つことができました。これにより、バッファーを使用して、オブジェクトがラスター化されたときにオブジェクトが画面上でそのピクセルを占有する場合、バッファーの値を場所で増加させることでオブジェクトが重複する領域を検出できます。この操作の後、バッファ内の各ピクセル位置の値は、画面上でそのピクセルを横断するオブジェクトの数に等しくなります。
ステンシルバッファーの最も人気のある用途の1つは、ボリュームシャドウを作成することです。これは、最初に非常に薄暗い照明でシーンをレンダリングすることで実行でき、すべてが日陰になっているように見えます。次に、光源によって照らされているシーン内のすべてのポリゴン表面の位置を決定するために計算が行われ、これらの形状はステンシルバッファーに転送されます。シーンは、すべてのオブジェクトが完全に照らされ、ステンシルの形を介して影のシーンにブレンドされているかのように再びレンダリングされます。EF影を持つオブジェクトを含むように見える画像を強く作成します。