UnityUnityにおけるステンシルバッファの使い方についてまとめてみます。ステンシルバッファとは?ステンシルバッファは、DIYなどで使うステンシルシートのように、特定の領域にのみ描画を行いたいときなどに使います。【無料ダウンロード】ExcelやWordを使ってステンシルを自作しよう♪?初心者向け?より引用アウトラインやシルエットの表示など、他にもいろんな用途はありますが、この記事では説明をわかりやすくするために上記のイメージで進めます。実装は下記のように3段階で進めます。描画可能な領域をマークするまずは描画可能な領域を決めます。描画したい部分に3Dオブジェクトを適当に並べます。今回はQuadをグリッド状に並べています。現状ではStandardシェーダで描画が行われてしまっていますが、ここでは必要はないのでシェーダを変えて透明にします。}}透明で描画されるようになりました(見えなくなりました)。次に、このオブジェクトが透明で描画されているピクセルを「描画可能な領域であるとマーク」します。ここで出てくるのがステンシルバッファです。ステンシルバッファの実体は1ピクセルに1つ用意されているメモリ領域であり、0〜255の値を書き込めます。この値を後ほど参照して、描画可能な領域かどうかの判定に使います。ステンシルバッファに書き込むにはシェーダで次のように実装します。}}説明はコメントの通りです。今回は描画可能な領域の目印として、ステンシルバッファに2を代入しています。テクスチャなどを描画して表示する次に、1の領域に描画するためのオブジェクトを適当に配置します。今回はQuadを大きく配置して虹色のテクスチャを貼りました。シェーダはこちらです。半透明パスでテクスチャを貼ってるだけです。}}このとき、レンダリングの順序に注意する必要があります。このオブジェクトは前節で設定したステンシルバッファを見るため、1のオブジェクトがレンダリングされた後にレンダリングする必要があります。今回は半透明パスで描画するため、単純によりカメラに近い位置に配置すれば後にレンダリングされます。1の部分のみ描画するようにする最後に、2で配置したのオブジェクトのシェーダを変更して、1でステンシルバッファに書き込みを行なったピクセルにだけ描画を行うようにします。シェーダは次のようにします。}}コメントの部分がステンシルの処理です。現在のバッファとRefで指定した値を比べて、同じであれば描画を行い、それ以外は描画を行いません。レンダリング結果は次のようになります。ステンシルバッファに値が入っている部分のみ描画されることが確認できました。Equalとしてステンシルバッファの値がRefと同じであると設定しました。NotEqualなど色々な条件に変更できます。Compの条件に関してはよく使うので覚えておくといいかもしれません。詳細に関してはマニュアルに書かれているので、そちらを参照してください。»プロフィールUnityエンジニア。グラフィックスへの興味が強めです。Blur(渦巻ブラー)のポストエフェクトを実装する月別アーカイブはてなブログをはじめよう!halya_11さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。