【Unity】Universal Render Pipelineでポストエフェクトを適用する

Universal Render Pipelineでポストエフェクトを適用する方法についてまとめました。

Unity2021.1.11f1
Universal RP 11.0.0

はじめに

この記事ではUniversal Render Pipeline(URP)でポストエフェクトを適用する手順についてまとめます。

ビルトインパイプラインではPost Processing V2でポストエフェクトを掛けるのが主流の方法でした。

light11.hatenadiary.com

しかしURPではこの方法は使えません(正確に言うとUnity2019LTS + URP7.xでのみ使えましたが)。
またOnRenderImageのようなイベント関数も非対応となります。
その代わりにURP用に用意されているポストエフェクトの仕組みを使います。
本記事ではこの仕組みの使い方についてまとめます。

なおUniversal Render Pipelineの基礎知識については本記事では触れませんので、必要に応じて以下の記事を参照してください。

light11.hatenadiary.com

URPでポストエフェクトを掛ける手順

さてそれでは早速ポストエフェクトを掛けてみます。

Renderer Dataを設定

※URP10系以前ではこの項目が存在しないのでこの節を読み飛ばしてください

まずUniversal Render Pipeline AssetのRenderer Listに設定されているScriptableObjectを編集します。

f:id:halya_11:20210712154152p:plain
Renderer Data

このScriptableObjectのインスペクタから、Post-processingのEnabledにチェックを入れます。

f:id:halya_11:20210712154340p:plain
Enabledにチェック

なおこれは、ビルド時にPost Processing関連のシェーダやテクスチャを除外かどうかを決めるための設定項目です。

Cameraを設定

次にエフェクトを掛けたいCameraのRendering > Post Processingにチェックを入れます。

f:id:halya_11:20210712154804p:plain
Camera設定

Volumeを作成

次にエフェクトのかかる範囲を指定するためにVolumeオブジェクトを作成します。
今回はカメラの位置に関わらずエフェクトを掛けるため、Global Volumeを作成します。
Game Object > Volume > Global Volumeを選択します。

f:id:halya_11:20210712160533p:plain
Global Volume

なおVolumeにはGlobal Volumeの他にSphere VolumeやCube Volumeなどが存在します。
これらを使うと、そのコライダーの範囲内にカメラが入った時のみ適用されるポストエフェクトを設定できます。

f:id:halya_11:20210712161155p:plain
Volumeの種類

エフェクトを追加

Volumeが作れたら、そのVolumeに対してエフェクトを設定していきます。
まずNewボタンを押下してProfileアセットを作成します。
次にAdd Overrideボタンから好きなエフェクトを選択して適用します。

f:id:halya_11:20210712160759p:plain
エフェクトを設定

これでポストエフェクトが適用されました。

f:id:halya_11:20210712160920p:plain
適用された

Renderer Featureとして適用するポストエフェクトについて

一部のポストエフェクト(現時点ではSSAOとScreen-Space Shadow)についてはRenderer Featureとして適用します。
適用するにはFoward Renderer DataアセットのInspectorの下部からAdd Renderer Featureをクリックして対象のエフェクトを選択します。

f:id:halya_11:20210712164844p:plain
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より

しかしレンダリングパスを拡張することで組み込みポストエフェクトの前後にエフェクトを追加することはできます。
この方法については別の記事にまとめる予定です。

関連

light11.hatenadiary.com

light11.hatenadiary.com

参考

docs.unity3d.com