Version: 2020.1
可编程渲染管线简介
可编程渲染管线 SRP Batcher

在可编程渲染管线中调度和执行渲染命令

本页介绍如何通过使用 CommandBuffers 或通过对 ScriptableRenderContext 进行直接 API 调用,在可编程渲染管线 (SRP) 中调度和执行渲染命令。本页面上的信息适用于通用渲染管线 (URP)、高清渲染管线 (HDRP) 和基于 SRP 的自定义渲染管线。

在 SRP 中,应使用 C# 脚本来配置和调度渲染命令。然后,需要告诉 Unity 的低级图形架构执行这些命令,此过程会将指令发送到图形 API。

主要做法是对 ScriptableRenderContext 进行 API 调用,不过也可以立即执行 CommandBuffers。

使用 ScriptableRenderContext API

在 SRP 中,ScriptableRenderContext 类用作 C# 渲染管线代码与 Unity 的低级图形代码之间的接口。SRP 使用延迟执行的方式来实现渲染;您需要使用 ScriptableRenderContext 来构建渲染命令列表,然后告诉 Unity 执行这些命令。Unity 的低级图形架构随后将指令发送到图形 API。

要调度渲染命令,您可以:

为了告诉 Unity 执行您所调度的命令,请调用 ScriptableRenderContext.Submit。请注意,使用的是 CommandBuffer 还是通过调用 API 来调度命令,这并不重要;Unity 以相同方式在 ScriptableRenderContext 中调度所有渲染命令,并且在调用 Submit() 之前不会执行任何这些命令。

以下示例代码演示了如何使用命令缓冲区来调度和执行命令以清除当前渲染目标。

using UnityEngine;
using UnityEngine.Rendering;

public class ExampleRenderPipelineInstance : RenderPipeline
{
        public ExampleRenderPipelineInstance() {
        }

    protected void Render(ScriptableRenderContext context, Camera[] cameras) {
        // 创建并调度命令以清除当前渲染目标
        var cmd = new CommandBuffer();
        cmd.ClearRenderTarget(true, true, Color.black);
        context.ExecuteCommandBuffer(cmd);
        cmd.Release();

         // 指示可编程渲染上下文告诉图形 API 执行调度的命令
        context.Submit();
    }
}

立即执行 CommandBuffers

可通过调用 Graphics.ExecuteCommandBuffer 来立即执行 CommandBuffers,而不使用 ScriptableRenderContext。对该 API 的调用发生在渲染管线之外。

其他信息

有关可以使用 CommandBuffers 来调度的命令的更多信息,请参阅 CommandBuffers API 文档

可编程渲染管线简介
可编程渲染管线 SRP Batcher
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961