콘텐츠로 이동

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

Stencil Shader 예시


눈썹을 머리카락 위에 표시 (Opaque)

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

Z Offset 방법

눈썹 Material 편집 전:

Z Offset 적용 전 1 Z Offset 적용 전 2

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

Z Offset 적용 후 1 Z Offset 적용 후 2

권장 값

-0.02 / -0.03이 일반적으로 좋은 시작점이에요. 눈썹을 카메라 방향으로 2cm / 3cm 밀어내는 것을 의미해요.

주의

너무 큰 값을 설정하지 마세요! (예: -0.1은 카메라 방향으로 10cm를 밀어내며, 일반적으로 너무 커요) 너무 크게 설정하면 눈썹이 손이나 팔과 같은 원하지 않는 오브젝트 앞에 나타날 수 있어요.

Z Offset Mask

눈썹/속눈썹이 독립된 Material이 아닌 경우(예: 눈썹을 포함하는 하나의 얼굴 Material), Z Offset (eyebrow) 그룹의 Mask Map을 사용하여 ZOffset이 눈썹/속눈썹 영역에만 적용되도록 해 주세요.

Z Offset Mask 설정

Stencil 방법

ZOffset을 사용하고 싶지 않고 눈썹 Material이 독립된 Material인 경우, Stencil을 사용하는 전통적인 방법도 가능해요.

  1. 눈썹 Material이 먼저 Stencil에 쓰기 (Material의 Stencil Buffer 그룹 사용)
  2. 머리카락이 Stencil을 사용하여 눈썹 픽셀의 렌더링을 거부 - 머리카락은 평소처럼 그려지되 눈썹 픽셀을 위한 구멍을 남김
  3. 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를 사용하여 반투명 눈썹을 머리카락 위에 다시 그리는 방법이에요.

  1. 원본 눈썹 Material의 Material Variant를 생성하고 Surface Type = Transparent/No Outline으로 설정
  2. 눈썹 Renderer에 NiloToonRendererRedrawer 스크립트 추가
  3. NiloToonRendererRedrawer의 + 버튼으로 Redraw 요청 추가, Material Variant 할당
  4. 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이 필요하기 때문이에요).

단계 개요:

  1. 얼굴(눈썹 제외) Material을 Stencil 설정 없이 정상 렌더링 (Render Queue 2000~2450)
  2. 눈/눈썹 Material에 Stencil Writer 설정 - Preset 1st>Writer (eyebrow), Comp = Always, Pass = Replace, 특수 Ref (예: 77) (Render Queue 2451)
  3. 앞머리 Material에 Stencil Reader 설정 - Preset 2nd>Reader (Original Hair), Comp = NotEqual, Pass = Keep, 동일한 Ref (예: 77) (Render Queue 2452)
  4. 3단계의 머리카락 Material의 Material Variant를 만들고 NiloToonRendererRedrawer로 다시 그리기 - Preset 3rd>Reader-Invert (Redraw Hair), Comp = Equal, Pass = Keep, 동일한 Ref (Render Queue 2452)
  5. 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 Threshold 설정

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