Blog

ENGINEERING NOTE

[ Rendering ] 3. Render Pass

해당 포스팅은 이상윤님께서 공유해주신 2025 TA Campus 수업 문서 링크를 바탕으로 작성했습니다.지금까지 우리는 하나의 오브젝트가 GPU를 거쳐 화면에 그려지기까지의 전체 흐름을 살펴봤다.하지만 실제 게임이나 엔진에서는 이 파이프라인을 단 한 번만 돌려서 화면을

rendering
해당 포스팅은 이상윤님께서 공유해주신 2025 TA Campus 수업 문서 링크를 바탕으로 작성했습니다.

3. Render Pass

지금까지 우리는 하나의 오브젝트가 GPU를 거쳐 화면에 그려지기까지의 전체 흐름을 살펴봤다. 하지만 실제 게임이나 엔진에서는 이 파이프라인을 단 한 번만 돌려서 화면을 완성하지 않는다.

현대 렌더링에서는 보통,

  • 그림자 먼저 그리고
  • 불투명 오브젝트 그리고
  • 반투명 오브젝트 그리고
  • 후처리(Post Process)를 여러 번 적용해서

여러 번 나눠서 렌더링한다.

이렇게 “어떤 목적을 가지고, 특정 렌더 타겟에, 특정 순서로 그리는 한 묶음”을 Render Pass라고 부른다.

Render Pass는 쉽게 말해 GPU에게 내리는 하나의 렌더링 작업 묶음이다. 각 Render Pass는 보통 다음 정보를 함께 가진다.

  • 무엇을 그릴지 (메시, 머티리얼)
  • 어디에 그릴지 (Render Target, Depth Buffer)
  • 어떤 상태로 그릴지 (Depth Test, Blend, Stencil 등)
  • 어떤 셰이더를 쓸지

즉, 그래픽 파이프라인 설정 + 드로우 호출들의 묶음이라고 생각하면 된다.

왜 Render Pass로 나누는가?

Render Pass는 목적에 따라 서로 다른 조건으로 GPU를 여러 번 사용하는 작업이다.

그림자를 그릴 때와 불투명 오브젝트를 그릴 때, 후처리를 할 때는

  • 사용하는 셰이더도 다르고
  • 필요한 버퍼도 다르고
  • Depth / Blend / Stencil 설정도 다르다.

이 모든 작업을 하나의 상태로 처리할 수 없기 때문에 렌더링을 의미 단위로 나누어 관리하게 된다.

‘기능’도 ‘패스’라고 할 수 있을까?

여기서 자주 헷갈리는 포인트가 하나 있다. “Bloom도 하나의 기능인데, 이것도 Pass라고 부를 수 있을까?”

결론부터 말하면 상황에 따라 다르다.

기능 자체는 Pass가 아니다. 하지만 그 기능을 구현하기 위해 GPU가 별도의 렌더링 과정을 수행한다면, 그 과정은 Render Pass가 된다.

DirectX에서의 Render Pass Definitions

이 정의를 그대로 풀어보면, Render Pass는 단순히 “드로우 호출의 묶음”이 아니라,

  • 어디에 그릴지(Render Target / Depth Buffer)가 고정되어 있고
  • 그 대상에 대해 수행되는 GPU 작업들이 하나의 묶음으로 관리되며
  • 그 결과를 어떻게 보존하거나 버릴지까지 명시된 단위

라고 이해할 수 있다.

그 중에서도 가장 중요한 기준은 이것이다.

GPU가 그리는 Render Target이 바뀌면, Pass가 바뀐다.

Render Target이 바뀌는 순간,

  • 출력 대상이 달라지고
  • 메모리 접근 방식이 달라지고
  • GPU 상태가 크게 변경된다.

즉, Render Target 변경은 Pass의 경계가 된다.

하지만 편의상 Pass라고 부르는 경우도 있으니 알잘딱깔센(?)하게 알아듣자.