このページでは、Volume (ボリューム) サポートによりカスタムのポストプロセスエフェクトを作成する方法について説明します。
URP には、カスタムのポストプロセスエフェクトのテンプレートが用意されています。テンプレートの実装は、カスタムエフェクトのコードを挿入するための Renderer Feature と、Volume コンポーネントと沿う語作用するためのコードを実装するスクリプトで構成されています。
テンプレートを使用してエフェクトを作成するには、以下のメニュー項目を選択します。
Unity は Assets フォルダーに 2 つの新しいスクリプトを作成します。Renderer Feature テンプレートを含むスクリプトと、Volume コンポーネントのスクリプトです。
テンプレートには、画面上の色を反転させるエフェクトの実装例が含まれています。
Renderer Feature では、カスタムエフェクト用のカスタムマテリアルや、エフェクトロジックを実装するレンダーパスを、Create メソッドで定義します。
Renderer Feature スクリプトには、ScriptableRenderPass の実装が含まれています。
カスタムエフェクトのシェーダープロパティは、レンダーパスコードの以下の領域に設定します。
#region PASS_SHARED_RENDERING_CODE
レンダーパスには、以下の 2 つの領域が含まれています。プロジェクトで互換性モードが無効になっている場合、Unity は PASS_RENDER_GRAPH_PATH 領域を選択してレンダーグラフ API を使用し、そうでない場合は PASS_NON_RENDER_GRAPH_PATH 領域を使用します。
#region PASS_NON_RENDER_GRAPH_PATH
#region PASS_RENDER_GRAPH_PATH
Volume コンポーネントにエフェクトプロパティを設定するには、AddRenderPasses メソッドの以下の行を変更します。
NewPostProcessEffectVolumeComponent myVolume = VolumeManager.instance.stack?.GetComponent<NewPostProcessEffectVolumeComponent>();
if (myVolume == null || !myVolume.IsActive())
s_SharedPropertyBlock.SetFloat("_Intensity", myVolume.intensity.value);