定义此 RenderPipeline 自定义渲染的入口点方法。
此方法是可脚本化渲染管道 (SRP) 的入口点。此功能与内置渲染管道不兼容。
Unity 会自动调用此方法。在独立应用程序中,Unity 会在每帧调用此方法一次来渲染主视图,以及在每帧为每次手动调用 Camera.Render 调用一次。在 Unity 编辑器中,Unity 会在每帧为每个可见的场景视图或游戏视图调用此方法一次,如果场景相机预览可见,则在每帧调用一次,以及在每帧为每次手动调用 Camera.Render 调用一次。
如果您使用的是通用渲染管道 (URP) 或高清渲染管道 (HDRP),则可以使用 RenderPipelineManager.beginContextRendering、RenderPipelineManager.beginCameraRendering、RenderPipelineManager.endCameraRendering 和 RenderPipelineManager.endContextRendering 委托在该方法期间的定义点调用自定义代码。
如果您正在编写自定义 SRP,则可以直接在该方法体内添加代码,或者使用 RenderPipeline.BeginContextRendering、RenderPipeline.BeginCameraRendering、RenderPipeline.EndCameraRendering 和 RenderPipeline.EndContextRendering 自己调用委托。
以下示例代码展示了如何在自定义 SRP 中实现此方法
using UnityEngine; using UnityEngine.Rendering; using System.Collections.Generic;
public class ExampleRenderPipelineInstance : RenderPipeline { public ExampleRenderPipelineInstance() { }
protected override void Render(ScriptableRenderContext context, List<Camera> cameras) { // This is where you can write custom rendering code. Customize this method to customize your SRP. // 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 ScriptableRenderContext to tell the graphics API to perform the scheduled commands context.Submit(); }
// Older version of the Render function that can generate garbage, needed for backwards compatibility protected override void Render(ScriptableRenderContext context, Camera[] cameras) { } }
其他资源: Unity 手册: 可脚本化渲染管道、RenderPipelineManager.beginContextRendering、RenderPipelineManager.beginCameraRendering、RenderPipelineManager.endContextRendering、RenderPipelineManager.endFrameRendering
定义此 RenderPipeline 自定义渲染的入口点方法。
此签名功能与使用相机列表的版本完全相同,只是此版本可能会由于数组调整大小而导致堆分配。
如果您遇到堆分配,请使用使用 List 的版本。
using UnityEngine; using UnityEngine.Rendering;
public class ExampleRenderPipeline : RenderPipeline { public ExampleRenderPipeline() { }
protected override void Render(ScriptableRenderContext context, Camera[] cameras) { // This is where you can write custom rendering code. Customize this method to customize your SRP. // 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 ScriptableRenderContext to tell the graphics API to perform the scheduled commands context.Submit(); } }