ステンシルバッファーとは

コンピューターグラフィックスプログラミングでは、ステンシルバッファーは他のグラフィックスバッファーに対して描画および使用できるメモリ領域であり、さまざまな効果を実現したり、シーンの領域をマスクしたりして、処理またはレンダリングされないようにします。 ステンシルバッファは、白黒画像に似たピクセルごとのバッファです。バッファ内の各場所は、多くても1バイトの長さの値を保持できますが、1ビットまで小さくすることができます。 バッファは元々、実世界のステンシルによく似た真または偽のマスクとして機能するように設計されていたため、ステンシルバッファの異なる領域の値をゼロ以外の値に設定することで、シーンの領域を隠したり無視したりすることができました。 バッファーには、シャドウボリュームの描画、オブジェクトの周囲のハローの実装、オブジェクトが互いに重なり合う領域の特定など、単純なマスキング以外にも多くの用途があります。 多くの場合、バッファはグラフィックカードのグラフィックメモリに保持されるため、レンダリング中にすばやくアクセスできます。

ステンシルバッファの概念は、元々、頂点がグラフィックスパイプラインを移動するときに3次元(3D)シーンに適用できる2次元(2D)マスクを作成する方法でした。 3D頂点の位置がラスタライズされ、ゼロに設定されていないステンシルバッファの領域に関連している場合、その頂点は無視され、残りのパイプライン処理はスキップされます。 これにより、プログラマはシーンの小さな部分のみをレンダリングしたり、イメージを不規則な形状のビューポートにレンダリングしたりすることができました。たとえば、大きなシーン内の小さなミラーでの反射。バッファ、そして反射がその形状を通して描かれます。

メモリの問題により、ステンシルバッファの元の形式は、バッファ内の各ピクセルがtrueまたはfalseのみである単一ビット値のグリッドになりました。 グラフィックカードが開発されると、ほとんどのバッファは各ピクセル位置で完全なバイト値を保持できるようになり、プログラマーはその位置により複雑な値を持つことができます。 これにより、バッファを使用してオブジェクトが重複する領域を検出できます。これは、ラスタライズ時にオブジェクトが画面上のそのピクセルを占有している場合、その場所のバッファの値をインクリメントすることで実行できます。 この操作の後、バッファ内の各ピクセル位置の値は、画面上のそのピクセルと交差するオブジェクトの数に等しくなります。

ステンシルバッファの最も一般的な使用法の1つは、ボリュームシャドウの作成です。 これは、最初に非常に薄暗い照明でシーンをレンダリングすることで実行できます。 次に、光源によって照らされるシーン内のすべてのポリゴンサーフェスの位置を決定する計算が行われ、これらの形状がステンシルバッファに転送されます。 すべてのオブジェクトが完全に照らされ、ステンシルシェイプを介してシャドウシーンにブレンドされるかのようにシーンが再びレンダリングされ、影のあるオブジェクトを含むように見える画像を効果的に作成します。

他の言語

この記事は参考になりましたか? フィードバックをお寄せいただきありがとうございます フィードバックをお寄せいただきありがとうございます

どのように我々は助けることができます? どのように我々は助けることができます?