book/10-post-processing-and-fullscreen.md

10. 포스트프로세싱과 Fullscreen Pass

URP 포스트프로세싱(Volume)과 풀스크린 패스 패턴을 RenderGraph 기준으로 설계/구현하는 방법을 정리한다

10. 포스트프로세싱과 Fullscreen Pass 패턴(URP)

이 챕터는 URP에서 “화면 전체를 대상으로 하는 렌더 패스”를 구현하는 대표 패턴을 다룹니다.

10.1 URP 포스트프로세싱 구조(볼륨)

URP의 포스트프로세싱은 보통 Volume 시스템을 통해 파라미터를 제어합니다.

  • 씬 내 Volume 프로파일에 효과 파라미터가 저장
  • 카메라 위치/우선순위/블렌딩으로 최종 파라미터 결정
  • URP 파이프라인이 후반부에 이를 반영해 화면에 적용

커스텀 효과는:

  • 커스텀 Volume Component + RendererFeature/Pass
  • 또는 “특정 타이밍의 Fullscreen Pass”

로 구현하는 경우가 많습니다.

10.1.1 공부 방향(중요)

포스트 프로세싱을 “완벽하게” 이해하려면, 다음 3층을 분리해서 봐야 합니다.

  1. 파라미터 층(Volume): 값이 어디서 오고, 어떻게 블렌딩되는가
  2. 패스 층(Renderer Feature/Pass): 언제 실행되고, 어떤 텍스처를 읽고/쓰는가
  3. 셰이더 층(HLSL): 입력 텍스처를 어떻게 샘플링하고 출력하는가

이 책은 2→3을 중심으로 다루되, 1을 최소한으로 연결합니다.

10.2 Fullscreen 패스의 핵심 3요소

  1. 입력(보통 카메라 컬러 텍스처)
  2. 출력(카메라 컬러 또는 임시 텍스처)
  3. 셰이더(머티리얼) 또는 컴퓨트

RenderGraph 환경에서는 임시 텍스처를 생성하고, 결과를 activeColor로 교체하는 패턴이 자주 쓰입니다. (예제는 04. RenderGraph 참고)

10.3 가장 쉬운 구현 1: Full Screen Pass Renderer Feature(기성 기능)

URP는 “풀스크린 머티리얼을 특정 Injection Point에 적용”하는 Full Screen Pass Renderer Feature를 제공합니다.

장점:

  • 셰이더/머티리얼만 준비하면 기능을 바로 실험 가능
  • Requirements(Depth/Normal/Color/Motion 등)를 UI로 지정 가능
  • RenderGraph Viewer에서 패스 위치/의존성을 확인하기 쉬움

학습 포인트:

  • Injection Point를 바꿔가며 “Opaque 이후/Transparent 이후/포스트 전후” 차이를 체감
  • Requirements를 바꿔가며 “Depth/Normals 텍스처 생성 조건”을 체감

공식 문서:

10.4 가장 쉬운 구현 2: Volume 지원 커스텀 포스트(템플릿)

URP는 Volume 파라미터까지 포함한 커스텀 포스트 템플릿을 제공합니다.

  • 메뉴: Assets > Create > Rendering > URP Post-processing Effect (Renderer Feature with Volume)

템플릿이 좋은 이유:

  • Volume 파라미터 블렌딩 → 패스 실행 → 셰이더 상수 전달 흐름이 한 번에 보임
  • RenderGraph 경로/Compatibility Mode 경로를 비교하기 좋음

공식 문서:

10.5 RenderGraph 기반 풀스크린 패스 설계 패턴

RenderGraph에서 풀스크린 패스는 대체로 “Ping-Pong” 구조를 갖습니다.

  1. 카메라 컬러(handle)를 source로 잡고
  2. 임시 텍스처(handle)를 destination으로 만든 뒤
  3. 풀스크린 삼각형/Blit으로 destination에 씀
  4. 후속 패스가 destination을 “현재 카메라 컬러”로 보도록 갱신

핵심 주의사항:

  • source와 destination을 같은 텍스처로 쓰지 말 것(정의되지 않은 동작)
  • 불필요한 Blit/Copy를 줄일 것(대역폭 비용)

관련 공식 문서:

10.3 흔한 사용 사례

  • 아웃라인/엣지 디텍션(Depth+Normals 기반)
  • 블룸/가우시안 블러(다운샘플 체인)
  • LUT 컬러 그레이딩
  • 화면 디더링/필름 그레인

추가 읽을거리