Version: 6000.3
语言: 中文
从内置渲染管线升级到URP
从内置渲染管线将着色器升级到URP

使用渲染管线转换器转换资产

渲染管线(Render Pipeline) 获取场景内容并将其显示在屏幕上的一系列作。Unity 允许您从预构建的渲染管道中进行选择,或编写自己的渲染管道。更多信息
请参阅术语表
转炉
将为内置渲染管线项目制作的资源转换为与 URP 兼容的资源。

注意:转换过程会对项目进行不可逆的更改。在转换之前备份您的项目。

转换类型和转换器

渲染管线转换器允许你选择以下转换类型之一:

  • 内置渲染管线到URP

  • 内置渲染管线2D到URP 2D

  • 升级2D URP资产

当您选择转换类型时,该工具会向您显示可用的转换器。

以下部分介绍了每种转换类型的可用转换器。

内置渲染管线到URP

此转换类型将项目元素从内置渲染管线转换为URP。它启用以下选项:

  • 渲染设置(Rendering Settings) :创建URP资源和通用渲染器资源,然后将内置渲染管线项目中的设置转换为URP资源中的等效属性。

  • 材质升级:将预构建材质转换为 URP 材质。此转换器不支持自定义材质着色器在 GPU 上运行的程序。更多信息
    请参阅术语表
    .支持更多内置着色器,或覆盖当前着色器。参考该部分:扩展材料升级器

  • 只读材质转换器:转换不在项目的“资源”文件夹中的预构建只读材质,例如 Default-DiffuseDefault-Line。此转换器审核项目并创建临时.index文件,这可能需要大量时间。

  • 动画剪辑(Animation Clip可用于动画角色或简单动画的动画数据。它是一个简单的“单位”运动片段,例如(一个特定实例)“空闲”、“步行”或“运行”。更多信息
    请参阅术语表
    转炉
    :在材质升级转换器完成后转换动画剪辑。仅当项目包含影响材质属性的动画或后期处理堆栈v2属性时,此转换器才可用。

  • 后处理图像出现在屏幕上之前应用滤镜和效果来改善产品视觉效果的过程。你可以使用后期处理效果来模拟物理摄像机和胶片属性,例如泛光和景深。更多信息 后处理, 后处理, 后处理
    术语表中查看
    堆栈 v2 转换器
    :将后处理堆栈 v2 卷、配置文件和层转换为 URP 卷、配置文件和相机在场景中创建特定视点图像的组件。输出要么绘制到屏幕上,要么作为纹理捕获。更多信息
    请参阅术语表
    .此转换器审核项目并创建临时.index文件,这可能需要大量时间。仅当安装了后处理堆栈 v2 包时,此转换器才可用。

内置渲染管线2D到URP 2D

此转换类型将项目的元素从内置渲染管线2D转换为URP 2D。

可用转换器:

  • 材质和材质参考升级

    此转换器将所有材质和材质引用从内置渲染管线2D转换为URP 2D。

升级2D URP资产

此转换类型将 2D 项目的资产从早期的 URP 版本升级到当前的 URP 版本。

可用转换器:

  • 参数化到自由形式的光源升级

    此转换器将所有参数化光源转换为自由曲面光源。

如何使用渲染管线转换器

要转换项目资产,请执行以下作:

  1. 选择 窗口>渲染(Render Rendering) > 渲染管线转换器(Render Pipeline Converter)。Unity 将打开 Render Pipeline Converter 窗口。

    渲染管线转换器对话框
    渲染管线转换器对话框
  2. 选择转化类型。

    转换类型
    转换类型
  3. 根据转换类型,对话框显示可用的转换器。选中或清除转换器名称旁边的复选框以启用或禁用转换器。

    选择转换器
    选择转换器

    有关可用转换器的列表,请参阅转换器部分。

  4. 单击初始化转换器。渲染管线转换器(Render Pipeline Converter) 会预处理项目中的资产,并显示要转换的元素列表。选中或清除资产旁边的复选框,以将其包含在转换过程中或将其排除在转换过程中。

    初始化转换器
    初始化转换器

    下图显示了初始化的转换器。

    初始化转换器
    初始化转换器

    单击转换器以检查转换器即将转换的项目列表。

    转换器详细视图
    转换器详细视图

    黄色图标:元素旁边的黄色图标表示可能需要用户作才能运行转换。将鼠标指针悬停在图标上以检查问题的描述。

  5. 单击“转换资产”以开始转换过程。

    注意:转换过程会对项目进行不可逆的更改。在转换之前备份您的项目。

    转换过程完成后,窗口会显示每个转换器的状态。

    转换完成
    转换完成

    绿色复选标记:转换没有问题。

    黄色图标:转换完成时显示警告,可能需要用户作。

    红色图标:转换失败。

  6. 单击转换器以检查该转换器中已处理的项目列表。

    转换完成。转换器的详细视图
    转换完成。转换器的详细视图

    查看转换后的项目后,关闭 渲染管线转换器(Render Pipeline Converter) 窗口。

仅转换选定的材质

要仅转换选定的材质,请选择显示洋红色着色器错误的材质,然后选择“编辑>渲染>材质”>“将所选材质转换为 URP”。

使用 API 或 CLI 运行转换

渲染管线转换器使用RunInBatchMode方法实现Converters类,使你能够从命令行运行转换过程。

例如,以下脚本初始化并执行转换器 材质升级(Material Upgrade) 和只读材质转换器(Read-only Material Converter)。

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.Rendering.Universal;
using UnityEngine;

public class MyUpgradeScript : MonoBehaviour
{
    public static void ConvertBuiltinToURPMaterials()
    {
        Converters.RunInBatchMode(
            ConverterContainerId.BuiltInToURP
            , new List<ConverterId> {
                ConverterId.Material,
                ConverterId.ReadonlyMaterial
            }
            , ConverterFilter.Inclusive
        );
        EditorApplication.Exit(0);
    }
}

要从命令行运行示例转换,请使用以下命令:

"<path to Unity application> -projectPath <project path> -batchmode -executeMethod MyUpgradeScript.ConvertBuiltinToURPMaterials

另请检查:Unity 编辑器命令行参数

如何向项目添加自定义材质升级器

Unity 的 Material Upgrader 框架允许您定义着色器的升级路径,例如,自动将旧着色器迁移到 URP 或自定义替代方案。

为此,您需要定义: - 自定义MaterialUpgrader将旧着色器映射到新着色器。 -一IMaterialUpgradersProvider将升级程序公开给系统。

// This class defines the upgrade rule from an old shader to a new shader
public class MaterialUpgraderExample : MaterialUpgrader
{
    // Priority determines order — higher values override lower-priority upgraders
    public int priority => 1000;
    public MaterialUpgraderExample(string oldShaderName, string newShaderName)
    {
        if (oldShaderName == null)
            throw new ArgumentNullException(nameof(oldShaderName));

        // Maps the old shader to the new shader with optional property remapping (null here)
        RenameShader(oldShaderName, newShaderName, null);
    }
}

// This provider makes the upgrader discoverable by the upgrader system.
// It declares support for the Universal Render Pipeline and exposes the custom upgrade rule.
[SupportedOnRenderPipeline(typeof(UniversalRenderPipeline))]
private class ExampleMaterialProvider : IMaterialUpgradersProvider
{

    public IEnumerable<MaterialUpgrader> GetUpgraders()
    {
        // Replace "SomePathToShader" and "MappingShaderPath" with actual shader names/paths
        yield return new MaterialUpgraderExample("SomePathToShader", "MappingShaderPath");

        // Add as many upgraders you need
    }
}
从内置渲染管线升级到URP
从内置渲染管线将着色器升级到URP