Version: 2021.1
渲染管线简介
选择和配置渲染管线和光照解决方案

切换渲染管线

本页面包含有关设置 Unity 当前使用的活动渲染管线的信息。此信息可让您切换到内置渲染管线、通用渲染管线 (URP)、高清渲染管线 (HDRP) 或自定义渲染管线。

请注意,如果要切换到另一个渲染管线,必须确保项目中的资源和代码兼容新的渲染管线实例,否则,可能会遇到错误或意外的视觉效果。

一旦您在 Unity 编辑器中设置了活动渲染管线,Unity 就会开始使用它进行渲染。这包括 Game 视图、Scene 视图,以及 Project 面板和 Inspector 中显示的材质预览。

激活内置渲染管线

要将活动渲染管线设置为内置渲染管线,您必须告知 Unity 您未使用任何基于可编程渲染管线的渲染管线。当您从项目设置中删除所有这些引用后,Unity 默认使用内置渲染管线。

为此需要执行以下操作:

  1. 导航到 Edit > Project Settings > Quality,从而打开 Quality Settings 窗口。
  2. 对于每个质量级别,将 Render Pipeline 字段设置为 None
  3. 导航到 Edit > Project Settings > Graphics,从而打开 Graphics Settings 窗口。
  4. Scriptable Render Pipeline Setting 字段设置为 None

激活基于 SRP 的 URP、HDRP 或自定义渲染管线

要将活动渲染管线设置为基于 SRP 的渲染管线,您必须告诉 Unity 要使用哪个渲染管线资源。渲染管线资源是一种资源,其中包含有关要使用的渲染管线以及如何配置该渲染管线的数据。

您可以拥有多个渲染管线资源,让 Unity 以不同配置使用同一渲染管线;例如,您可能有一个适合高端硬件的设置,一个适合低端硬件的设置。

有关渲染管线资源的一般介绍,请参阅可编程渲染管线简介。有关 URP 中渲染管线资源的信息,请参阅通用渲染管线资源。有关 HDRP 中渲染管线资源的信息,请参阅高清渲染管线资源

在 Unity 编辑器中

  1. 导航到 Edit > Project Settings > Graphics,从而打开 Graphics Settings 窗口。
  2. 在 Project 文件夹中,找到要使用的渲染管线的渲染管线资源。
  3. 将渲染管线资源拖放到 Scriptable Render Pipeline Setting 字段。这样定义了默认渲染管线,在给定质量级别没有覆盖值时,Unity 使用该管线。
  4. 可选,要为不同的质量级别使用不同的渲染管线资源:导航到 Edit > Project Settings > Quality 打开 Quality Settings 设置窗口。
  5. 可选,要为不同的质量级别使用不同的渲染管线资源:对于每个质量级别,将渲染管线资源拖放到 Render Pipeline 字段。

在 C# 代码中

您可以使用 C#代码设置渲染管线资源。您可以在 Unity 编辑器中以编辑模式或运行模式运行此代码,或者在构建的播放器中在运行时运行此代码。

由于 SRP 是高度可配置的,因此更改活动的渲染管线资源可能会导致更改差异很大(例如从 URP 切换到 HDRP)。在运行时更改渲染管线资源的性能成本相应地有所不同。

请注意,切换到新的渲染管线资源会使 Unity 销毁当前的渲染管线实例,并调用新渲染管线资源的 CreatePipeline() 方法。根据 SRP 中的代码,此操作可能在计算上是资源密集型操作。

以下示例代码显示了如何设置存储在 GraphicsSettings.renderPipelineAsset 中的默认渲染管线资源。

请注意,如果您已在项目的 Quality Settings 为渲染管线资源指定了质量级别,则当前质量级别的渲染管线资源将覆盖默认渲染管线资源。您可以如以下代码所示的方式在 C# 代码中使用 QualitySettings-renderPipeline API 进行更新。

using UnityEngine;
using UnityEngine.Rendering;
 
public class SwitchRenderPipelineAsset : MonoBehaviour
{
    public RenderPipelineAsset exampleAssetA;
    public RenderPipelineAsset exampleAssetB;
 
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A)) {
            GraphicsSettings.renderPipelineAsset = exampleAssetA;
            Debug.Log("Default render pipeline asset is: " + GraphicsSettings.renderPipelineAsset.name);
        }
        else if (Input.GetKeyDown(KeyCode.B)) {
            GraphicsSettings.renderPipelineAsset = exampleAssetB;
            Debug.Log("Default render pipeline asset is: " + GraphicsSettings.renderPipelineAsset.name);
        }
    }
渲染管线简介
选择和配置渲染管线和光照解决方案