【Unity】URPでのポストプロセス入門


Post Effect Image

概要

この記事では、URPでScriptable Render
Featureを実装して、ポストプロセスを実装する方法を解説します。
初めのポストプロセスを追加するのは大変ですが、2個目以降は楽になります。

環境

  • Unity: 2021.3.0f1
  • URP: 12.1.6

URP12.1.7だとうまく動かなかったので、おかしいなと思ったらバージョンを下げてみてください。

Scriptable Render Featureとは

レンダリングパイプラインの任意のタイミングでカスタム描画パスを追加できる機能です。
URPとHDRPでのみ使用できます。

カスタム描画パスを追加した例

スクリプタブルレンダーパイプライン設定ファイルの作成

以下の手順に沿って設定ファイルを作成しましょう。

  1. プロジェクトビューで右クリックを押す
  2. Rendering > URP Asset with Universal Renderer をクリック
  3. 適当な名前をつける(ここでは Post Effectとしました)

そうすると以下の2つのファイルが作成されます。

PostEffect: レンダーパイプライン設定ファイル
PostEffect Renderer: レンダラーデータ

レンダーパイプラインの設定

Edit > Project Settings > Quality > RenderPipeline Asset に
さきほど作った PostEffect ファイルを設定します。

Monochrome

Volumeを実装する モノクロを調整するためのVolume Componentを作成します。
Weightパラメータを操作すると、どのぐらいモノクロ化するか調整できます。

MonochromeVolume.cs

https://gist.github.com/went5/6a46b33b20b41a4e6cd1cde58a8b17c2?file=GrayscaleVolume.cs

PostEffectPassを実装する

カスタム描画パスを作成するために、ScriptableRenderPassを継承して実装しています。
グルーコードのようなものなのでここでは解説しません。

PostEffectPass.cs

https://gist.github.com/went5/6a46b33b20b41a4e6cd1cde58a8b17c2?file=PostEffectPass.cs

PostEffectFeatureを実装する

レンダラーデータに追加するために、ScriptableRendererFeatureを継承して実装しています。

PostEffectFeature.cs

https://gist.github.com/went5/6a46b33b20b41a4e6cd1cde58a8b17c2?file=PostEffectFeature.cs

Create メソッドでは、PostEffectPassのインスタンスを生成しています。
renderPassEvent に描画パスのタイミングを指定することで、
どの順番で実行してほしいか設定することができます。

renderPassEvent = RenderPassEvent.AfterRenderingPostProcessing

描画パスイベントの一覧
https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@12.1/api/UnityEngine.Rendering.Universal.RenderPassEvent.html

AddRenderPasses メソッドでは、
VolumeComponentで設定したWeight値をマテリアルにセットし、描画パスを追加しています。

_monoPass.material.SetFloat("_Weight", mono.Weight.value);
renderer.EnqueuePass(_monoPass);

モノクロシェーダーを実装する

シェーダーグラフを使って、テクスチャをモノクロ化するシェーダーを作ります。

Grayscale.shadergraphの全体図

shadergraph

以下のURL先を名前をつけて保存してください (Grayscale.shadergraph)
https://gist.githubusercontent.com/went5/6a46b33b20b41a4e6cd1cde58a8b17c2/raw/1915393ed872882642cacd2a1c9e6f2c3a766d7d/Grayscale.shadergraph

Texture2D型の変数の名前をMainTexとすることで、カメラのカラーバッファからテクスチャを受け取ることができます。
このテクスチャから、輝度を抽出してWeight値で補間をかけたのが上記のシェーダーグラフとなります。

Shader Graph Param

Renderer Featureを追加する

PostEffect Rendererに Renderer Featureを追加します。

Add Renderer Feature

Mono Shaderには、さきほど作ったShaderGraphを入れます。

Post Effect Feature

シーンにVolumeを追加

シーンにポストプロセス効果を与えるために、VolumeComponentを持つオブジェクトを追加します。
さらにヒエラルキーで右クリックして、Volume > Globalを選択します。

そうすると、Volume Component内にAddOverrideというボタンがあるため、
クリックしてGrayscaleVolumeを追加します。

Add Override

Weight値を0以上にすると、ポストプロセスが効くようになります。

参考

https://github.com/keijiro/URPTestbed

Table of contents


©️ 2026 went5. blog icon by

icons8