글에 사용된 모든 그림과 내용은 직접 실험하고 작성한 것입니다.
Unity에서 PostProcessing Volume과 PostProcess Layer를 활용해 거리 기반 색수차(Chromatic Aberration) 효과를 구현한 경험을 공유합니다. 특히 URP가 아닌 Built-in Render Pipeline에서 PostProcessing Stack v2를 사용하는 상황에서, 색수차를 스크립트로 동적 제어하는 방식에 대해 정리합니다.
적용 전
적용 후
PostProcessVolume.profile.TryGetSettings<>()를 사용하면 런타임에 효과 강도를 조절할 수 있다.
Chromatic Aberration은 distance-based effect로 사용할 경우 몰입감 있는 보스전, 위험 근접 알림 등으로 활용 가능하다. PostProcessing은 Volume과 Layer가 함께 설정되어야 효과가 정상적으로 보인다.
📌 참고한 문서
Unity Manual - PostProcessing Stack v2:
https://docs.unity3d.com/Packages/com.unity.postprocessing@2.3/manual/index.html
Unity Forum - Runtime Access to PostProcess Settings:
https://forum.unity.com/threads/change-post-processing-settings-at-runtime.499360/
💡 개요
보스나 엘리트 몬스터 근처에 있을 때, 화면이 살짝 흐려지고 붉은 테두리가 감도는 '위험 근접 알림' 시각 효과를 주고 싶었습니다. URP를 도입하지 않은 상황이었고, PostProcessing Stack v2를 사용 중이었습니다.
🧪 구현 절차
1. PostProcess Volume 설정
Hierarchy에 PostProcessVolume 객체 생성 -> Is Global 체크 -> Profile 생성 후 Chromatic Aberration 추가 -> 강도(Intensity)를 0으로 시작
using UnityEngine.Rendering.PostProcessing;
public class DetectionRing : MonoBehaviour
{
public PostProcessVolume postProcessVolume;
private ChromaticAberration chroma;
public Transform target;
public float maxDistance = 5f;
public float maxIntensity = 1.0f;
void Start()
{
if (postProcessVolume != null)
{
postProcessVolume.profile.TryGetSettings(out chroma);
}
}
void Update()
{
if (chroma == null || target == null) return;
float distance = Vector3.Distance(transform.position, target.position);
float t = 1f - Mathf.Clamp01(distance / maxDistance);
float smoothT = Mathf.SmoothStep(0f, 1f, t);
chroma.intensity.value = Mathf.Lerp(0f, maxIntensity, smoothT);
}
}
플레이어 주변 3m 이내에 엘리트 몬스터가 접근하면 점점 강해지는 붉은 색수차가 시야 주변부에 퍼짐
PostProcessing 효과지만 UI와 혼합이 자연스러움. 실제 프로젝트 적용 시 FPS 평균 변화 없음 (PC 기준)
✅ 정리
PostProcessVolume은 단순한 연출용이 아니라, 게임플레이에 반응하는 UI/FX 요소로 활용될 수 있다.
URP가 아닌 Built-in Pipeline에서도 PostProcessing Stack v2를 통해 충분한 연출 가능
Chromatic Aberration은 감정적 신호(위험, 공포)를 시각적으로 전달하는 데 탁월하다