RenderPipeline.Render
Declaration
protected void Render(Rendering.ScriptableRenderContext context, List<Camera> cameras);Параметры
| Параметр | Описание |
|---|---|
| контекст | Контекст, используемый для отображения камер. |
| камеры | Список камер для рендеринга. |
Описание
Метод точки входа, который определяет пользовательское отображение для этого RenderPipeline.
Этот метод является точкой входа в Scriptable Render Pipeline (SRP). Эта функциональность не совместима с Built-in Render Pipeline.
Unity вызывают этот метод автоматически. В автономном приложении Unity вызывает этот метод один раз за кадр для отображения основного представления и один раз за кадр для каждого ручного вызова Camera.Render. В Unity Editor Unity вызывает этот метод один раз за кадр для каждого видимого представления Scene или Game, один раз за кадр, если видим предварительный просмотр камеры Scene, и один раз за кадр для каждого ручного вызова Camera.Render.
Если вы используете Universal Render Pipeline (URP) или High Definition Render Pipeline (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 Руководство: Scriptable Render Pipeline, RenderPipelineManager.beginContextRendering, RenderPipelineManager.beginCameraRendering, RenderPipelineManager.endContextRendering, RenderPipelineManager.endFrameRendering.
Declaration
Obsolete protected void Render(Rendering.ScriptableRenderContext context, Camera[] cameras);Описание
Метод точки входа, который определяет пользовательское отображение для этого RenderPipeline.
Функциональность этой подписи точно такая же, как и для версии, использующей список камер, за исключением того, что эта версия может вызвать выделение кучи из-за изменения размера массива.
Если вы испытываете выделение кучи, используйте вместо этого версию, использующую список.
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(); } }