이번 장은 기초 편의 마지막 단계로 후처리(Post-processing) 기술에 대해 다룹니다. 후처리란 장면의 모든 물체가 렌더링되어 프레임 버퍼에 저장된 후, 이를 화면에 출력하기 직전에 픽셀 데이터를 수정하는 기술을 말합니다.
구체적인 구현 원리는 카메라의 근평면(Near Clip Plane)에 화면을 가득 채우는 사각형 면편(Quad)을 배치하고, 여기에 전용 셰이더를 적용하여 프레임 버퍼 이미지를 텍스처로 받아 계산하는 방식입니다. 유니티에서는 이를 위해 OnRenderImage 함수와 Graphics.Blit 메서드를 제공하며, 이를 통해 렌더링된 이미지를 2차적으로 수정할 수 있습니다.
주요 학습 포인트는 다음과 같습니다:
- 화면 공간 UV 좌표 계산 및 플랫폼별 반전 문제 해결.
- 색조 조절(밝기, 채도, 대비), 비네팅(Vignette) 효과 구현.
- 화면 깨짐(Screen Crack) 효과 및 각종 블러(Blur) 알고리즘.
- HDR Bloom, 톤 매핑(Tone Mapping) 및 후처리 순서 관리.
1. 후처리 기술의 정의와 작동 원리
후처리는 렌더링 파이프라인의 가장 마지막 단계에서 이루어집니다. 모든 기하 구조가 그려진 후의 프레임 버퍼 이미지를 가져와 색상을 변경하거나 특수 효과를 더하는 과정입니다.

이미지 설명: 렌더링 파이프라인에서 프레임 버퍼 이후 후처리 단계가 삽입되어 화면에 도달하는 과정을 나타낸 개념도
이 과정에서 유니티는 내부적으로 화면 크기에 맞는 사각형 폴리곤을 생성합니다. 사용자는 직접 오브젝트를 배치할 필요 없이 Unity에서 제공하는 스크립트와 셰이더를 조합하여 이를 제어합니다.
2. C# 스크립트를 이용한 후처리 설정
후처리를 실행하려면 MonoBehavior를 상속받은 스크립트에서 OnRenderImage 메서드를 사용해야 합니다. 이 메서드는 렌더링된 화면을 텍스처로 받아 처리합니다. 실제로는 카메라 앞에 화면을 가득 채우는 투명한 사각형이 배치되는 것과 같습니다.

이미지 설명: 유니티 카메라 컴포넌트에 후처리 스크립트가 적용된 모습과 화면을 가득 채운 Quad의 시각적 재현
주요 코드 구성 요소:
- OnRenderImage(RenderTexture source, RenderTexture destination): 소스 이미지를 받아 처리 후 결과물로 보냅니다.
- Graphics.Blit(source, destination, material): 특정 재질(Shader)을 사용하여 이미지 복사 및 렌더링을 수행합니다.
- [ExecuteInEditMode]: 플레이 모드가 아니어도 에디터 뷰에서 결과를 확인할 수 있게 합니다.
3. 화면 공간 UV와 플랫폼 호환성
후처리 셰이더에서 가장 중요한 것은 화면의 UV 좌표를 정확히 계산하는 것입니다. NDC(Normalized Device Coordinates) 공간의 좌표를 0에서 1 사이의 표준 UV 범위로 변환해야 합니다.

이미지 설명: 화면 공간의 UV 좌표계(0,0 ~ 1,1)가 픽셀 위에 매핑된 모습
이때 플랫폼(예: Direct3D vs OpenGL)에 따라 UV의 상하가 반전되는 문제가 발생할 수 있습니다. 유니티는 _ProjectionParams.x와 같은 내장 변수를 통해 이러한 플랫폼별 차이를 자동으로 보정할 수 있도록 지원합니다.
4. 기본 색상 조정: 밝기, 채도, 대비
가장 기초적인 후처리는 렌더링된 이미지의 전반적인 색감을 수정하는 것입니다. 밝기, 채도, 대비를 조절하여 분위기를 극적으로 바꿀 수 있습니다.

이미지 설명: 색상 조절 전(Original)과 후(Adjusted: 밝기, 채도 강화)의 비교 화면
- 밝기(Brightness): 픽셀의 RGB 값에 특정 계수를 곱하여 전체적으로 밝거나 어둡게 만듭니다.
- 채도(Saturation): RGB 값을 휘도(Luminance) 공식으로 변환하여 흑백 이미지를 얻은 후, 원본 컬러 이미지와 보간(Lerp)하여 색의 선명도를 조절합니다.
- 대비(Contrast): 중간 회색 값(0.5)을 기준으로 원본 이미지와 보간하여 밝은 부분은 더 밝게, 어두운 부분은 더 어둡게 만들어 명암 차이를 극대화합니다.
5. 비네팅(Vignette) 효과 구현
비네팅은 렌즈의 특성에 따라 화면 가장자리가 어둡게 보이는 효과입니다.

이미지 설명: 화면 중심은 밝고 외곽으로 갈수록 부드럽게 어두워지는 비네팅 효과의 마스크 맵
중심점(0.5, 0.5)으로부터의 거리를 계산하여 외곽으로 갈수록 색상을 감쇠시키는 방식으로 구현하며, 사각형 형태의 감쇠를 위해 X, Y축 거리를 별도로 계산하기도 합니다.
6. 화면 깨짐(Screen Crack) 효과
노멀 맵(Normal Map)을 활용하여 화면 UV를 왜곡시키면 유리가 깨진 듯한 효과를 낼 수 있습니다.

깨진 유리 형태의 노멀 맵 데이터(RGB 값)를 사용하여 원본 화면 UV 좌표에 오프셋(Offset)을 더해줍니다. 이렇게 하면 픽셀이 원래 위치가 아닌 다른 위치의 색상을 가져오게 되어 굴절된 것처럼 보입니다.
이번 강의를 통해 후처리의 기본 작동 원리와 스크립트 설정, 그리고 색상 보정 및 왜곡 효과의 기초를 다뤘습니다. 다음 시간에는 더 심화된 주제인 블러(Blur) 알고리즘과 Bloom 효과에 대해 자세히 알아보겠습니다.
'자료는 자료지 > 외부에서 퍼온자료' 카테고리의 다른 글
| 6. ASE를 활용한 마법의 거울(포탈) 효과 구현하기 (0) | 2026.01.05 |
|---|---|
| 5. Unity 셰이더 : 버텍스 오프셋을 이용한 촉수 성장 애니메이션 (1) | 2026.01.05 |
| 4. Unity 셰이더: MatCap과 박막 간섭 구현하기 (0) | 2026.01.04 |
| 03. 캐릭터 림 라이트 및 스캔(유광) 효과 구현과 코드 변환 [ASE 강좌] (0) | 2026.01.04 |
| 02 Shader 코드 입문 기초 (0) | 2026.01.02 |
댓글