이 페이지는 커맨드 버퍼를 사용하거나 ScriptableRenderContext에 대한 직접 API 호출을 통해 스크립터블 렌더 파이프라인(SRP)에서 렌더링 커맨드를 예약하고 실행하는 방법을 설명합니다. 이 페이지의 정보는 유니버설 렌더 파이프라인(URP), 고해상도 렌더 파이프라인(HDRP), 그리고 SRP에 기반한 커스텀 렌더 파이프라인에 적용됩니다.
SRP에서 C# 스크립트를 사용하여 렌더링 커맨드를 설정하고 예약할 수 있습니다. 그런 다음 Unity의 저수준 그래픽스 아키텍처에 이를 실행하도록 지시하여 그래픽스 API에 명령어를 전송할 수 있습니다.
이를 수행하는 주요 방법은 ScriptableRenderContext에 대한 API 호출이지만, 커맨드 버퍼를 직접 실행할 수도 있습니다.
SRP에서 ScriptableRenderContext 클래스는 C# 렌더 파이프라인 코드와 Unity의 저수준 그래픽스 코드 간의 인터페이스 역할을 합니다. SRP 렌더링은 지연된 실행을 사용하여 작동합니다. 즉 ScriptableRenderContext를 사용하여 렌더링 커맨드 리스트를 빌드한 후 Unity에 실행을 지시합니다. 그러면 Unity의 저수준 그래픽스 아키텍처가 그래픽스 API에 명령어를 전송합니다.
렌더링 커맨드를 예약하기 위해 다음을 수행할 수 있습니다.
예약한 커맨드를 실행하도록 Unity에 지시하려면 ScriptableRenderContext.Submit를 호출하십시오. 단, 커맨드 버퍼를 사용하여 커맨드를 예약했는지, 또는 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를 사용하지 않고도 커맨드 버퍼를 즉시 실행할 수 있습니다. 이 API에 대한 호출은 렌더 파이프라인 밖에서 발생합니다.
커맨드 버퍼를 사용하여 예약할 수 있는 커맨드에 대한 자세한 내용은 커맨드 버퍼 API 문서를 참조하십시오.