うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】URP で PostProcess を利用する

URP で PostEffect を利用するには ForwardRendererData を作成して UniversalRenderPipeline に登録する必要がある

この手順を記述する

ScriptableRendererFeature の作成

ScriptableRendererFeature は レンダラーにレンダリングパスを追加するためのクラスで
ここにポストエフェクトに必要な処理を書く

Shader を適応するだけのシンプルなクラスが以下になる

using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;

public class PostEffectTest : ScriptableRendererFeature
{
    private class Pass : ScriptableRenderPass
    {
        private readonly string tag = "Test Pass";

        private readonly Material _material;

        public Pass(Shader shader) : base()
        {
            _material = new Material(shader);
            renderPassEvent = RenderPassEvent.AfterRenderingTransparents;
        }

        public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
        {
            var target = renderingData.cameraData.renderer.cameraColorTarget;

            var buffer = CommandBufferPool.Get(tag);
            buffer.Blit(target, target, _material);
            context.ExecuteCommandBuffer(buffer);
        }
    }

    [SerializeField]
    private Shader _shader;

    private Pass _pass;

    public override void Create()
    {
        _pass = new Pass(_shader);
    }

    public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
    {
        renderer.EnqueuePass(_pass);
    }
}

ForwardRendererData の作成

ForwardRendererData は 以下のメニューより作成できる

f:id:hacchi_man:20210627022047p:plain

作成後「Add Render Feature」を押すと先程作成したクラス名が表示されるので選択する

f:id:hacchi_man:20210627022203p:plain:w300

その後、PostProcess 用の Shader をセットする

この際に利用する Shader は今まで利用していたものと同じものでよい

f:id:hacchi_man:20210627022310p:plain:w300

UniversalRenderPipeline に登録

  • UniversalRP-LowQuality
  • UniversalRP-MediumQuality
  • UniversalRP-HighQuality

などの名前で URP 用の設定ファイルがあるので

この General / RenderList に先程作成した ForwardRendererData を追加する

f:id:hacchi_man:20210627022551p:plain:w450

カメラの Render を切り替える

ForwardRendererData を追加すると Rendering / Render に先程追加したものが表示されるので切り替える

f:id:hacchi_man:20210627022644p:plain:w450

これにより、PostProcess を適応することができた

f:id:hacchi_man:20210627022804p:plain:h200f:id:hacchi_man:20210627022816p:plain:h200