本页面包含有关设置 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 的渲染管线,您必须告诉 Unity 要使用哪个渲染管线资源。渲染管线资源是一种资源,其中包含有关要使用的渲染管线以及如何配置该渲染管线的数据。
您可以拥有多个渲染管线资源,让 Unity 以不同配置使用同一渲染管线;例如,您可能有一个适合高端硬件的设置,一个适合低端硬件的设置。
有关渲染管线资源的一般介绍,请参阅可编程渲染管线简介。有关 URP 中渲染管线资源的信息,请参阅通用渲染管线资源。有关 HDRP 中渲染管线资源的信息,请参阅高清渲染管线资源。
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#代码设置渲染管线资源。您可以在 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);
}
}