콘텐츠로 이동

Surface Type

Surface Type 설정 화면

가장 먼저 확인해야 하는 가장 중요한 설정이에요!

URP Lit Shader의 Surface Type과 유사하게, NiloToon_Character Shader에도 Material 상단에 Surface Type이 있어요.

SurfaceType은 다음 속성의 기본값을 변경해요:

  • _SrcBlend (Source Factor)
  • _DstBlend (Destination Factor)

블렌딩 팩터 설정

  • _ZWrite (깊이 버퍼에 쓰기 여부)

ZWrite 설정

  • _RenderOutline (Classic Outline 그룹의 토글)

RenderOutline 토글

  • _AlphaClip (Alpha Clipping 그룹의 토글)

AlphaClip 토글

  • Render Queue

Render Queue 설정

다른 속성을 편집하기 전에 먼저 Material의 올바른 Surface Type을 선택하는 것을 권장해요.


Opaque/Outline

새 Material을 생성할 때의 기본 Surface Type으로, Classic Outline이 포함된 불투명 타입이에요. 대부분의 Material이 이 타입을 사용해요.

사용 예시:

  • Outline이 필요하고 반투명이 불필요한 모든 완전 불투명 헤어/바디/스킨/얼굴/의상 Material

Opaque/Outline 예시

속성 기본값
_SrcBlend One (1)
_DstBlend Zero (0)
_ZWrite On (1)
_RenderOutline On (1)
_AlphaClip Off (0)
Render Queue 2000

Opaque

Opaque/Outline과 동일하지만 Outline이 없어요. Outline이 필요 없는 완전 불투명 Material에 적합해요.

사용 예시:

  • 눈, 눈썹, 입, 이빨, 손톱, 가는 머리카락, 얇은 의상

Opaque 예시

속성 기본값
_SrcBlend One (1)
_DstBlend Zero (0)
_ZWrite On (1)
_RenderOutline Off (0)
_AlphaClip Off (0)
Render Queue 2000

Opaque(Alpha)/Outline

Opaque/Outline과 동일하지만 반투명 Alpha Blending을 사용해요. 약간의 반투명 Alpha Blending이 있는 불투명 Material에 적합해요.

사용 예시:

  • 반투명 앞머리, Alpha 값이 대체로 높아 시각적으로 Opaque/Outline에 가깝고 Shadow Map을 투사해야 하는 반투명 의상
속성 기본값
_SrcBlend Source Alpha (5)
_DstBlend One minus Source Alpha (10)
_ZWrite On (1)
_RenderOutline On (1)
_AlphaClip Off (0)
Render Queue 2499

Transparent

ZWrite와 Outline이 없는 전통적인 Unity 투명 타입이에요. 대부분의 사용자가 '투명'이라고 이해하는 타입이에요. Outline이 필요 없고 Shadow Map을 투사하지 않는 투명 Material에 적합해요.

사용 예시:

  • 안경의 반투명 유리 Material, 이모지, 얼굴 표정, VFX, 얼굴 헤어 그림자 Mesh의 메이크업, 반투명 눈 파트
속성 기본값
_SrcBlend Source Alpha (5)
_DstBlend One minus Source Alpha (10)
_ZWrite Off (0)
_RenderOutline Off (0)
_AlphaClip Off (0)
Render Queue 3000

주의

이 Material은 Render Queue > 2499로 인해 Depth Texture에 기록되지 않으므로, Depth에 의존하는 효과가 작동하지 않아요 (예: Depth of Field, Decal, SSAO).


Transparent(ZWrite)/Outline

전통적인 Unity Transparent와 유사하지만 ZWrite와 Outline이 있어요.

사용 예시:

  • Alpha 값이 대체로 매우 낮아 Shadow Map을 투사하지 않아야 하는 반투명 플라스틱 외투/의상
속성 기본값
_SrcBlend Source Alpha (5)
_DstBlend One minus Source Alpha (10)
_ZWrite On (1)
_RenderOutline On (1)
_AlphaClip On (1)
Render Queue 3000

주의

이 Material은 Render Queue > 2499로 인해 Depth Texture에 기록되지 않으므로, Depth에 의존하는 효과가 작동하지 않아요 (예: Depth of Field, Decal, SSAO).


Outline 및 Alpha Clip 변형

다양한 Surface Type 옵션이 있으며, 대부분 Outline (켜기/끄기) 및 AlphaClip (켜기/끄기) 관련 확장 변형이에요.

Outline 및 AlphaClip 변형 목록

  • Classic Outline을 표시해야 하는 경우 /Outline 접미사가 있는 항목을 선택하세요. 그렇지 않으면 /No Outline 접미사가 있는 항목을 선택하세요.
속성
_ZWrite On (1)
_RenderOutline On (1)
  • Alpha Clipping (Alpha CutOut)을 적용해야 하는 경우 (CutOut) 접미사가 있는 항목을 선택하세요. 그렇지 않으면 (CutOut) 접미사가 없는 항목을 선택하세요.
속성
_AlphaClip On (1)

Render Queue 초기화

주의

SurfaceType을 변경하면 Render Queue가 선택한 SurfaceType의 기본 Render Queue로 초기화돼요. 특정 Render Queue가 필요한 경우 SurfaceType 변경 후 반드시 Render Queue를 다시 설정해 주세요!

Render Queue 초기화 경고


Config 파일

각 SurfaceType의 세부 설정을 확인해야 하는 경우, 프로젝트에서 NiloToonCharacter_SurfaceType_LWGUI_ShaderPropertyPreset를 검색하여 열 수 있어요.


Is Skin? / Is Face?

Is Skin / Is Face 설정

중요한 설정이에요!

스킨얼굴 Material은 좋은 외관을 위해 특별한 관리가 필요해요. Material에서 다음 그룹이 이 작업에 유용해요:

  • Is Skin?
  • Is Face?

설정 및 효과

모든 스킨 Material (예: 얼굴, 입, 바디, 손, 다리)을 찾아 Is Skin?을 켜고, 그렇지 않은 것은 꺼 주세요. Material이 스킨과 비스킨 부분을 혼합하고 있다면 Is Skin? > Mask를 사용하여 마스킹하세요.

Is Skin 설정

Is Skin을 활성화하면:

  • Material의 Shadow ColorShadow Color 그룹에서 오버라이드된 붉은색 스킨 그림자 색상을 사용해요 (Is Skin 그룹을 켜지 않으면 기본 그림자 색상이 스킨에 적합하지 않을 수 있어요)

    스킨 그림자 색상 오버라이드

참고

Is Skin이 활성화된 Material의 스킨 색상을 편집하려면 Shadow Color > Skin and Face Override를 사용하세요.

모든 얼굴 Material (예: 얼굴, 입, 눈 및 눈썹)을 찾아 Is Face?를 켜고, 그렇지 않은 것은 꺼 주세요. Material이 얼굴과 비얼굴 부분을 혼합하고 있다면 Is Face? > Mask를 사용하여 마스킹하세요.

Is Face 설정

Is Face를 활성화하면:

  • Shader에서 얼굴의 셰이딩 법선을 편집해요 (셰이딩 법선이 평평/둥글게 되며, NiloToonPerCharacterRenderController Script의 fix face normal 슬라이더로 정의돼요)
  • 표준 Lighting Style 그룹 대신 Lighting Style (face) 그룹의 값을 사용하도록 오버라이드해요
  • Material의 Shadow ColorShadow Color 그룹에서 오버라이드된 붉은색 스킨 그림자 색상을 사용해요

주의

  • 비스킨 Material에는 Is Skin?을 활성화하지 마세요
  • 비얼굴 Material에는 Is Face?를 활성화하지 마세요

ShadowColor 스킨/얼굴

Material에서 SkinFace 영역을 표시한 후, 다음 섹션에서 스킨 및 얼굴 그림자 색상을 제어할 수 있어요:

Shadow Color > Skin and Face Override

현재 스킨/얼굴 그림자 색상이 마음에 들지 않는다면:

  • 적합한 Color Preset (Red/Orange/Purple 및 변형)을 선택하세요. 그림자 색상의 HueSaturation이 정의돼요.
  • Brightness / Custom Tint를 스킨과 얼굴 모두에 대해 제어하세요. 그림자 색상을 더 어둡게 만들기 위해 Brightness를 0.8~1로 낮추는 것도 괜찮아요. 특히 남성 캐릭터나 더 사실적인 스타일의 캐릭터에 적합해요.

스킨/얼굴 그림자 색상 설정

스킨/얼굴 영역 디버그

NiloToon의 디버그 창을 사용하여 캐릭터의 SkinFace 영역을 디버그할 수 있어요. Window > NiloToonURP > Debug Window를 클릭하세요.

디버그 창 열기

  • Shading Debug case에서 Is Face 또는 Is Skin을 선택하세요
  • Enable Shading Debug? 토글을 활성화하세요

Is Face 디버그 뷰 Is Skin 디버그 뷰

표시된 영역은 흰색으로, 그렇지 않은 영역은 검은색으로 Grayscale 값으로 스킨 및 얼굴 영역을 디버그할 수 있어요.

목 그림자 분리 문제

이것은 고급 주제이며, 모델에서 문제가 되지 않는 경우 건너뛸 수 있어요.

표준 해결 방법

Is Skin?Is Face? 모두 추가 텍스처를 사용하여 Is Skin? 또는 Is Face?로 간주되지 않아야 하는 영역을 마스킹하기 위한 Mask Map 기능이 있어요.

Mask Map 기능

일반적인 문제는 얼굴 Material (IsFace 활성화)과 바디 Material (IsFace 비활성화)이 주변에서 분리되어 목 주변에서 그림자가 분리되어 보이는 거예요 (목 영역에 가시적인 선이 나타남).

목 그림자 분리 문제

위 이미지는 목에서 그림자 분리 문제를 보여줘요.

Is Face 디버그 뷰 - 머리 하단

위 이미지는 현재 Is Face 디버그 뷰예요. 머리 하단Is Face로 간주되지만 Is Face가 아닌 것을 볼 수 있어요.

일반적인 해결 방법은 추가 Mask Map을 사용하여 머리 하단Is Face로 간주하지 않도록 만드는 거예요.

얼굴 BaseMap - 아티스트의 그림자 페인팅

위 텍스처는 얼굴 BaseMap이에요. 아티스트는 보통 머리 하단에 그림자 색상을 페인팅해요.

Is Face Mask Map 예시

위 텍스처는 추가 Is Face Mask Map이에요. BaseMap의 그림자 색상/머리 하단이 검은색으로 변환되고 나머지는 흰색으로 변환되어, 머리 하단이 더 이상 Is Face로 간주되지 않아요. 약간의 블러를 추가하면 전환이 더 부드러워져요.

위의 Is Face Mask Map을 할당하면 더 나은 그림자 렌더링 결과를 볼 수 있어요. Directional Light를 회전시켜 모든 조명 조건에서 잘 보이는지 확인해 보세요.

그림자 분리 문제 해결 결과

Mask Map 적용 후 Is Face 디버그 뷰

Occlusion Map

극단적인 조명 각도와 목 회전에서 목의 Shadow Map이 불안정하거나 날카로운 절단처럼 보일 수 있어요. 이 경우 부드러운 그라데이션의 Occlusion Map을 추가하여 목의 일부를 그림자로 강제할 수 있으며, 문제가 되는 영역을 쉽게 숨길 수 있어요.

Occlusion Map 적용 전

위 이미지는 Occlusion Map 추가 전이에요. 3D 모델 형상으로 인해 날카로운 그림자 분리가 보여요.

Occlusion Map 적용 후

위 이미지는 Occlusion Map 추가 후예요. 모든 방향의 조명이 잘 보이며, Shadow Map과 완벽하게 조화돼요.

페인팅된 Occlusion Map

위 이미지는 새로 페인팅된 Occlusion Map이에요.

간편 해결 방법

위의 Face Mask나 Occlusion Map은 수동 페인팅이나 PhotoShop, Clip Studio Paint 등의 도구 사용이 필요하여 비아티스트에게는 어려울 수 있어요.

간편 해결 방법의 아이디어는 표준 해결 방법의 반대 방향이에요. 목 전체 Material도 Is Face로 만들어 그림자 분리 선을 숨겨요. 이 방법은 의상이나 칼라 같은 액세서리가 목 하단을 덮고 있을 때만 잘 작동해요. 목 Material의 Is Face Mask를 사용하여 그림자 분리 선이 의상이나 액세서리 아래에서만 나타나도록 해요.

간편 해결 방법 예시

위 이미지에서는 간편 해결 방법을 적용하여 목과 머리 모두 Is Face를 활성화했으며, 그림자 분리 선은 흰색 의상 아래에 숨겨져 있어요.

Shadow Color 동기화

모든 얼굴 및 스킨 Material의 그림자 색상이 동일해야 하는 경우, 모든 얼굴 Material과 스킨 Material에 동일한 그림자 색상을 사용해야 해요.

Shadow Color 동기화 예시