[Unity], [Shader] 색수차 효과 (Chromatic Aberration)

ChangJin·2025년 5월 25일
0

Unity

목록 보기
18/19
post-thumbnail

글에 사용된 모든 그림과 내용은 직접 실험하고 작성한 것입니다.

🎯 글의 목적

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으로 시작

  1. PostProcess Layer 설정
    카메라에 PostProcessLayer 컴포넌트 추가 -> Layer: Everything -> Volume blending: Layer에 맞춰 세팅

  1. 거리 기반 동적 조절 스크립트
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은 감정적 신호(위험, 공포)를 시각적으로 전달하는 데 탁월하다

profile
게임 프로그래머

0개의 댓글