
저자: 次次先生
들어가며
명일방주 앤드필드 렌더링을 공부하던 중, 작품의 "앞머리 그림자"가 한 장의 얇은 면(plane)으로 구현된 것을 확인했습니다. 사실 명일방주 앤드필드뿐만 아니라 많은 2D풍 게임들이 같은 방식으로 앞머리 그림자를 만듭니다. 이 글은 그 면을 활용해 고품질의 앞머리 그림자를 구현하는 과정을 정리한 것입니다.
최종 결과 미리 보기


- 어떤 각도로 회전하더라도, 그림자는 얼굴과 머리카락의 영역을 벗어나지 않습니다.
- 그림자 색은 투영 뒤에 있는 실제 색을 기준으로 실시간 보정됩니다.
접근 개요
가장 단순하게는, 앞머리용 반투명 면의 머티리얼에 색과 투명도를 직접 넣을 수 있습니다. 하지만 이렇게 하면 다음과 같은 문제가 발생합니다.

- 그림자가 필요 없는 곳에도 착색되어 어색합니다.
- 피부 위의 그림자와 머리카락 위의 그림자가 같은 색으로 처리되어 부자연스럽습니다.
따라서 두 가지를 해결해야 합니다.
- 면이 "그림자가 필요한 곳"과 "필요 없는 곳"을 구분해야 합니다.
- 면이 "피부에 투영된 그림자"와 "머리카락에 투영된 그림자"를 구분해야 합니다.
1) SceneDepth로 투영 위치 마스크 생성

위와 같은 마스크를 얻습니다. 흰색은 정상적으로 피부나 머리카락에 투영되어야 하는 위치이고, 검은색은 투영이 필요 없는 위치입니다.
원리는 단순합니다. 반투명 면 뒤의 심도를 읽어, 임계값으로 비교합니다.

SceneDepth 노드는 반투명 면 뒤쪽의 깊이를 가져옵니다. 이 깊이와 면의 깊이를 비교하고 임계값을 조절해, 현재 픽셀이 실제 지오메트리(머리카락/피부) 뒤에 있는지 판정하여 투영 가능 영역 마스크를 만들 수 있습니다.
2) SceneColor로 피부 vs 머리카락 구분
머리카락과 피부의 가장 큰 차이는 색 특성입니다. 따라서 색 공간에서 기준을 잡아 분류합니다.

SceneColor로 면 뒤의 색을 읽고, RGB를 HSV로 변환합니다. 이후 V(명도)나 S(채도)를 활용해 "피부 영역에 드리운 그림자"와 "머리카락 영역에 드리운 그림자"를 구분하여 서로 다른 감마, 색상 보정, 농도를 적용합니다.
머티리얼 그래프 전체


현 포인트 요약
- 반투명 앞머리 면 1장을 배치합니다.
- SceneDepth로 투영 가능 영역 마스크를 만든 뒤, 경계는 소프트하게 처리합니다.
- SceneColor→HSV 변환으로 피부/머리카락을 분리해, 각 영역별로 알맞은 색 보정과 농도를 적용합니다.
- 결과 색은 후면의 실제 색을 기반으로 실시간으로 맞춰지므로, 씬 조명 변화에도 자연스럽게 반응합니다.
마무리
단 두 가지 아이디어, 즉 SceneDepth 기반의 위치 마스킹과 SceneColor(HSV) 기반의 영역 분류만으로도 고품질의 앞머리 그림자를 만들 수 있습니다. 프로젝트에 적용해 보시고, 파라미터 튜닝으로 팀 스타일에 맞는 결과를 얻어 보세요.
원문
'TECH.ART.FLOW.IO' 카테고리의 다른 글
| [번역] Unity URP 아웃라인 원신 중대장의 야혼 아웃라인 효과 모방(에너지 교란 아웃라인) (0) | 2025.11.14 |
|---|---|
| [번역] MatCap 박막 간섭 비눗방울 렌더링 (0) | 2025.11.11 |
| [번역] UE5 Add Custom MeshDrawPass (0) | 2025.11.03 |
| [번역] UE5 시스템 솔루션: 고품질 식생 시스템 (0) | 2025.10.29 |
| [번역] SLG 게임에서의 나무 컬링 최적화 - GPU 기반 접근법 (0) | 2025.10.25 |