콘텐츠로 이동

Outline 설정 가이드

NiloToon의 다양한 Outline 관련 기능을 설명해요. Screen Space Outline, Classic Outline, Outline 너비 고정, Z-Fighting 해결 등을 다루고 있어요.


Screen Space Outline 활성화

Screen Space Outline은 캐릭터와 환경 Material 모두에 적용할 수 있는 화면 공간 기반 Outline이에요.

설정 단계

  1. 활성화된 NiloToonAllInOne Renderer Feature에서 AllowRenderScreenSpaceOutline을 활성화해 주세요.

    Renderer Feature에서 Screen Space Outline 허용 설정

  2. 캐릭터 Material에서 Screen Space Outline 섹션을 활성화해 주세요. 환경 Material의 경우 이 단계를 건너뛸 수 있어요.

    Material에서 Screen Space Outline 활성화

  3. Scene의 Volume Component에 NiloToonScreenSpaceOutlineControlVolume을 추가하고, Intensity를 활성화한 후 1로 설정해 주세요.

    Screen Space Outline Control Volume 설정

  4. 이제 Game View 창에서 NiloToon의 캐릭터와 환경 Material에 Screen Space Outline이 적용된 것을 확인할 수 있어요.

Scene View에서 깜빡임 현상

Screen Space Outline이 Scene 창에서 깜빡이는 것은 알려진 버그예요. 마우스를 움직일 때 GUI 업데이트가 트리거되어 발생해요. 다음 설정을 비활성화하면 해결할 수 있어요.

Allow Render Screen Space Outline in Scene View를 비활성화해 주세요.

Scene View Outline 비활성화 설정

Game Window 크기 및 RenderScale 영향

Screen Space Outline이 Game Window 크기나 RenderScale에 영향을 받는 것은 Screen Space Outline 방식의 알려진 제한 사항이에요.


Classic Outline

Outline과 Surface Type

Opaque Material의 경우 Surface Type을 Opaque/Outline 또는 Opaque(Alpha)/Outline으로 설정해 주세요.

Opaque Outline 설정

Transparent Material의 경우 Surface Type을 Transparent(ZWrite)/Outline으로 설정해 주세요.

Transparent Outline 설정

이렇게 설정하면 Opaque와 Transparent Outline이 함께 동작해요.

Outline 결합 결과

Outline 재생성 (리임포트/플랫폼 전환 시)

Outline이 사라진 경우 캐릭터의 NiloToonPerCharacterRenderController 스크립트를 클릭하여 리베이크를 트리거할 수 있어요.

Outline 리베이크 트리거

또는 Window > NiloToonURP > Model label > Re-fix whole project! 를 클릭하여 프로젝트의 모든 캐릭터 Prefab을 리베이크할 수 있어요(매우 느려요). 빌드 머신에서 게임을 한 번도 플레이하지 않은 경우, 빌드 전에 이 버튼을 클릭하면 "빌드에서 Outline이 사라지는" 문제를 해결할 수 있어요.

프로젝트 전체 리베이크

Debug UV8 (Smoothed Normal)

NiloToon의 Debug Window에서 UV8을 색상으로 디버그했을 때, 캐릭터 렌더링이 연한 파란색과 보라색(UV처럼 빨간색, 노란색, 초록색이 아닌 Normal Map 같은 색상)으로 표시되면, .fbx의 Smoothed Normal이 Mesh의 UV8에 올바르게 생성 및 저장된 거예요. 캐릭터 Material의 Classic Outline 그룹에서 HQ Continuous Outline이 정상적으로 동작해요.

UV8 디버그 결과 1

UV8 디버그 결과 2

UV8 디버그 결과 3 - 올바른 Normal Map 색상


Outline 너비 World Space 고정

Outline 너비 비교 1

Outline 너비 비교 2

Outline이 World Space에서 너비가 변하지 않도록 하려면, Volume에서 NiloToonCharRenderingControlVolume > Char Outline Width Auto Adjust To Camera Distance And FOV 값을 1에서 0으로 변경해 주세요.

Material에서도 Auto Width 설정으로 제어할 수 있어요. 0으로 설정하면 Outline이 World Space에서 고정돼요.

Material Auto Width 설정


Outline Z-Fighting (모바일 빌드)

모바일/WebGL, 특히 OpenGLES 환경에서 Outline Z-Fighting 문제가 발생할 경우 다음을 시도해 보세요.

해결 방법

  • Camera의 Far Plane을 가능한 한 낮춰 주세요 (예: 1000 → 100)
  • Camera의 Near Plane을 가능한 한 높여 주세요 (예: 0.03 → 1)

이렇게 하면 Outline Z-Fighting 문제가 해결될 수 있어요.


얼굴 Outline 개선

얼굴 Material에서 Is Face?를 활성화하면, 더 강한 기본 Outline ZOffset인 _OutlineZOffsetForFaceArea(0.02)가 적용돼요. 이것은 눈과 입 주변의 보기 좋지 않은 Outline을 대부분 제거하지만, 얼굴 형태의 Outline도 함께 제거할 수 있어요.

얼굴 Outline ZOffset 적용 결과

해결 방법 A

_OutlineZOffsetForFaceArea를 낮추면 눈과 입 주변에 보기 좋지 않은 Outline이 다시 나타날 수 있으므로, OutlineWidth Map이나 Vertex Color를 사용하여 수정해야 해요.

해결 방법 A 결과

해결 방법 B

_OutlineZOffsetForFaceArea를 충분히 높게 유지한 채, _UseOutlineZOffsetTex를 활성화하고 _OutlineZOffsetMask를 그려서 _OutlineZOffsetForFaceArea가 보기 좋지 않은 Outline 영역(눈/입)에만 적용되고 얼굴 형태 영역에는 적용되지 않도록 해 주세요.

해결 방법 B 결과


MagicaCloth와 Outline 문제

MagicaCloth/MagicaCloth2에서 Outline이 깨지는 경우, Update Normal And Tangent Per Frame을 활성화해야 해요.

MagicaCloth의 기본 Normal And Tangent Update ModeUpdate Normal Per Frame으로, Tangent가 업데이트되지 않아요. 하지만 NiloToon은 Shader에서 Outline 계산에 Tangent 데이터를 사용하므로, Update Normal And Tangent Per Frame으로 설정을 변경해야 해요.

잘못된 설정

잘못된 MagicaCloth 설정 1 잘못된 MagicaCloth 설정 2 - Outline 깨짐

올바른 설정

올바른 MagicaCloth 설정 1 올바른 MagicaCloth 설정 2 - 정상 Outline

MagicaCloth2의 경우 다음 위치에서 설정해 주세요.

MagicaCloth2 설정 위치

원인

Cloth 시뮬레이션 Mesh에 Tangent가 복제되지 않아 발생하는 문제예요. NiloToon의 Classic Outline은 Tangent를 필요로 해요. SkinnedMeshMagicaCloth와 NiloToon을 함께 사용할 때는 항상 Update Normal And Tangent Per Frame이 필요해요.