【Unity】カスタムデプスバッファのステンシルビットを使うカスタムパス

投稿者: | 2024-03-01

HDRPカスタムパスで、カスタムデプスバッファのステンシルビットを使ってみました。

カスタムデプスバッファでは8個のステンシルビットが使えます。

レイヤーマスク

Cubeにマスクするレイヤー、Sphereにマスクされるレイヤーを設定しました。

CameraコンポーネントのCulling Maskでマスクされるレイヤーを除外しました。

カスタムパス

ヒエラルキーでCustom Passゲームオブジェクトを作ります。

Custom Pass Volumeコンポーネントで、Custom Passesに2つのDraw Renderers Custom Passを追加します。

+ボタンから追加
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

コメントを残す

メールアドレスが公開されることはありません。