unity : dynamic access to postprocess parameter from script

はじめに

今回はUnityのPostProcessingStackについて、そのプロファイルとボリュームをスクリプトから操作する方法をまとめます。
ここで、
* PostProcessProfile = ポストプロセスの設定ファイル
* PostProcessVolume = PostProcessProfileを設定するコンポーネント

です。

postprocessについての基本は、Unity : PostProcessing Stack v2 : Bloom を参照ください。

今回の内容は、
* scriptで、PostProcessVolumeコンポーネントをオブジェクトに取り付け、エフェクトを追加
* 作成済みPostProcessProfileの設定をscriptで変更

の2点です。

スクリプトからPostProcessVolumeを取り付ける

Create Emptyから、空のObjectを作成し、名前をCreatePostProcessVolume、レイヤーをPostProcessingに設定します。
このObjectに、GitHub からCreatePostProcessVolume.csを取得し、これをattachします。

scriptの説明 : 
Bloomの設定をし、PostProcessManager.instance.QuickVolumeメソッドを使ってPostProcessVolumeに設定をします。QuickVolumeの引数は第1引数がPostProcessVolumeのレイヤーで今回はgameObject.layerでCreatePostProcessVolumeゲームオブジェクトに設定されたレイヤーを指定し、第2引数ではPostProcessVolumeの優先度を指定し、第3引数は設定する効果を指定します。

作成したボリュームは使わなくなったら削除する必要があるみたいなので、OnDestroyメソッドの中でRuntimeUtilities.DestroyVolumeメソッドを使って作成したボリュームの削除を行っています。

DestroyVolumeの第1引数はPostProcessVolume、第2引数は指定したボリュームを削除するかどうか、第3引数はボリュームのゲームオブジェクトを削除するかどうかのようです。

本scriptを使うと、確かに効果が掛かっていることが確認できましたが、CreatePostProcessVolume ゲームオブジェクトにPostProcessVolumeコンポーネントは追加されていませんでした。これは、AddComponentでPostProcessVolumeコンポーネントを追加するのではなく、QuickVolumeメソッドを使って追加したからかもしれません。

スクリプトからPostProcessProfileの設定値を変更する

先ほど作ったCreatePostProcessVolumeゲームオブジェクトを無効にしておきます。
Unity : PostProcessing Stack v2 : Bloom を参考に、PostProcessVolume Componentが設定されたGameObjectを作成(名前 をPost-process Volumeとしましょう)し、PostProcessing profileも作成します。このprofileに、Vignette、Bloom、Grain、の効果を追加しておきます。
BloomはenableのOffボタンを押して無効にしておきます。

画像1

このprofileをscriptから変更してみます。
GitHub からOverridePostProcess.cs を落として、Post-process Volume GameObjectにattachします。scriptで、profileとsharedProfileの違いについてですが、profileで取得した場合は、一時的なprofileがCopy生成され、元のprofileに影響が及びません。一方、sharedProfileにすると元のprofileを変更し、同プロファイルを使用している全てのボリュームに影響が及びます。また、Unityの実行を停止しても変更内容が残ります。

しかし、sharedProfileを使った時、

AddSettings<MotionBlur>();

の所で、何やらErrorが出るようです。
深く追えてませんが、とりあえず、postProcessProfile.profile で取得した方が良さそうです。scriptのその他 部分は、説明不要なくらい簡単かと思います。

参考URL

* UnityのPostProcessingStackのプロファイルとボリュームをスクリプトから操作する
* Modifying the new Post-Processing Stack through code?


もしよろしければ、サポートをお願いします! 頂いたサポートは、Creatorとしての活動費に充てさせて頂きます。