PostProcessing(URP Volume)干渉問題

unity技術

さり気なくPostProcessing(今回はVignette)を行ったところ、
複数あるすべてのSceneに影響を及ぼす「PostProcess_Profile」の解除ができなかった問題が起こりました。

解決法:「Volume Profile」のデフォルト設定を「DefaultVolumeProfile」にする。

デフォルトで「SampleSceneProfile」が設定されているため、
Sceneで「None」にしようが、新規のProfileにしようが、すべてを上書きしてくる凶悪挙動を行ってきます。

干渉問題

発生した問題

ノベルSceneのVignetteがタイトルSceneにも適用されており、
Local/Global」の切り替えや「Profile」の変更をしても解消されなかった。

何を設定しても、設定を消しても、2つのSceneに影響がでていました。
Profile」を「None」にしても設定が消えることはなく、適応され続けました。

原因

URPのRenderPipelineAsset(PC_RPAsset)の「VolumeProfile」に
SampleSceneProfile」が設定されており、そこでVignetteをオンにしていた。

これはURPの新規プロジェクト作成時のデフォルト状態であり、
PipelineAsset側の「Profile」はSceneのVolumeオブジェクトの設定を上書きして常に効き続けます。

URPのVolume 3層構造(重要)

Pipeline Asset の Volume Profile
  → 全Scene・全カメラに常時適用されるデフォルト
  → ここが最優先で効き続ける

Scene内のVolumeオブジェクト
  → Scene単位で上書き・追加できる
  → GlobalはScene全体、LocalはCollider範囲内に適用

CameraのPostProcessing
  → カメラ単位でオン/オフ

上位層が効き続けるため、②をいくら変更しても①が残っていれば干渉する。

解決手順

「Edit」>「Project Settings」>「Graphics

Default Render Pipeline の URPアセット(PC_RPAsset)を開きます。

PC_RPAssetのインスペクター内
「Volumes」>「Volume Profile」が「SampleSceneProfile」になっていることを確認します。

SampleSceneProfile」を「DefaultVolumeProfile」に変更します。

DefaultVolumeProfile」にすることにより、最優先常時適用の呪縛は解かれますが、
各Sceneでの各適用を確実にするために、各Sceneに新規Profileを作成して、それを選択しておきます。

各Sceneの「PostProces」のVolumeに設定されている「SampleSceneProfile」を
「New」で作成したProfileに設定しなおしておきます。

現在の構成

設定内容
Pipeline AssetDefaultVolumeProfileエフェクトなし
タイトルSceneタイトル用Profile独自設定
ノベルSceneノベル用Profile独自設定(Vignette等)

今回判明したその他の仕様

  • Unity 6000系 + URP 17系では Universal Additional Camera Data の項目がCameraコンポーネントのRendering セクションに統合されており、独立した項目として表示されない。
    これは仕様であり異常ではない。
  • VolumeをLocalモードにする場合はColliderが必須。
    ただし今回の干渉問題とは無関係だった。
  • 新規URPプロジェクトのPipeline AssetはSampleSceneProfileがデフォルトで設定されている。
    開発開始前にDefaultVolumeProfileへの差し替えが推奨される。

コメント