こんにちわ、オオバです。

Unityステンシルを使ったマスク表現
以前Unityでステンシルテストをやってみた記事の続きです。

前回はキューブ(メッシュの形)をマスクにしましたが、今回は任意のテクスチャを使ってマスク表現をしてみます。

Unity任意のテクスチャを使ったステンシルマスク_22

こちらのアルファチャンネルを含んだ画像を使ってマスクやってみます。

Unity任意のテクスチャを使ったステンシルマスク_25
試しにアルファブレンドしてステンシルを設定しても、
このようにメッシュの形(正方形)でマスクされてしまい、意図した表現にはなりません。

先に不要なピクセルを破棄する

解決策として、フラグメントシェーダー内で予めピクセルを破棄させ、
該当するピクセルでステンシルテストが実行されないようにする方法が考えられます。

※ステンシルテストはスクリーンに描画される直前で行われる処理です。

fixed4 frag (v2f_img i) : SV_Target  
{
    fixed4 c = tex2D(_MainTex, i.uv);  
    // 透明な部分のピクセルを破棄させてステンシルテストを実行しない  
    clip(c.a - 0.1);  
    return c;  
}

このようにフラグメントシェーダーで不要なピクセル(透明なピクセル)を破棄することで、意図したマスクを作ることが出来ます。

Unity任意のテクスチャを使ったステンシルマスク_49

今回のサンプルコードはコチラ

マスクする方のシェーダーしかサンプルにはありませんが、
マスクさせる方の処理については、
Unityステンシルを使ったマスク表現を参考にして頂ければと思います。

👉 オススメ記事

2021秋 Asset Refreshセール
100以上のアセットがなんと50%OFF!!オオバもいくつか買いました!
期間 : 10月2日午後3時59分まで