Decal 을 이용한 페이크 그림자

2026. 4. 8. 13:50·📖TIL/🔮Unity Graphics

Decal 을 이용한 페이크 그림자

URP의 데칼 프로젝트와 Shader Graph를 이용한 캐릭터의 페이크 그림자 만들기

캐릭터의 현재 높낮이에 따라 그림자가 작아지거나 사라지고 계단을 오르고 내려올 때 그림자가 계단에 맞게 붙어다니는 페이크 그림자를 만들어보자.


 

1. URP 세팅

  • Add renderer feature 클릭

  • Decal 추가
  • 이렇게 해두면 이 프로젝트 안에서는 데칼 프로젝트를 사용할 수 있게 된다.

 

 

2. EmptyObject 생성

  • 페이크 그림자를 생성하려는 캐릭터 오브젝트에 우클릭 - Create - EmptyObject
  • 이름은 Shadow

  • Shadow 오브젝트에서 Add Component 클릭
  • URP Decal Projector 를 검색하여 추가

 

 

3. Shader Graph 세팅

  • 프로젝트 창에서 우클릭
  • Shader Graph - URP - Decal Shader Graph
  • 이름은 Shadow
  • 생성한 Shader Graph 을 연다.

  • Affect Normal 과 Blend 체크 해제

 

 

4. Shader Graph 세팅

Position 에서 나온 XYZ 공간을 Distance 와 연결을 해서 거리에 따른 연산 후 그림자를 표현

  1. Position 에서 좌표 꺼내기
    Position 노드를 Object Space 로 변경
    ① Position 을 Split 에 연결
    이후 Split 에서 나온 축 값 중 일부를 가공해서 원형 거리 계산에 사용할 좌표를 만든다.
  2. 원형 기준 좌표 만들기
    Split 에서 분리한 값 중 하나에 0.5 를 더한다.
    One Minus 로 반전시켜 그림자 모양의 기준 좌표를 만든다
    ① Split 의 한 축 값 → Add
    ② 0.5 → Add
    ③ Add 출력 → One Minus
    좌표를 그대로 쓰지 않고 약간 오프셋을 준 뒤 반전해서 원형 그림자가 원하는 위치와 방향으로 나오도록 조정
  3. Vector3 으로 다시 좌표 조합하기
    가공한 좌표값과 Split 에서 나온 다른 축 값을 이용해서 Vector 3 노드에 넣는다.
    ① 가공된 값 ( One Minus 출력 ) → Vector 3 의 한 축 입력
    ② Split 에서 나온 다른 축 값 → Vector 3 의 다른 축 입력
    ③ 남는 축은 0
    이렇게 만든 Vector 3 은 거리 계산용 2D 평면 좌표를 3D 벡터 형태로 구성한 값이라고 보면 된다.
  4. 중심점과의 거리 계산
    이제 Distance 노드를 사용해서 현재 좌표가 중심점에서 얼마나 떨어져 있는지 계산한다.
    ① Vector 3 출력 → Distance A
    ② ( 0, 0, 0 ) 값의 Vector 3 → Distance B
    이 거리 값을 이용하면 중심에서 가까울수록 값이 작고, 바깥으로 갈수록 값이 커진다.
    원형 마스크를 만들기 좋은 상태가 된다.
  5. 거리 값을 그림자 마스크로 변환
    거리 값은 바깥으로 갈수록 커지므로, 이를 그림자 마스크처럼 쓰기 위해 뒤집고 보정한다
    ① Distance 출력 → Multiply
    ② 2 → Multiply
    ③ Multiply 출력 → One Minus
    여기서 2 를 곱하는 이유는 그림자의 반경과 퍼지는 정도를 조절하기 위함
    One Minus 를 사용하면 중심부는 값이 크고 바깥쪽은 값이 작아지는 원형 알파 마스크 형태가 된다.
  6. EdgeSharpness 로 가장자리 강도 조절
    이제 만들어진 마스크에 EdgeSharpness 프로퍼티를 곱해서 그림자 경계를 조절
    ① One Minus 출력 → Multiply
    ② EdgeSharpness → Multiply
    이 값은 경계 선명도를 조절하는 역할을 한다.
    ① 값이 낮으면 더 부드럽다
    ② 값이 높으면 더 또렷한 가장자리가 된다
    그 다음 Saturate 로 값을 0 ~ 1 범위로 제한한다.
    ① Multiply 출력 → Saturate
  7. Color 의 Alpha 와 곱해서 최종 투명도 만들기
    그림자 색은 Color 프로퍼티로 받는다.
    그 중 알파 값만 따로 분리해서 최종 마스크와 곱해준다.
    ① Color → Split
    ② Split A → Multiply
    ③ Saturate 출력 → Multiply
    원형 마스크의 모양을 유지하면서 Color 의 알파값으로 전체 그림자 투명도를 쉽게 조절 가능
  8. Fragment 에 최종 연결
    마지막으로 색과 알파를 Fragment 에 연결
    ① Color RGB → Fragment Base Color
    ② 최종 Multiply 출력 → Fragment Alpha

Base Color 는 그림자 색상, Alpha 는 원형 마스크 + 가장자리 강도 + 색상 알파

 

이 그래프는 오브젝트 로컬 좌표를 기반으로 중심점과의 거리를 계산해 원형 마스크를 만들고, 그 값을 EdgeSharpness 와 Color Alpha 로 보정한 뒤 부드러운 Blob Shadow 형태의 투명 그림자로 출력하는 구조이다.

 

▼ 요약

마스크 생성부

  • Position(Object) → Split
  • Split 축 값 + 0.5 → Add
  • Add → One Minus
  • One Minus + Split의 다른 축 값 → Vector3
  • Vector3 와 ( 0, 0, 0 ) → Distance
  • Distance × 2 → Multiply
  • Multiply → One Minus

알파 보정부

  • One Minus × EdgeSharpness → Multiply
  • Multiply → Saturate

색 / 출력부

  • Color → Split
  • Saturate × Color.A → Multiply
  • Color RGB → Fragment Base Color
  • 최종 Multiply → Fragment Alpha

5. Material 생성

세팅한 Shader Graph 에 우클릭 - Create Material 클릭

생성한 Material 을 URP Decal Projector 의 Material 에 넣어준다.


 

 

Projection Depth 에 따라서 깊이를 조정할 수 있다.

그림자를 표현하기 위해서는 Projection Depth 가 아래쪽을 향하고 있어야한다.

아래를 향하도록 Transform 을 조정해준다.

크기를 키우려면 Width 와 Height 을 조정해주면 된다.

'📖TIL > 🔮Unity Graphics' 카테고리의 다른 글

Fresnel Setting  (0) 2026.03.01
Electric short  (0) 2026.02.28
Electric spark  (0) 2026.02.28
Muzzle Flash with Particle system  (0) 2026.02.26
'📖TIL/🔮Unity Graphics' 카테고리의 다른 글
  • Fresnel Setting
  • Electric short
  • Electric spark
  • Muzzle Flash with Particle system
DevHoChan
DevHoChan
맨땅에서 시작하는 코딩 도전
  • DevHoChan
    Debugging Life
    DevHoChan
  • 전체
    오늘
    어제
    • 분류 전체보기 (374)
      • 🕹️Game Life (1)
      • 🖥️Computer Science (5)
      • 📖TIL (141)
        • 🔥Projects (16)
        • 💡DevTips (5)
        • 🤔발생한 문제와 해결 (5)
        • 🔮Unity Graphics (5)
        • 🎤Interview (3)
        • ✅CodingTest (9)
      • 🚀Game Release (4)
      • 🧊Unity Basic (58)
        • 📌용어 사전 (1)
        • 에디터&인터페이스 (3)
        • 디버그 (1)
        • 라이프사이클 (4)
        • 게임오브젝트 (4)
        • 프리팹 (1)
        • 오브젝트풀링 (4)
        • 애트리뷰트 (2)
        • 트랜스폼 (4)
        • 물리&충돌 (1)
        • 프레임&델타타임 (4)
        • 코루틴&이벤트 (7)
        • 수학&보정함수 (3)
        • 디자인패턴 (9)
        • UGUI (3)
        • 벡터 ( Vector ) (3)
        • 씬 ( Scene ) (2)
        • 데이터 관리 (2)
      • ⭐C Sharp (99)
        • 📌용어 사전 (1)
        • 📌문법 사전 (6)
        • 메모리 관리 (3)
        • 00. 문법 (17)
        • 01. 변수 (3)
        • 02. 자료형 (2)
        • 03. 연산자 (6)
        • 04. 조건문 (2)
        • 05. 반복문 (2)
        • 06. 배열 (3)
        • 07. 메서드(함수) (7)
        • 08. 열거형 (3)
        • 09. 구조체 (2)
        • 10. 참조 (2)
        • 11. 객체 지향 (11)
        • 12. 델리게이트 (3)
        • 13. 디자인 패턴 (7)
        • 14. LINQ (1)
        • 📂▼자료구조 (2)
        • 15-1. 제네릭 (3)
        • 15-2. 배열 (4)
        • 15-3. 리스트 (2)
        • 15-4. 스택과 큐 (2)
        • 15-5. 딕셔너리 해시테이블 (2)
        • 15-6. 트리와 그래프 (3)
      • 📊Algorithm (16)
        • BigO (2)
        • 정렬 (4)
        • 셔플 (2)
        • 탐색 (6)
        • 최적화 (1)
      • 📝Game Design (16)
      • 🤖​AI Tools (12)
        • AI 리뷰 분석 (6)
        • Player2 (0)
        • 3D 모델링 (1)
        • 2D 스프라이트 (0)
        • 이미지 (2)
        • 사운드 (1)
        • 동영상 (1)
        • 문서 (1)
      • 🌍Network (6)
      • 🌱Github (11)
        • 기본 개념 (7)
        • 명령어 (1)
        • 도구 활용 (1)
      • ⚙️Visual Studio (5)
        • 🔧설치 및 환경설정 (2)
        • ⌨️HotKey (1)
        • 🚨디버깅 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    게임기획
    til
    유니티
    GitHub
    자료구조
    gamedesign
    자료형
    OOP
    디자인패턴
    CodingTest
    객체지향
    c#
    csharp
    메모리관리
    algorithm
    문법
    부트캠프
    unity
    기획
    게임디자인
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
DevHoChan
Decal 을 이용한 페이크 그림자
상단으로

티스토리툴바