ステンシルバッファの目的は何ですか?より正確には、コンピューターグラフィックスのステンシルとは何ですか?


41

ステンシルの言葉をよく読みますが、コンピューターグラフィックスの本当の目的は何なのかわかりません。

ウィキペディアで白黒の写真を見ると、まだ問題があります。

ステンシルまたはステンシルバッファーを使用する理由と、Zバッファーとの違いは何ですか?グラフィックデザインで何らかの意味があると思われるこの言葉を使用するのはなぜですか?


素晴らしい質問です。私が知っているのは、それが影のレンダリングに使用されていることだけです...しかし、私はそれの完全な説明を聞くことに興味があります!
リケット

回答:


40

元の形では、ステンシルバッファは1ピクセルあたり1ビット(つまり、黒または白で、グレーはありません)フレームバッファでした。他のフレームバッファのように、好きなようにレンダリングできます。その後、そのバッファーの内容を使用して、通常のバッファーに描画するときに「ステンシル」またはマスクアウトできます。

例:運転ゲームを作っているとしましょう。車の後ろにあるものを示す小さなバックミラーを画面に表示したい場合。車の後ろを指すビューをレンダリングする必要がありますが、それはバックミラーの小さな丸い長方形内でのみレンダリングする必要があります。典型的な解決策は次のとおりです。

  1. 角丸長方形をステンシルバッファーにレンダリングします。
  2. ステンシルを有効にします。
  3. 後方を向いたビューを通常のバッファーにレンダリングします。

ステンシルはそれをマスクし、ミラーの形状にのみ描画します。

レンダーパイプラインの柔軟性とプログラミング性が大幅に向上したため、ステンシルバッファーは、必要な処理をすべて実行できる汎用の1ビットフレームバッファーとして使用されます。影は一般的な使用例です。


10
つまり、基本的には実際のステンシルと同じ機能を持ち、インクを塗布するときにパーツをマスクします。
カイ

4
最近のほとんどすべてのデバイスは、8ビットステンシルバッファをサポートしています。
クリス・ハウ

私はあなたの例を本当に得ていません、それは第2の錐台があるようです シーンの別の部分をラスタライズしますか?影の例はありますか?
jokoon

これは2番目のフレームバッファーです。錐台をレンダリングする前に、いつでも錐台を変更することができます(これはシャドウシステムが行うことだと思います)が、それはコアコンセプトの一部ではありません。
munificent

9

すでに議論したステンシルバッファーの機能的な使用に加えて、ステンシルバッファーは最適化にも使用できます。

グラフィックスパイプライン内のステンシルテストの位置(ピクセルシェーディングの)により、ステンシルテストを使用して、必要でないときに重いシェーディング作業を行うピクセルを殺すことができます。多くの場合、これは単一のピクセルよりも粗い粒度で実行できます。ピクセルのタイルであるため、大まかなラスタライズ段階でも作業を間引くことができます。


4

これは、ポリゴンをレンダリングするときに修正できるピクセルを制御する単なるバッファーです。各ピクセルには、対応するステンシル値があり、これらの値に応じてピクセルを条件付きで変更/無視できます

最も簡単なのは、物理的なステンシルのように使用できることです。これは、一部のピクセルを通過させ、他のピクセルの変更を止めるマスクです。

動作はzバッファに非常に似ています-深度テストのように、ステンシルテストはtrue / falseテストであり、ステンシルテストを制御するための同様の設定があります(より大きい/少ない/等しい場合に合格)。ただし、深さを書き込むのではなく、通常、事前に定義された値が書き込まれるか、ステンシルシャドウアルゴリズムで使用されるように、ピクセルが描画されるときにインクリメント/デクリメントされます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.