포스트 프로세스 머티리얼
SceneTexture 노드, 풀스크린 이펙트, Post Process Volume과의 연동.
Post Process Material 기초
화면 전체에 적용되는 셰이더
Post Process Material은 최종 렌더링된 화면에 전체 효과를 적용합니다. Material Domain을 "Post Process"로 설정하면 Emissive Color 출력만 사용 가능하며, 이것이 최종 화면 색상이 됩니다.
Material Properties:
Material Domain: Post Process
Blend Mode: (자동)
Blendable Location: Before Tonemapping / After Tonemapping
기본 패스스루:
SceneTexture (PostProcessInput0)
→ Emissive Color
// 이것만으로 원본 화면이 그대로 출력됩니다
// 여기에 색 보정, 왜곡, 오버레이 등을 추가
Before Tonemapping: HDR 색공간에서 처리. 물리적 효과(블룸 연동 등)에 적합. After Tonemapping: LDR(0~1) 색공간에서 처리. 색 보정, 오버레이 등에 적합. 대부분의 커스텀 효과는 Before Tonemapping을 사용합니다.
SceneTexture 노드
렌더링 버퍼에 접근하기
| SceneTexture ID | 데이터 | 활용 |
|---|---|---|
| PostProcessInput0 | 현재까지 렌더된 화면 | 색 보정, 왜곡의 기본 입력 |
| SceneDepth | 깊이 버퍼 | 깊이 기반 페이드, 포그 |
| WorldNormal | 월드 노말 | 에지 감지, 외곽선 |
| BaseColor | G-Buffer Base Color | 특정 색상 영역 선택 |
| Metallic | G-Buffer Metallic | 금속 부분만 처리 |
| CustomStencil | 커스텀 스텐실 값 | 오브젝트별 선택적 효과 |
실전 포스트 프로세스 효과
자주 사용되는 화면 효과 구현
그레이스케일 (흑백)
// 그레이스케일 변환
float3 scene = SceneTextureLookup(UV, 14, false).rgb;
float gray = dot(scene, float3(0.299, 0.587, 0.114));
return lerp(scene, gray, Intensity);
에지 감지 (외곽선)
// 깊이/노말 기반 에지 감지
// 입력: 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;
Post Process Volume 연동
머티리얼을 레벨에 적용하기
// 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 비용을 크게 높입니다. 특히 모바일에서는 포스트 프로세스 수를 최소화하세요.
핵심 요약
- Post Process Material은 Material Domain을 Post Process로 설정하고 Emissive Color만 출력합니다.
- SceneTexture 노드로 화면(PostProcessInput0), 깊이(SceneDepth), 노말(WorldNormal) 등에 접근합니다.
- 그레이스케일, 에지 감지, 비네팅, 색 보정 등의 풀스크린 이펙트를 구현합니다.
- Post Process Volume에 머티리얼을 추가하고 Weight로 강도를 제어합니다.
- 매 프레임 전체 화면 처리이므로 성능 비용에 항상 주의합니다.
도전 과제
배운 내용을 직접 실습해보세요
Post Process Material Domain으로 화면 전체의 채도(Desaturation), 대비(Contrast), 색조(Color Tint)를 조절하는 머티리얼을 만드세요. SceneTexture:PostProcessInput0을 입력으로 사용하세요.
SceneTexture의 Depth와 Normal 정보를 활용하여 Sobel Edge Detection으로 오브젝트 외곽선을 그리는 포스트 프로세스를 구현하세요. 선의 두께와 색상을 파라미터로 제어하세요.
Custom Stencil Value를 활용하여 특정 오브젝트에만 글로우 효과나 X-ray 효과를 적용하는 포스트 프로세스 머티리얼을 만드세요. Stencil 값으로 여러 종류의 효과를 구분하세요.