はじめに
今回はステンシルを使用して指定したもの以外暗くしていきます。
ステンシルを使用して指定したもの以外暗くすることができた。演出で使えそう#Unity pic.twitter.com/ym61N83obg
— 武0武/ (@zenkai1127) 2022年6月8日
環境は Unity 2021.3.25f1です
Universal Render Pipeline を使用しています。
やり方
ステンシルの使い方こちらでも紹介しています
レイヤー追加
まずカメラが映している場所全体を覆うような黒い板を作成し、カメラの子にします
マテリアルは透明度を変更できるならなんでもいいです。
次に黒い板と暗くしないオブジェクト用のレイヤーを作成、設定をします
描画の対応
Univesal Render Dataを開き、追加したレイヤーをLayerMaskから外します。
次にRenderObjectを2つ追加し、暗くしないオブジェクトの設定をします。
2つ追加するのは不透明と半透明を設定する必要があるからです
注意する点としてZFaillはKeepである必要があります。これをしないと下記のように本来映っていない部分にもステンシルの書き込みが行われて暗くなりません
次にRenderObjectを追加し黒い板オブジェクトの設定をします
NotEqualにすることでステンシルで2が書き込まれてるところ以外を描画するようになります
半透明対応
上記の状態でも指定したもの以外暗くするはできますが、半透明オブジェクトはメッシュの部分が暗くならないので下記のようなパーティクルのが矩形に表示されてしまいます
暗くしない半透明オブジェクトはAlpha Clippingを使用して透明部分を描画しないようにします
Alpha Clippingを使用したことでパーティクルが正常に表示されました
参考
完成
黒い板の透明度を変更すれば指定したもの以外を暗くすることができます