版本: Unity 6 (6000.0)
语言英语
  • C#

RenderPipeline.Render

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们确实会阅读用户提出的每项更改建议,并在适用情况下进行更新。

关闭

提交失败

由于某种原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

protected void Render(Rendering.ScriptableRenderContext context, List<Camera> cameras);

描述

定义此 RenderPipeline 自定义渲染的入口点方法。

此方法是可脚本化渲染管道 (SRP) 的入口点。此功能与内置渲染管道不兼容。

Unity 会自动调用此方法。在独立应用程序中,Unity 会在每帧调用此方法一次来渲染主视图,以及在每帧为每次手动调用 Camera.Render 调用一次。在 Unity 编辑器中,Unity 会在每帧为每个可见的场景视图或游戏视图调用此方法一次,如果场景相机预览可见,则在每帧调用一次,以及在每帧为每次手动调用 Camera.Render 调用一次。

如果您使用的是通用渲染管道 (URP) 或高清渲染管道 (HDRP),则可以使用 RenderPipelineManager.beginContextRenderingRenderPipelineManager.beginCameraRenderingRenderPipelineManager.endCameraRenderingRenderPipelineManager.endContextRendering 委托在该方法期间的定义点调用自定义代码。

如果您正在编写自定义 SRP,则可以直接在该方法体内添加代码,或者使用 RenderPipeline.BeginContextRenderingRenderPipeline.BeginCameraRenderingRenderPipeline.EndCameraRenderingRenderPipeline.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) { } }

声明

protected void Render(Rendering.ScriptableRenderContext context, Camera[] cameras);

描述

定义此 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(); } }