Version: 2023.1
언어: 한국어
스크립터블 렌더 파이프라인 소개
커스텀 렌더 파이프라인 생성

스크립터블 렌더 파이프라인에서 렌더링 커맨드 예약 및 실행

이 페이지는 커맨드 버퍼를 사용하거나 ScriptableRenderContext에 대한 직접 API 호출을 통해 스크립터블 렌더 파이프라인(SRP)에서 렌더링 커맨드를 예약하고 실행하는 방법을 설명합니다. 이 페이지의 정보는 유니버설 렌더 파이프라인(URP), 고해상도 렌더 파이프라인(HDRP), 그리고 SRP에 기반한 커스텀 렌더 파이프라인에 적용됩니다.

SRP에서 C# 스크립트를 사용하여 렌더링 커맨드를 설정하고 예약할 수 있습니다. 그런 다음 Unity의 저수준 그래픽스 아키텍처에 이를 실행하도록 지시하여 그래픽스 API에 명령어를 전송할 수 있습니다.

이를 수행하는 주요 방법은 ScriptableRenderContext에 대한 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 문서를 참조하십시오.

스크립터블 렌더 파이프라인 소개
커스텀 렌더 파이프라인 생성