Version: Unity 6.0 (6000.0)
言語 : 日本語
URP 17 (Unity 6) へのアップグレード
URP 15 (Unity 2023.1) へのアップグレード

URP 16 (Unity 2023.2) にアップグレードする

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

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

URP 15 (Unity 2023.1) からのアップグレード

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.hlslInputData 構造体には、新しい宣言 float2 normalizedScreenSpaceUV が含まれています。

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

    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 を使用すれば十分です。

Intermediate Texture

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

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

既存のプロジェクトが正常に機能するように、Renderer Feature (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 17 (Unity 6) へのアップグレード
URP 15 (Unity 2023.1) へのアップグレード
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961