Version: Unity 6.0 (6000.0)
言語 : 日本語
URP のアップグレード
URP 16 (Unity 2023.2) にアップグレードする

URP 17 (Unity 6) へのアップグレード

このページでは、ユニバーサルレンダーパイプライン (URP) の旧バージョンから URP 17 (Unity 6) にアップグレードする方法を説明します。

ビルトインレンダーパイプラインのプロジェクト用に作成したアセットを、URP と互換性のあるアセットに変換する方法については、レンダーパイプラインコンバータ のページを参照してください。

URP 15 または URP 16 (Unity 2023.1、Unity 2023.2) からのアップグレード

レンダーグラフシステム

URP 17 では、レンダーグラフ システムが導入されました。この一環として、カスタムレンダーパスの記述方法が大幅に変更されました。

プロジェクトにカスタムレンダーパスが含まれている場合は、レンダーグラフ API を使用してパスを書き直してください。レンダーグラフの詳細については、レンダーグラフシステム セクションを参照してください。

以下のページでは、レンダーグラフ API を使用するレンダーパスを使用したスクリプタブルレンダラー機能の完全な例を紹介します。

ノート:Unity は、今後は、レンダーグラフ API を使用しないレンダリングパスの開発や改善を行うことはありません。

レンダーグラフは、新しい URP プロジェクトではデフォルトで有効になります。

互換性のために、Unity 6 にはレンダーグラフシステムを無効にして以前の URP バージョンのレンダリング API を使用するオプションがあります。レンダーグラフを無効にするには、以下のチェックボックスを有効にします。

  • Project Settings > Graphics > Render Graph > Compatibility Mode (Render Graph Disabled)

レンダーグラフを使用しない URP バージョンで作成された既存のプロジェクトを開くと、Unity 6 でプロジェクトを開いた後、Unity が自動的に互換性モードを有効にします。

レンダーグラフの実装をよりよく理解するには、レンダーグラフビューアー を使用してください。

Volume フレームワーク

VolumeComponent.Override(VolumeComponent state, float interpFactor) メソッドをオーバーライドするカスタム Volume コンポーネントクラスを作成する場合、実装では、VolumeParameter 値が変更されるたびに VolumeParameter.overrideState プロパティを true に設定する必要があります。これにより、Volume フレームワークがパラメーターを正しいデフォルト値にリセットします。これにより、フレームごとに使用するリソースが削減され、パフォーマンスが向上します。

URP 13 (Unity 2022.1) からのアップグレード

2 つのシェーダー定義の削除

SHADER_QUALITY_LOW/MEDIUM/HIGH および SHADER_HINT_NICE_QUALITY シェーダー定義が削除されました。カスタムシェーダーでこれらの定義を使用していた場合は、SHADER_API_MOBILE または SHADER_API_GLES 定義を使用して SHADER_QUALITY_LOW/MEDIUM/HIGH を置き換えることを検討してください。

URP 12 (Unity 2021.2) からのアップグレード

ScriptableRenderer API 動作の変更

レンダーターゲットが ScriptableRenderer クラスによって割り当てられる前に、ScriptableRendererFeature のインスタンスがアクセスしようとすると、エラーが表示されるようになりました。

ScriptableRendererFeature クラスには新しい仮想関数 SetupRenderPasses があります。これは、レンダーターゲットが割り当てられ、使用する準備ができたときに呼び出されます。

コードで AddRenderPasses メソッドオーバーライド内の ScriptableRenderer.cameraColorTarget または ScriptableRenderer.cameraDepthTarget プロパティを使用している場合は、その実装を ScriptableRendererFeature.SetupRenderPasses メソッドに移動する必要があります。

ScriptableRenderer.EnqueuePass メソッドの呼び出しは、引き続き AddRenderPasses メソッド内で発生します。

以下の例は、新しい API を使用するようにコードを変更する方法を示しています。

古い API でのコード:

public override void AddRenderPasses(ScriptableRenderer renderer,
                                    ref RenderingData renderingData)
{
    // The target is used before allocation
    m_CustomPass.Setup(renderer.cameraColorTarget);
     // Letting the renderer know which passes are used before allocation
    renderer.EnqueuePass(m_ScriptablePass);
}

新しい API でのコード:

public override void AddRenderPasses(ScriptableRenderer renderer,
                                        ref RenderingData renderingData)
{
    // Letting the renderer know which passes are used before allocation
    renderer.EnqueuePass(m_ScriptablePass);
}

public override void SetupRenderPasses(ScriptableRenderer renderer,
                                          in RenderingData renderingData)
{
    // The target is used after allocation
    m_CustomPass.Setup(renderer.cameraColorTarget);
}

ユニバーサルレンダラーが RTHandle システムを使用

ユニバーサルレンダラーが、内部ターゲットと内部パスに RTHandle システム を使用するようになりました。

RenderTargetHandle 構造体の使用はすべて非推奨として設定され、この構造体は将来削除されます。

パブリックインターフェース ScriptableRenderer.cameraColorTargetScriptableRenderer.cameraDepthTarget は非推奨としてマークされます。それぞれ ScriptableRenderer.cameraColorTargetHandleScriptableRenderer.cameraDepthTargetHandle に置き換えてください。

RTHandle ターゲットは CommandBuffer.GetTemporaryRT メソッドを使用せず、RenderTargetIdentifier 構造体よりも多くのフレームにわたって保持されます。プロパティ GraphicsFormatDepthBufferBits を 0 以外の値に設定して RTHandle ターゲットを割り当てることはできません。cameraDepthTarget プロパティは、cameraColorTarget プロパティから分離する必要があります。

以下のヘルパー関数を使用すると、以前の GetTemporaryRT メソッドと同様の方法で、RTHandle システムで一時レンダーターゲットを作成および使用できます。

  • RenderingUtils.ReAllocateIfNeeded

  • ShadowUtils.ShadowRTReAllocateIfNeeded

アプリケーションの生存期間内にレンダーターゲットを変更しない場合は、RTHandles.Alloc メソッドを使用して RTHandle ターゲットを割り当てます。このメソッドは、コードが各フレームでレンダーターゲットを割り当てる必要があるかどうかを確認する必要がないため効率的です。

レンダーターゲットが全画面テクスチャの場合、つまりその解像度が画面の解像度と同じか、またはその分数倍である場合は、Vector2D.one などのスケーリング係数を使用して動的スケーリングをサポートします。

以下の例は、RenderTargetHandle API を使用しているコードを新しい API を使用するように変更する方法を示しています。

古い API でのコード:

public class CustomPass : ScriptableRenderPass
{
    RenderTargetHandle m_Handle;
    // With the old API, RenderTargetIdentifier might combine color and depth
    RenderTargetIdentifier m_Destination;

    public CustomPass()
    {
        m_Handle.Init("_CustomPassHandle");
    }

    public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)
    {
        var desc = renderingData.cameraData.cameraTargetDescriptor;
        cmd.GetTemporaryRT(m_Handle.id, desc, FilterMode.Point);
    }

    public override void OnCameraCleanup(CommandBuffer cmd)
    {
        cmd.ReleaseTemporaryRT(m_Handle.id);
    }

    public void Setup(RenderTargetIdentifier destination)
    {
        m_Destination = destination;
    }

    public override void Execute(ScriptableRenderContext context,
                                    ref RenderingData renderingData)
    {
        CommandBuffer cmd = CommandBufferPool.Get();
        // Set the same target for color and depth
        ScriptableRenderer.SetRenderTarget(cmd, m_Destination, m_Destination, clearFlag,
                                              clearColor);
        context.ExecuteCommandBuffer(cmd);
        CommandBufferPool.Release(cmd);
    }
}

新しい API でのコード:

public class CustomPass : ScriptableRenderPass
{
    RTHandle m_Handle;
    // Then using RTHandles, the color and the depth properties must be separate
    RTHandle m_DestinationColor;
    RTHandle m_DestinationDepth;

    void Dispose()
    {
        m_Handle?.Release();
    }

    public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)
    {
        var desc = renderingData.cameraData.cameraTargetDescriptor;
        // Then using RTHandles, the color and the depth properties must be separate
        desc.depthBufferBits = 0;
        RenderingUtils.ReAllocateIfNeeded(ref m_Handle, desc, FilterMode.Point,
                                         TextureWrapMode.Clamp, name: "_CustomPassHandle");
    }

    public override void OnCameraCleanup(CommandBuffer cmd)
    {
        m_DestinationColor = null;
        m_DestinationDepth = null;
    }

    public void Setup(RTHandle destinationColor, RTHandle destinationDepth)
    {
        m_DestinationColor = destinationColor;
        m_DestinationDepth = destinationDepth;
    }

    public override void Execute(ScriptableRenderContext context,
                                    ref RenderingData renderingData)
    {
        CommandBuffer cmd = CommandBufferPool.Get();
        ScriptableRenderer.SetRenderTarget(cmd, m_DestinationColor, m_DestinationDepth,
                                              clearFlag, clearColor);
        context.ExecuteCommandBuffer(cmd);
        CommandBufferPool.Release(cmd);
    }
}

URP 11.x.x からのアップグレード

  • フォワードレンダラーアセットの名称が、ユニバーサルレンダラーアセットに変わりました。URP 12 が含まれている Unity エディターで既存のプロジェクトを開くと、フォワードレンダラーアセットがユニバーサルレンダラーアセットに更新されます。

  • ユニバーサルレンダラーアセットに含まれている Rendering Path プロパティで、フォワードレンダリングパスまたはディファードレンダリングパスを選択できます。

  • ClearFlag.Depth メソッドでステンシルバッファが暗示的に消去されることはなくなりました。新しいメソッド ClearFlag.Stencil を使用してください。

  • URP 12 以降には レンダーパイプラインコンバータ 機能が実装されています。これは、これまで Edit > Render Pipeline > Universal Render Pipeline > Upgrade… から使用できたアセットアップグレード機能に替わる機能です。

URP 10.0.x–10.2.x からのアップグレード

  1. 新しいファイル名にはスペースが含まれません。新しいファイル名にはスペースが含まれません。
    Autodesk Interactive
    Autodesk Interactive Masked
    Autodesk Interactive Transparent

    コードで Shader.Find() メソッドを使用してシェーダーを検索する場合は、Shader.Find("AutodeskInteractive) のように、シェーダー名からスペースを削除してください。

URP 7.2.x 以降のリリースからのアップグレード

  1. URP 12.x.x は Post-Processing Stack v2 パッケージをサポートしていません。プロジェクトで Post-Processing Stack v2 パッケージを使用している場合は、まずそのパッケージを使用するエフェクトを移行します。

DepthNormals パス

バージョン 10.0.x 以降では、URP が _CameraNormalsTexture という法線テクスチャを生成できます。カスタムシェーダーでこのテクスチャにレンダリングするには、DepthNormals というパスを加えます。例については、Lit.shader での実装を参照してください。

スクリーンスペースアンビエントオクルージョン (SSAO)

URP 10.0.x には、スクリーンスペースアンビエントオクルージョン (SSAO) エフェクトが実装されています。

カスタムシェーダーで SSAO エフェクトを使用する場合は、SSAO に関連する以下のエンティティを考慮してください。

  • _SCREEN_SPACE_OCCLUSION キーワード。

  • Input.hlsl には、InputData 構造体に新しい宣言 float2 normalizedScreenSpaceUV が含まれています。

  • Lighting.hlsl には AmbientOcclusionFactor 構造体と間接的および直接的なオクルージョンを計算するための変数が含まれています。

    struct AmbientOcclusionFactor
    {
        half indirectAmbientOcclusion;
        half directAmbientOcclusion;
    };
    
  • Lighting.hlsl には、SSAO テクスチャをサンプリングするための以下の関数が含まれています。

    half SampleAmbientOcclusion(float2 normalizedScreenSpaceUV)
    
  • Lighting.hlsl には、以下の関数が含まれています。

    AmbientOcclusionFactor GetScreenSpaceAmbientOcclusion(float2
    normalizedScreenSpaceUV)
    

カスタムシェーダーで SSAO をサポートするには、DepthNormals パスと _SCREEN_SPACE_OCCLUSION キーワードをシェーダーに追加します。例えば、Lit.shader をオンにします。

カスタムシェーダーがカスタムライティング関数を実装する場合は、GetScreenSpaceAmbientOcclusion(float2 normalizedScreenSpaceUV) 関数を使用してライティング計算の AmbientOcclusionFactor 値を取得します。

影の法線バイアス

11.0.x では、影の法線バイアスを適用する式が、より適切にパンクチュアルライトと機能するよう若干修正されました。そのため、シーンによっては、以前のリビジョンの影のアウトラインと正確に一致させるために、このパラメーターの調整が必要になることがあります。通常は、ディレクショナルライトで 1.0 の代わりに 1.4 を使用すれば十分です。

中間テクスチャ

以前のバージョンの URP では、レンダラーにアクティブなレンダラー機能がある場合に、URP は中間レンダラーを使用してレンダリングしていました。これは、一部のプラットフォームではパフォーマンスに大きな影響を与えます。このリリースでは、URP はこの問題を以下の方法で緩和します。URP は、レンダラー機能が ScriptableRenderPass.ConfigureInput メソッドを使用して入力を宣言することを想定しています。このメソッドは、中間テクスチャを使用したレンダリングが必要かどうかを自動的に判断するための情報を提供します。

ユニバーサルレンダラーには、互換性のための新しいプロパティ Intermediate Texture があります。このプロパティで Always を選択すると、URP は中間テクスチャを使用します。Auto を選択すると、新しい動作が有効になります。レンダラー機能が ScriptableRenderPass.ConfigureInput メソッドを使用して入力を宣言しない場合にのみ、Always オプションを使用するようにしてください。

既存のプロジェクトが正常に機能するように、レンダラー機能 (URP に含まれているものを除く) を使用していたすべての既存のユニバーサルレンダラーアセットでは、Intermediate Texture プロパティで Always オプションが選択されています。新しく作成されたユニバーサルレンダラーアセットでは、Auto オプションが選択されます。

URP 7.0.x–7.1.x からのアップグレード

  1. まず、URP 7.2.0 にアップグレードします。ユニバーサルレンダーパイプラインのバージョン 7.2.0 にアップグレードする を参照してください。

  2. URP 8.x.x は Post-Processing Stack v2 パッケージをサポートしていません。プロジェクトで Post-Processing Stack v2 パッケージを使用している場合は、まずそのパッケージを使用するエフェクトを移行します。

LWRP から 12.x.x へのアップグレード

  • LWRP から URP 12.x.x. に直接アップグレードすることはできません。まず LWRP から URP 11.x.x にアップグレードする手順に従い、次に URP 11.x.x から URP 12.x.x にアップグレードしてください。
URP のアップグレード
URP 16 (Unity 2023.2) にアップグレードする
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961