Universal Render Pipelineでポストエフェクトを適用する方法についてまとめました。
Unity2021.1.11f1
Universal RP 11.0.0
はじめに
この記事ではUniversal Render Pipeline(URP)でポストエフェクトを適用する手順についてまとめます。
ビルトインパイプラインではPost Processing V2でポストエフェクトを掛けるのが主流の方法でした。
しかしURPではこの方法は使えません(正確に言うとUnity2019LTS + URP7.xでのみ使えましたが)。
またOnRenderImageのようなイベント関数も非対応となります。
その代わりにURP用に用意されているポストエフェクトの仕組みを使います。
本記事ではこの仕組みの使い方についてまとめます。
なおUniversal Render Pipelineの基礎知識については本記事では触れませんので、必要に応じて以下の記事を参照してください。
URPでポストエフェクトを掛ける手順
さてそれでは早速ポストエフェクトを掛けてみます。
Renderer Dataを設定
※URP10系以前ではこの項目が存在しないのでこの節を読み飛ばしてください
まずUniversal Render Pipeline AssetのRenderer Listに設定されているScriptableObjectを編集します。
このScriptableObjectのインスペクタから、Post-processingのEnabledにチェックを入れます。
なおこれは、ビルド時にPost Processing関連のシェーダやテクスチャを除外かどうかを決めるための設定項目です。
Cameraを設定
次にエフェクトを掛けたいCameraのRendering > Post Processingにチェックを入れます。
Volumeを作成
次にエフェクトのかかる範囲を指定するためにVolumeオブジェクトを作成します。
今回はカメラの位置に関わらずエフェクトを掛けるため、Global Volumeを作成します。
Game Object > Volume > Global Volumeを選択します。
なおVolumeにはGlobal Volumeの他にSphere VolumeやCube Volumeなどが存在します。
これらを使うと、そのコライダーの範囲内にカメラが入った時のみ適用されるポストエフェクトを設定できます。
エフェクトを追加
Volumeが作れたら、そのVolumeに対してエフェクトを設定していきます。
まずNewボタンを押下してProfileアセットを作成します。
次にAdd Overrideボタンから好きなエフェクトを選択して適用します。
これでポストエフェクトが適用されました。
Renderer Featureとして適用するポストエフェクトについて
一部のポストエフェクト(現時点ではSSAOとScreen-Space Shadow)についてはRenderer Featureとして適用します。
適用するにはFoward Renderer DataアセットのInspectorの下部からAdd Renderer Featureをクリックして対象のエフェクトを選択します。
モバイルと処理負荷
さてポストエフェクトは負荷が大きい処理になります。
従ってモバイルで使うには処理負荷の大きさに気を付ける必要があります。
マニュアルによると、以下のエフェクトはモバイルフレンドリーとのことです。
- Bloom (ただしHigh Quality Filteringがオフになっていること)
- Chromatic Aberration
- Color Grading
- Lens Distortion
- Vignette
また、Depth Of Fieldに関してはGaussianモードを使うことと、
アンチエイリアシングについてはFXAAを使うことが推奨されています。
ただし上記に気を付けたとしても、BloomやDepth Of Field、アンチエイリアシングあたりはどうしても重い処理になるため、
低スペック端末に適用する際には実機での処理負荷をしっかり確認すべきです。
カスタムポストエフェクトについて
URPではOnRenderImageなどのイベントが廃止されているため、従来のような方法で独自のポストエフェクトを作成することができません。
現在のバージョンでは、公式としてカスタムポストエフェクトには未対応、将来的には予定されている、という状況です。
Note: URP does not currently support custom post-processing effects. If your Project uses custom post-processing effects, these cannot currently be recreated in URP. Custom post-processing effects will be supported in a forthcoming release of URP.
https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@11.0/manual/InstallingAndConfiguringURP.htmlより
しかしレンダリングパスを拡張することで組み込みポストエフェクトの前後にエフェクトを追加することはできます。
この方法については別の記事にまとめる予定です。