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 와 연결을 해서 거리에 따른 연산 후 그림자를 표현


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