🗂

[unity6] URP のポストプロセス

に公開

BRPURP ではずいぶん異なっているようなので、備忘録として初期設定方法を紹介します。
有料アセットである SC PostEffects PackBeautify3 についてもまとめてみました。

✅準備

Universal 3D でプロジェクトを新規作成します。
Global Volume というオブジェクトが最初から配置されていますが、これがポストプロセスを設定するオブジェクトになります。

適当な 3D オブジェクトがなかったので、2D で確認します。


用意した画像

❗注意点

  • UI/Image の場合、CanvasMain Camera をアタッチするようにしてください。
  • Main CameraPost Processing に✅を入れておきます。

🎯プリインストールされたポストプロセス

BRP と違い、最初から用意されている Global Volume を設定するだけで、お手軽に映像に変化をつけることができます。

例えばこんな感じに設定すると、さっきの画像がこのように変化します。
新しい項目は Add Override で追加することができます。

🎯SC Post Effects Pack

非常に多くのエフェクトを持っていますが、処理負荷が高いものもあります。
(Unity6 には現在正式に対応していませんが、一応使うことはできました)

  • (購入していなければ)SC Post Effects Pack を購入
  • Package Manager からインストール

  • EnableInstall files -> update filesUnpack files を選択
  • Global Volume > Add Override > SC Post Effects > Blurring > Blur を選択

  • 警告に従って > Add すると、Assets/Settings/PC_Renderer に設定されます。

  • SC Post Effects Pack は正式に Render Graph に対応していないので、Project Settings > Graphics > Render Graph > Compatibility Mode (Render Graph Disabled) に✅をつけてください。
  • Amount の値をあげると、ブラー効果が確認できます。
    (モバイルなどで負荷が高い場合は Downscaling の値を上げましょう)


ブラー(ぼかし)

  • 他にもいろいろあります。例えば Kuwahara を設定するとこんな手書き風に。


手書き風

🎯Beautify3

こちらも多数のエフェクトを持っています。Render Graph にも正式対応済。

  • (購入していなければ)Beautify3 を購入
  • Package Manager からインストール
  • インポート後、フォルダにある URP/Beautify_URP(.unitypackage) を実行し、更にインポート


Yes で OK

  • Global Volume > Add Override > Kronnect > Beautify
  • まだ使えない状態。Go to Universal Rendering Pipeline Asset ボタンを押す

  • PC_RendererRenderer FeaturesBeautify を追加し、✅をつけます。
    Mobile_Renderer など、設定ファイルがターゲットごとにある場合、全てに設定してください。
  • Beautify は、その中にBeautify Shader Features Stripping という項目があります。使用しない場合、✅をつけてください(Renderer Features と設定値が逆になるので、注意)

  • Global Volume に戻り、Night VisionEnable を✅します
    先ほどの Beautify Shader Features Stripping を正しく設定していない場合、警告が出るので、(click to configure) をクリック

  • Strip Night Vision の✅を外します(✅のある項目=使用しない

  • Night Vision が反映された画面になっていることを確認します


ナイトビジョン

✅コードで Render Features を制御する

BRP と異なり、Renderer で使用のオンオフを定義するのがちょっと面倒ですが、これによってパフォーマンスの改善を制御できるようなので、慣れていきましょう。

下記は、「GlobalVolume にあるメンバーのみオンにする」コードです。
VolumeProfile を場面ごとに作り、切り替える想定。
エラーチェックや変数のキャッシュは捨て、とりあえず動くことを優先しているので、必要に応じて書き換えてください。

public static void SetProfile(VolumeProfile profile)
{
    var volume = FindFirstObjectByType<Volume>(FindObjectsInactive.Include)
    volume.profile = profile;

    HashSet<string> names = new();

    foreach (var component in volume.profile.components)
    {
        names.Add(component.name);
    }

    // Volume に存在する Render Feature を全て有効化. それ以外は無効化
    var renderer = (UniversalRenderPipeline.asset.scriptableRenderer as UniversalRenderer);

    var rendererFeatures = UniversalRenderPipeline.asset.rendererDataList[0].rendererFeatures;

    foreach (var feature in rendererFeatures)
    {
        if (names.Contains(feature.name) == true)
        {
            feature.SetActive(true);
        }
        else
        {
            feature.SetActive(false);
        }
    }
}

Renderer には予め使用する Feature を全部登録しておきます。
その際、名前はクラス名に一致させておく必要があります。

Discussion