現在のQualityにAssetがあればそれを使用し、NoneならGraphicsの既定Assetへ進みます。両方NoneならBuilt-inです。
図:現在のQualityにAssetがあればそれを使用し、NoneならGraphicsの既定Assetへ進みます。両方NoneならBuilt-inです。(クリックで拡大)

症状と、最初に確認すること

URP AssetのRender Scaleや影の設定を変えたのに反映されない、Qualityを切り替えると見た目が戻る場合は、編集しているAssetと実際に選ばれているAssetが一致しているか確認します。この記事はUnity 2022.3 LTS・URP 14を基準にしています。

Qualityの指定がGraphicsの既定値に優先する

Unityは現在のQualityレベルにRender Pipeline Assetが指定されていれば、それを使います。Quality側がNoneなら、GraphicsのDefault Render Pipelineを使います。両方がNoneの場合はBuilt-in Render Pipelineです。Quality側をNoneにしただけで、必ずBuilt-inになるわけではありません。

例えばGraphicsにDesktopAsset、LowのQualityにMobileAssetを指定していると、Lowで有効なのはMobileAssetです。この状態でDesktopAssetの値だけを変更しても、Lowの画質設定は変わりません。

設定を確認する順番

  1. Edit > Project Settings > Qualityを開き、現在のレベル名とRender Pipeline Assetの参照を確認します。
  2. 参照先のURP AssetをProjectウィンドウで選択し、調べたい値を確認します。Quality側がNoneの場合だけ、Graphicsの既定Assetへ進みます。
  3. 対象プラットフォームの既定Qualityも確認します。Editorで選んだレベルと、Playerの起動時に使うレベルが同じとは限りません。
  4. 設定画面や起動コードでQualitySettings.SetQualityLevelを呼んでいないか検索し、Quality変更後にも有効なAsset名を確認します。

実行中のAssetをログで確かめる

次をActiveRenderPipelineReport.csとして保存し、シーン内のGameObjectに付けます。Play中にComponentのコンテキストメニューから「Log active render pipeline」を実行すると、現在のQuality名と選択されたAsset名をConsoleへ出します。これは設定を変更しない診断用コードです。

using UnityEngine;
using UnityEngine.Rendering;

public sealed class ActiveRenderPipelineReport : MonoBehaviour
{
    [ContextMenu("Log active render pipeline")]
    public void LogActivePipeline()
    {
        int index = QualitySettings.GetQualityLevel();
        string[] names = QualitySettings.names;
        string quality = index >= 0 && index < names.Length
            ? names[index]
            : index.ToString();
        RenderPipelineAsset asset = GraphicsSettings.currentRenderPipeline;
        string pipeline = asset != null
            ? asset.name
            : "Built-in Render Pipeline";
        Debug.Log($"Quality: {quality}; Pipeline: {pipeline}", this);
    }
}

ContextMenuはEditorでの操作用です。Playerで調べる場合は、初期設定の適用後やQuality変更後にLogActivePipeline()を呼び、対象端末のログで確認してください。GraphicsSettings.currentRenderPipelineがnullなら、その時点の選択はBuilt-inです。同名Assetが複数ある場合は、名前だけで区別せずProject内の参照先も確認します。

Assetが正しければ、Renderer・Cameraを調べる

URP AssetとUniversal Renderer Dataは別のAssetです。Render Featureを調べるときは、有効なURP AssetのRenderer Listをたどり、対象Cameraが選んでいるRendererを確認します。URP Assetが同じでも、CameraのRenderer指定によって使うRender Featureが異なる場合があります。ポストエフェクトなら、CameraのPost Processingと対象Volumeの適用条件も調べます。

修正後の確認

  • 使用する各Qualityへ切り替え、有効なAssetと変更した値が意図どおりか確認する。
  • Editorと対象Playerの両方で、起動直後と設定変更後のログを比較する。
  • 調査後は一時的に変更した値を戻し、意図したQuality差だけが残るか確認する。

Qualityごとに別Assetを持つ設計なら、それぞれの参照と値を修正します。参照を一律Noneにしてしまうと、端末別に用意した設定差を失うことがあるため、原因の確認前にまとめて解除しないでください。Unity 6ではUI表記やURPの版が異なるため、利用中の版のマニュアルも確認します。

参考資料