はじめに
今回はURPでShader使用せずステンシルを利用してマスクを適用させてみます
環境は Unity 2020.3.25f1
Universal Render Pipeline(テンプレートのプロジェクトです)
ステンシルについては下記記事が参考になります
やり方
オブジェクトの用意
マスクをかける側とかけられる側のオブジェクトを用意し、それぞれに専用のレイヤーを設定します
ステンシルの設定
ForwardRenderer.assetを選択して通常の描画では先ほど作成したオブジェクトは描画しないように設定します
ForwardRenderer.assetを選択してAdd Render Feature→Render Objectsで下記2つを追加、パラメータを設定します
valueでステンシルの値を設定、Compare Functionで描画条件を指定してPassやFailでステンシルを操作ができます
Mask用オブジェクトの後にMaskかけられる側のオブジェクトを追加する必要があるので注意
Mask側ではCompare FunctionをNeverにすることでピクセルをレンダリングしないようにしてPassをReplaceにすることでステンシルにvalueである1を書き込みます
Maskかけられる側ではCompare FunctionををNot Equalにすることでvalueである1以外の時のみレンダリングするようになります。これによってマスクすることでできようになります
参考
完成
Shader使用せずマスクをかけることが出来ました
参考
https://theslidefactory.com/see-through-objects-with-stencil-buffers-using-unity-urp/