PART 06 · 강의 3/3

포스트 프로세스 머티리얼

SceneTexture 노드, 풀스크린 이펙트, Post Process Volume과의 연동.

01

Post Process Material 기초

화면 전체에 적용되는 셰이더

Post Process Material은 최종 렌더링된 화면에 전체 효과를 적용합니다. Material Domain을 "Post Process"로 설정하면 Emissive Color 출력만 사용 가능하며, 이것이 최종 화면 색상이 됩니다.

Post Process Material Setup Material Properties: Material Domain: Post Process Blend Mode: (자동) Blendable Location: Before Tonemapping / After Tonemapping 기본 패스스루: SceneTexture (PostProcessInput0) → Emissive Color // 이것만으로 원본 화면이 그대로 출력됩니다 // 여기에 색 보정, 왜곡, 오버레이 등을 추가
Blendable Location

Before Tonemapping: HDR 색공간에서 처리. 물리적 효과(블룸 연동 등)에 적합. After Tonemapping: LDR(0~1) 색공간에서 처리. 색 보정, 오버레이 등에 적합. 대부분의 커스텀 효과는 Before Tonemapping을 사용합니다.

02

SceneTexture 노드

렌더링 버퍼에 접근하기

SceneTexture ID데이터활용
PostProcessInput0현재까지 렌더된 화면색 보정, 왜곡의 기본 입력
SceneDepth깊이 버퍼깊이 기반 페이드, 포그
WorldNormal월드 노말에지 감지, 외곽선
BaseColorG-Buffer Base Color특정 색상 영역 선택
MetallicG-Buffer Metallic금속 부분만 처리
CustomStencil커스텀 스텐실 값오브젝트별 선택적 효과
03

실전 포스트 프로세스 효과

자주 사용되는 화면 효과 구현

그레이스케일 (흑백)

HLSL // 그레이스케일 변환 float3 scene = SceneTextureLookup(UV, 14, false).rgb; float gray = dot(scene, float3(0.299, 0.587, 0.114)); return lerp(scene, gray, Intensity);

에지 감지 (외곽선)

Edge Detection // 깊이/노말 기반 에지 감지 // 입력: UV, Thickness, DepthThreshold, NormalThreshold float2 texelSize = View.ViewSizeAndInvSize.zw; float d = SceneTextureLookup(UV, 1, false).r; float dL = SceneTextureLookup(UV + float2(-texelSize.x, 0) * Thickness, 1, false).r; float dR = SceneTextureLookup(UV + float2(texelSize.x, 0) * Thickness, 1, false).r; float dT = SceneTextureLookup(UV + float2(0, -texelSize.y) * Thickness, 1, false).r; float dB = SceneTextureLookup(UV + float2(0, texelSize.y) * Thickness, 1, false).r; float edge = abs(d - dL) + abs(d - dR) + abs(d - dT) + abs(d - dB); edge = step(DepthThreshold, edge); return edge;
04

Post Process Volume 연동

머티리얼을 레벨에 적용하기

Volume Setup // Post Process Volume에 머티리얼 연결 1. Post Process Volume 선택 (또는 생성) 2. Details → Rendering Features → Post Process Materials → Array 추가 → Asset Reference: PP_MyEffect // 블루프린트에서 동적 추가: PostProcessVolume→Settings. AddBlendable(PP_Material, Weight); // Weight = 0~1: 효과의 강도 // Infinite Extent: 월드 전체에 적용 // Unbound: Volume 외부에서도 적용
성능 고려

포스트 프로세스 머티리얼은 매 프레임 전체 화면에 적용됩니다. 복잡한 셰이더나 다수의 텍스처 룩업은 GPU 비용을 크게 높입니다. 특히 모바일에서는 포스트 프로세스 수를 최소화하세요.

SUMMARY

핵심 요약

  • Post Process Material은 Material Domain을 Post Process로 설정하고 Emissive Color만 출력합니다.
  • SceneTexture 노드로 화면(PostProcessInput0), 깊이(SceneDepth), 노말(WorldNormal) 등에 접근합니다.
  • 그레이스케일, 에지 감지, 비네팅, 색 보정 등의 풀스크린 이펙트를 구현합니다.
  • Post Process Volume에 머티리얼을 추가하고 Weight로 강도를 제어합니다.
  • 매 프레임 전체 화면 처리이므로 성능 비용에 항상 주의합니다.
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: 화면 색상 보정

Post Process Material Domain으로 화면 전체의 채도(Desaturation), 대비(Contrast), 색조(Color Tint)를 조절하는 머티리얼을 만드세요. SceneTexture:PostProcessInput0을 입력으로 사용하세요.

실습 2: 화면 공간 아웃라인

SceneTexture의 Depth와 Normal 정보를 활용하여 Sobel Edge Detection으로 오브젝트 외곽선을 그리는 포스트 프로세스를 구현하세요. 선의 두께와 색상을 파라미터로 제어하세요.

심화 과제: 커스텀 스텐실 기반 효과

Custom Stencil Value를 활용하여 특정 오브젝트에만 글로우 효과나 X-ray 효과를 적용하는 포스트 프로세스 머티리얼을 만드세요. Stencil 값으로 여러 종류의 효과를 구분하세요.