10. 포스트프로세싱과 Fullscreen Pass 패턴(URP)
이 챕터는 URP에서 “화면 전체를 대상으로 하는 렌더 패스”를 구현하는 대표 패턴을 다룹니다.
10.1 URP 포스트프로세싱 구조(볼륨)
URP의 포스트프로세싱은 보통 Volume 시스템을 통해 파라미터를 제어합니다.
- 씬 내 Volume 프로파일에 효과 파라미터가 저장
- 카메라 위치/우선순위/블렌딩으로 최종 파라미터 결정
- URP 파이프라인이 후반부에 이를 반영해 화면에 적용
커스텀 효과는:
- 커스텀 Volume Component + RendererFeature/Pass
- 또는 “특정 타이밍의 Fullscreen Pass”
로 구현하는 경우가 많습니다.
10.1.1 공부 방향(중요)
포스트 프로세싱을 “완벽하게” 이해하려면, 다음 3층을 분리해서 봐야 합니다.
- 파라미터 층(Volume): 값이 어디서 오고, 어떻게 블렌딩되는가
- 패스 층(Renderer Feature/Pass): 언제 실행되고, 어떤 텍스처를 읽고/쓰는가
- 셰이더 층(HLSL): 입력 텍스처를 어떻게 샘플링하고 출력하는가
이 책은 2→3을 중심으로 다루되, 1을 최소한으로 연결합니다.
10.2 Fullscreen 패스의 핵심 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 텍스처 생성 조건”을 체감
공식 문서:
- Full Screen Pass Renderer Feature: https://docs.unity3d.com/Manual/urp/renderer-features/renderer-feature-full-screen-pass.html
10.4 가장 쉬운 구현 2: Volume 지원 커스텀 포스트(템플릿)
URP는 Volume 파라미터까지 포함한 커스텀 포스트 템플릿을 제공합니다.
- 메뉴: Assets > Create > Rendering > URP Post-processing Effect (Renderer Feature with Volume)
템플릿이 좋은 이유:
- Volume 파라미터 블렌딩 → 패스 실행 → 셰이더 상수 전달 흐름이 한 번에 보임
- RenderGraph 경로/Compatibility Mode 경로를 비교하기 좋음
공식 문서:
- 커스텀 포스트(Volume 지원): https://docs.unity3d.com/Manual/urp/post-processing/custom-post-processing-with-volume.html
10.5 RenderGraph 기반 풀스크린 패스 설계 패턴
RenderGraph에서 풀스크린 패스는 대체로 “Ping-Pong” 구조를 갖습니다.
- 카메라 컬러(handle)를 source로 잡고
- 임시 텍스처(handle)를 destination으로 만든 뒤
- 풀스크린 삼각형/Blit으로 destination에 씀
- 후속 패스가 destination을 “현재 카메라 컬러”로 보도록 갱신
핵심 주의사항:
- source와 destination을 같은 텍스처로 쓰지 말 것(정의되지 않은 동작)
- 불필요한 Blit/Copy를 줄일 것(대역폭 비용)
관련 공식 문서:
- RenderGraph 패스 작성: https://docs.unity3d.com/Manual/urp/render-graph-write-render-pass.html
- RenderGraph에서 Blit: https://docs.unity3d.com/Manual/urp/render-graph-blit.html
- Blit 최적화: https://docs.unity3d.com/Manual/urp/blit-best-practices.html
10.3 흔한 사용 사례
- 아웃라인/엣지 디텍션(Depth+Normals 기반)
- 블룸/가우시안 블러(다운샘플 체인)
- LUT 컬러 그레이딩
- 화면 디더링/필름 그레인
추가 읽을거리
- URP RenderGraph 패스 작성: https://docs.unity3d.com/Manual/urp/render-graph-write-render-pass.html