Stencil 및 렌더링 순서 가이드¶
NiloToon의 Stencil 기능과 눈썹/속눈썹 렌더링 순서, 2D Shadow 가시성 설정을 설명해요.
캐릭터에 Stencil Shader 사용¶
GenericStencilUnlit.shader를 예시 Shader로 사용할 수 있어요. 그려진 캐릭터 픽셀을 Stencil Mask로 사용하여 Stencil 효과를 적용하거나, 참조용 예시 Shader가 필요할 때 유용해요.
Extra Thick Outline과 Stencil
"Extra Thick Outline"이 활성화되면 NiloToon의 Pass에 의해 Stencil 값의 최상위 비트가 1로 설정돼요. 예를 들어:
- Material의 Stencil Ref = 3 (
00000011) - 특수 Stencil Pass 이후 실제 Stencil Ref =
10000011

눈썹을 머리카락 위에 표시 (Opaque)¶
눈썹/속눈썹을 단순히 머리카락 위에 그리기만 하면 되는 경우(반투명 블렌딩 없이), 가장 간단하고 빠른 방법은 눈썹/속눈썹 Material에서 Z Offset (eyebrow) 그룹을 사용하는 거예요. 추가 Material, Stencil, NiloToonRendererRedrawer가 필요 없으며, 이 단계만으로 동작해요.
Z Offset 방법¶
눈썹 Material 편집 전:

눈썹 Material 편집 후 (Z Offset 활성화):

권장 값
-0.02 / -0.03이 일반적으로 좋은 시작점이에요. 눈썹을 카메라 방향으로 2cm / 3cm 밀어내는 것을 의미해요.
주의
너무 큰 값을 설정하지 마세요! (예: -0.1은 카메라 방향으로 10cm를 밀어내며, 일반적으로 너무 커요) 너무 크게 설정하면 눈썹이 손이나 팔과 같은 원하지 않는 오브젝트 앞에 나타날 수 있어요.
Z Offset Mask¶
눈썹/속눈썹이 독립된 Material이 아닌 경우(예: 눈썹을 포함하는 하나의 얼굴 Material), Z Offset (eyebrow) 그룹의 Mask Map을 사용하여 ZOffset이 눈썹/속눈썹 영역에만 적용되도록 해 주세요.

Stencil 방법¶
ZOffset을 사용하고 싶지 않고 눈썹 Material이 독립된 Material인 경우, Stencil을 사용하는 전통적인 방법도 가능해요.
- 눈썹 Material이 먼저 Stencil에 쓰기 (Material의 Stencil Buffer 그룹 사용)
- 머리카락이 Stencil을 사용하여 눈썹 픽셀의 렌더링을 거부 - 머리카락은 평소처럼 그려지되 눈썹 픽셀을 위한 구멍을 남김
- Z Offset 방법과 유사한 결과를 얻지만, 잘못된 가림 문제가 발생할 수 있어요 (예: 머리카락 Material이 앞머리를 독립 Material로 분리하지 않은 경우 머리카락 뒷면에서 눈썹이 보일 수 있음)
눈썹을 머리카락 위에 표시 (반투명)¶
전:

후 (눈썹 영역의 차이를 확인):

세 가지 방법(Method A / B / C)을 선택할 수 있어요. 눈썹이 독립된 Material인 경우 Method C를 권장해요.
Method A (반투명 머리카락)¶
앞머리를 반투명으로 만들어 머리카락 아래의 색상이 보이도록 하는 가장 쉬운 방법이에요. Stencil / ZOffset / NiloToonRendererRedrawer가 필요 없어요.
앞머리 Material의 Base Map에 이미 앞머리용 Alpha가 있다면:
- Surface Type = Opaque(Alpha)/Outline
앞머리 Material의 BasMap에 앞머리용 Alpha가 없다면:
- Surface Type = Opaque(Alpha)/Outline
- BaseMap Alpha Modify 그룹 활성화, Alpha Modify Tex에 텍스처 할당, Mode = Multiply, Alpha가 포함된 RGBA 채널 선택
- (선택) Is front hair? = 1 설정 - 캐릭터가 카메라를 향하지 않을 때 BaseMap Alpha Modify 효과가 페이드아웃됨
- Render Queue: 머리카락이 얼굴/눈썹 이후에 그려지도록 설정
Method B (ZOffset 눈썹 Redraw)¶
NiloToonRendererRedrawer와 Material Variant를 사용하여 반투명 눈썹을 머리카락 위에 다시 그리는 방법이에요.
- 원본 눈썹 Material의 Material Variant를 생성하고 Surface Type = Transparent/No Outline으로 설정
- 눈썹 Renderer에 NiloToonRendererRedrawer 스크립트 추가
- NiloToonRendererRedrawer의 + 버튼으로 Redraw 요청 추가, Material Variant 할당
- Material Variant에 다음 설정 적용:
- Surface Type = Transparent/No Outline
- BaseColor Alpha < 1 (예: 0.5)
- ZOffset 그룹 활성화, Preset을 3cm 이상으로 설정
Method C (Stencil + Render Queue Hair Redraw)¶
시각적으로 완벽한 결과를 만드는 방법이지만 설정이 훨씬 복잡해요.
요구 사항
Forward / Forward+ 에서만 동작해요 (Stencil이 필요하기 때문이에요).
단계 개요:
- 얼굴(눈썹 제외) Material을 Stencil 설정 없이 정상 렌더링 (Render Queue 2000~2450)
- 눈/눈썹 Material에 Stencil Writer 설정 - Preset 1st>Writer (eyebrow), Comp = Always, Pass = Replace, 특수 Ref (예: 77) (Render Queue 2451)
- 앞머리 Material에 Stencil Reader 설정 - Preset 2nd>Reader (Original Hair), Comp = NotEqual, Pass = Keep, 동일한 Ref (예: 77) (Render Queue 2452)
- 3단계의 머리카락 Material의 Material Variant를 만들고 NiloToonRendererRedrawer로 다시 그리기 - Preset 3rd>Reader-Invert (Redraw Hair), Comp = Equal, Pass = Keep, 동일한 Ref (Render Queue 2452)
- Material Variant에 반투명 설정 적용:
- Surface Type = Opaque(Alpha)/Outline 또는 Opaque(Alpha)/No Outline
- BaseMap Alpha Modify 활성화, NiloToonURP 폴더의 PureBlack4x4 텍스처 할당
- Strength = 원하는 값 (예: 0.25 ~ 0.5)
- Is front hair? = 1
Ref ID
Ref ID 77은 임의의 숫자이며, 캐릭터 간에 고유한 것이 권장돼요.
렌더링 순서
각 Material의 Render Queue를 사용하여 1 > 2 > (3+4)의 올바른 그리기 순서를 반드시 제어해야 해요.
2D Shadow 가시성 Threshold¶

2D Shadow가 그림자 발생체(Shadow Caster)가 그림자를 받는 표면에 매우 가까울 때 사라지는 경우, DepthTex RimLight&Shadow > Shadow Area의 Threshold Offset과 Fadeout Range를 조정해 주세요.