【Unity】URPでShader使用せずステンシルを利用してマスクを適用させる

はじめに

今回はURPでShader使用せずステンシルを利用してマスクを適用させてみます

環境は Unity 2020.3.25f1

Universal Render Pipeline(テンプレートのプロジェクトです)

ステンシルについては下記記事が参考になります

nn-hokuson.hatenablog.com

やり方

オブジェクトの用意

マスクをかける側とかけられる側のオブジェクトを用意し、それぞれに専用のレイヤーを設定します

ステンシルの設定

ForwardRenderer.assetを選択して通常の描画では先ほど作成したオブジェクトは描画しないように設定します

ForwardRenderer.assetを選択してAdd Render Feature→Render Objectsで下記2つを追加、パラメータを設定します

valueでステンシルの値を設定、Compare Functionで描画条件を指定してPassFailでステンシルを操作ができます

Mask用オブジェクトの後にMaskかけられる側のオブジェクトを追加する必要があるので注意

Mask側ではCompare FunctionNeverにすることでピクセルレンダリングしないようにしてPassReplaceにすることでステンシルにvalueである1を書き込みます  

Maskかけられる側ではCompare FunctionををNot Equalにすることでvalueである1以外の時のみレンダリングするようになります。これによってマスクすることでできようになります

参考

docs.unity3d.com

docs.unity3d.com

完成

Shader使用せずマスクをかけることが出来ました

参考

https://theslidefactory.com/see-through-objects-with-stencil-buffers-using-unity-urp/