版本:Unity 6 (6000.0)
语言:English
设置渲染管线
使用通用渲染管线

更改或检测活动渲染管线

此页面包含有关如何获取、设置和配置 Unity 当前正在使用的渲染管线一系列操作,用于获取场景内容并在屏幕上显示。Unity 允许您从预构建的渲染管线中选择,或编写自己的渲染管线。 更多信息
请参阅 词汇表
的信息。Unity 当前正在使用的渲染管线称为活动渲染管线。

概述

为了渲染内容,Unity 可以使用内置渲染管线或基于可脚本化渲染管线 (SRP) 的渲染管线,其中包括通用渲染管线 (URP) 和高清渲染管线 (HDRP)。

要指定 Unity 使用哪个可脚本化渲染管线,请使用渲染管线资源。渲染管线资源告诉 Unity 使用哪个 SRP 以及如何配置它。如果您未指定渲染管线资源,则 Unity 使用内置渲染管线。

您可以创建多个使用相同渲染管线但具有不同配置的渲染管线资源;例如,您可以为不同的硬件质量级别使用不同的渲染管线资源。有关渲染管线资源的常规介绍,请参阅可脚本化渲染管线简介。有关 URP 的渲染管线资源的信息,请参阅通用渲染管线资源,有关 HDRP 的渲染管线资源的信息,请参阅高清渲染管线资源

在 Unity 编辑器中或运行时更改活动渲染管线后,Unity 会立即使用新的活动渲染管线来渲染内容。如果您在 Unity 编辑器中,这包括游戏视图、场景场景包含游戏环境和菜单。将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您放置环境、障碍物和装饰,本质上是分块设计和构建您的游戏。 更多信息
请参阅 词汇表
视图以及项目面板和检视器一个 Unity 窗口,显示有关当前选定游戏对象、资源或项目设置的信息,允许您检查和编辑值。 更多信息
请参阅 词汇表
中材质的预览。

更改活动渲染管线时,必须确保项目中的资源和代码与新的渲染管线兼容;否则,您可能会遇到错误或意外的视觉效果。

确定活动渲染管线

图形设置质量设置中的设置都决定了活动渲染管线。在图形设置中,您可以配置 Unity 默认使用的渲染管线。在质量设置中,您可以为给定的质量级别覆盖默认渲染管线。

要获取或设置默认渲染管线,请使用图形设置 > 可脚本化渲染管线设置(或其等效 API,GraphicsSettings.defaultRenderPipeline)。要获取或设置覆盖给定质量级别的默认渲染管线的渲染管线,请使用质量设置 > 渲染管线(或其等效 API,QualitySettings.renderPipeline)。

Unity 如下确定活动渲染管线

  • 如果当前质量设置级别 > 渲染管线引用了渲染管线资源,则 Unity 使用该值。
  • 否则
    • 如果图形设置 > 可脚本化渲染管线设置引用了渲染管线资源,则 Unity 使用该值。
    • 否则,Unity 使用内置渲染管线。

如何在编辑器 UI 中获取和设置活动渲染管线

获取活动渲染管线

要在编辑器UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
请参阅 词汇表
中获取活动渲染管线,您必须检查图形设置和质量设置窗口。有关如何使用这些值来确定活动渲染管线的信息,请参阅确定活动渲染管线

激活内置渲染管线

要将活动渲染管线设置为内置渲染管线,请从图形设置和质量设置中移除任何渲染管线资源。

操作方法

  1. 选择编辑 > 项目设置 > 质量
  2. 对于每个质量级别,如果将渲染管线资源分配给渲染管线字段,请取消分配。
  3. 选择编辑 > 项目设置 > 图形
  4. 如果将渲染管线资源分配给可脚本化渲染管线设置字段,请取消分配。

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

要将活动渲染管线设置为基于 SRP 的渲染管线,请告诉 Unity 将哪个渲染管线资源用作默认活动渲染管线,以及可选地为每个质量级别使用哪些渲染管线资源。

操作方法

  1. 在您的项目文件夹中,找到要使用的渲染管线资源。
  2. 设置默认渲染管线,当没有给定质量级别的覆盖时,Unity 使用该渲染管线。如果您未设置此项,则当不适用任何覆盖时,Unity 使用内置渲染管线。
    1. 选择编辑 > 项目设置 > 图形
    2. 将渲染管线资源拖放到可脚本化渲染管线设置字段。
  3. 可选:为不同的质量级别设置覆盖渲染管线资源。
    1. 选择编辑 > 项目设置 > 质量
    2. 将渲染管线资源拖放到渲染管线字段。

如何在 C# 脚本中获取和设置活动渲染管线

在 C#脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性并以任何您喜欢的方式响应用户输入。 更多信息
请参阅 词汇表
中,您可以获取和设置活动渲染管线,并在活动渲染管线更改时接收回调。您可以在 Unity 编辑器的编辑模式或播放模式下执行此操作,或者在应用程序的运行时执行此操作。

为此,请使用以下 API

以下示例代码演示了如何使用这些 API

using UnityEngine;
using UnityEngine.Rendering;
 
public class ActiveRenderPipelineExample : MonoBehaviour
{
    // In the Inspector, assign a Render Pipeline Asset to each of these fields
    public RenderPipelineAsset defaultRenderPipelineAsset;
    public RenderPipelineAsset overrideRenderPipelineAsset;
 
    void Start()
    {
        GraphicsSettings.defaultRenderPipeline = defaultRenderPipelineAsset;
        QualitySettings.renderPipeline = overrideRenderPipelineAsset;

        DisplayCurrentRenderPipeline();
    }

    void Update()
    {
        // When the user presses the left shift key, switch the default render pipeline
        if (Input.GetKeyDown(KeyCode.LeftShift)) {
            SwitchDefaultRenderPipeline();
            DisplayCurrentRenderPipeline();
        }
        // When the user presses the right shift key, switch the override render pipeline
        else if (Input.GetKeyDown(KeyCode.RightShift)) {
            SwitchOverrideRenderPipeline();
            DisplayCurrentRenderPipeline();
        }
    }

    // Switch the default render pipeline between null,
    // and the render pipeline defined in defaultRenderPipelineAsset
    void SwitchDefaultRenderPipeline()
    {
        if (GraphicsSettings.defaultRenderPipeline == defaultRenderPipelineAsset)
        {
            GraphicsSettings.defaultRenderPipeline = null;
        }
        else
        {
            GraphicsSettings.defaultRenderPipeline = defaultRenderPipelineAsset;
        }
    }

    // Switch the override render pipeline between null,
    // and the render pipeline defined in overrideRenderPipelineAsset
    void SwitchOverrideRenderPipeline()
    {
        if (QualitySettings.renderPipeline == overrideRenderPipelineAsset)
        {
            QualitySettings.renderPipeline = null;
        }
        else
        {
           QualitySettings.renderPipeline = overrideRenderPipelineAsset;
        }
    }

    // Print the current render pipeline information to the console
    void DisplayCurrentRenderPipeline()
    {
        // GraphicsSettings.defaultRenderPipeline determines the default render pipeline
        // If it is null, the default is the Built-in Render Pipeline
        if (GraphicsSettings.defaultRenderPipeline != null)
        {
            Debug.Log("The default render pipeline is defined by " + GraphicsSettings.defaultRenderPipeline.name);
        }
        else
        {
            Debug.Log("The default render pipeline is the Built-in Render Pipeline");
        }

        // QualitySettings.renderPipeline determines the override render pipeline for the current quality level
        // If it is null, no override exists for the current quality level
        if (QualitySettings.renderPipeline != null)
        {
            Debug.Log("The override render pipeline for the current quality level is defined by " + QualitySettings.renderPipeline.name);
        }
        else
        {
            Debug.Log("No override render pipeline exists for the current quality level");
        }

        // If an override render pipeline is defined, Unity uses that
        // Otherwise, it falls back to the default value
        if (QualitySettings.renderPipeline != null)
        {
            Debug.Log("The active render pipeline is the override render pipeline");
        }
        else
        {
            Debug.Log("The active render pipeline is the default render pipeline");
        }

        // To get a reference to the Render Pipeline Asset that defines the active render pipeline,
        // without knowing if it is the default or an override, use GraphicsSettings.currentRenderPipeline
        if (GraphicsSettings.currentRenderPipeline != null)
        {
            Debug.Log("The active render pipeline is defined by " +GraphicsSettings.currentRenderPipeline.name);
        }
        else
        {
            Debug.Log("The active render pipeline is the Built-in Render Pipeline");
        }
    }
}
设置渲染管线
使用通用渲染管线