此页面解释了如何通过使用CommandBuffers或直接通过向ScriptableRenderContext调用API来调度和执行脚本可渲染管线(SRP)中的渲染命令。此页面的信息适用于通用渲染管线(URP)、高清晰度渲染管线(HDRP)和基于SRP的自定义渲染管线。
在SRP中,您使用C# 脚本一段代码,允许您创建自己的组件、触发游戏事件、在一段时间内修改组件属性以及以任何您想要的方式对用户输入做出反应。更多信息
在术语表中查看来配置和调度渲染命令。然后,您告诉Unity的低级图形架构执行这些命令,这将发送指令到图形API。
执行此操作的主要方法是通过对ScriptableRenderContext进行API调用,但您也可以立即执行CommandBuffers。
在SRP中,ScriptableRenderContext类充当C#渲染管线代码和Unity的低级图形代码之间的接口。SRP渲染使用延迟执行;您使用ScriptableRenderContext来构建渲染命令的列表,然后告诉Unity执行它们。Unity的低级图形架构然后将指令发送到图形API。
要调度渲染命令,您可以通过以下方式之一进行
要告诉Unity执行您已安排的命令,请调用ScriptableRenderContext.Submit。请注意,您是否使用CommandBuffer安排命令,或者是否通过调用API安排命令无关紧要;Unity将所有渲染命令都在ScriptableRenderContext中以相同的方式调度,并且在您调用代码Submit()
之前不会执行任何命令。
以下示例代码展示了如何使用CommandBuffer调度并执行一个清除当前渲染目标的命令。
using UnityEngine;
using UnityEngine.Rendering;
public class ExampleRenderPipeline : RenderPipeline
{
public ExampleRenderPipeline() {
}
protected override void Render(ScriptableRenderContext context, Camera[] cameras) {
// Create and schedule a command to clear the current render target
var cmd = new CommandBuffer();
cmd.ClearRenderTarget(true, true, Color.red);
context.ExecuteCommandBuffer(cmd);
cmd.Release();
// Tell the Scriptable Render Context to tell the graphics API to perform the scheduled commands
context.Submit();
}
}
您可以通过调用Graphics.ExecuteCommandBuffer在不使用ScriptableRenderContext的情况下立即执行CommandBuffers。对这些API的调用发生在渲染管线之外。
有关您可以使用CommandBuffers安排的命令的更多信息,请参阅CommandBuffers API文档。