Unityでの画作りに欠かせない存在となっているポスト・エフェクトをC#スクリプトから操作する方法について簡単にまとめます。なおユニバーサル・レンダーパイプラインでの実践となるので、ご了承ください。
シーンにGlobal Volumeを作成、Post Processing Profileを設定し、そこに各プロセッサーを加えることで、最終的なレンダリング画面に対して様々な視覚エフェクトを加えることが出来ます。
今回はスクリーンの四隅に陰影を与える、Vignette(ヴィネット)のIntensityをスクリプト、及びUIのスライダーで操作してみたいと思います。
空のゲームオブジェクトを追加し、今回書いたスクリプトを装着します。Serialize FieldとしてVolumeクラスの変数を宣言し、インスペクター上で目標となるVolumeを代入します。
スクリプト自体はたったこれだけです。注意としては、まずusing文にUnityEngine.RenderingとUnityEngine.Rendering.Universalを追加します。
それぞれVolumeクラスとVignetteなど各プロセッサークラスを利用するために必要です。
各ポストエフェクト・プロセッサーはコンポーネントではないようで、GetComponentは使いません。各エフェクトの構成情報を持つprofile変数のTryGetメソッドで各プロセッサーの取得を図ります。
各パラメータのvalueフィールドに値を代入することで、パラメータを変更することが出来ます。この場合、vignette.intensity.value = 1.0fというような形になります。
今回はUIのスライダーでランタイム中に効果を変化させたいので、ChangeVignetteIntensityというパブリック関数を用意して、スライダーのイベント関数に登録しています。
VignetteのIntensityは0.0-1.0までの値なので、今回はそのままでいいですが、パラメータによってはスライダーのmin valueとmax valueを変更する必要があるものもあります。
というわけで、これが・・・
こうなります!
これを上手く使えば、ダメージを受けた時に視界がぼやけるなどのゲームへの没入感を高める視覚効果を作れるので、上手く活用していきたいと思います。