HDRPカスタムパスで、カスタムデプスバッファのステンシルビットを使ってみました。
カスタムデプスバッファでは8個のステンシルビットが使えます。
レイヤーマスク
Cubeにマスクするレイヤー、Sphereにマスクされるレイヤーを設定しました。
CameraコンポーネントのCulling Maskでマスクされるレイヤーを除外しました。
カスタムパス
ヒエラルキーでCustom Passゲームオブジェクトを作ります。
Custom Pass Volumeコンポーネントで、Custom Passesに2つのDraw Renderers Custom Passを追加します。
はじめのカスタムパスで、マスクするレイヤーをレンダリングします。Target Depth Bufferが「Camera」だと、ステンシルのリファレンス値やマスクでは「User Bit 0」「User Bit 1」の2つのビットが利用できます。
Target Depth Bufferを「Custom」にすると、8つのステンシルビットが使えます。
Layer Maskでマスクするレイヤーを選択します。遮蔽されていても描画するようにDepth Testを「Disabled」や「Always」にします。
Override Stencilにチェックを入れると、リファレンス値やマスクを整数で入力できます。ComparisonとPassで常にバッファに値を書き込むようにしています。
Clear Fragsで「Depth Stencil」をクリアしています。
次のカスタムパスでマスクされるレイヤーを描画します。Target Color Bufferを「Camera」、Target Depth Bufferを「Custom」に設定しています。Depth Testをオーバーライドします。
Override Stencilのチェックを入れて、書き込んだビットをRead Maskに設定しています。リファレンス値とバッファの値にRead Maskを適用して比較します。Comparisonが「Equal」なので、両者が同じ値のときに描画します。
これで、カスタムデプスバッファを使ってマスク表現ができました。
参考:https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@8.2/api/UnityEngine.Rendering.HighDefinition.UserStencilUsage.html
https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@17.0/manual/Stencil-Usage.html