자주 묻는 질문 (FAQ)¶
NiloToon 사용 중 발생할 수 있는 문제와 해결 방법을 카테고리별로 정리했어요.
렌더링 문제¶
얼굴 2D 그림자가 보이지 않아요
모든 URP 3D Renderer를 선택해요 (Project Window에서 t:UniversalRendererData로 검색). Depth Priming Mode를 Disabled로 설정해 주세요. 이 설정이 활성화되어 있으면 NiloToon_Character shader를 사용하는 face 머티리얼이 얼굴에 2D 그림자를 렌더링할 수 없어요.

Shadow Color에 색조 아티팩트가 발생해요
이 문제는 Base Map의 채도가 낮을 때(흰색/회색 계열) 발생해요. 텍스처에서 hue가 잘 정의되지 않고, NiloToon shader가 그림자 영역에 채도 부스트를 적용하면 무작위 hue가 더 눈에 띄게 돼요.
해결 방법:
- 색상 텍스처(Base Map)를 선택하고 고품질 압축 또는 None 압축을 사용해요
- NiloToon 머티리얼의 Shadow Color 섹션에서 Saturation Boost를 낮춰요 (기본값 0.2가 너무 높을 수 있음)
- (비권장) Low Saturation Fallback Color를 설정해요
- 문제가 계속되면, Shadow Color Style 섹션에서:
- HueOffset = 0
- SaturationBoost = 0
- Value Multiply = 1
- Low Saturation Fallback Color의 alpha = 0
Planar Reflection에서 모델 일부가 사라집니다
NiloToon shader를 planar reflection 카메라에서 렌더링할 때 모델 일부가 사라지는 경우:
PIDI : Planar Reflections 6을 사용하는 경우, NiloToon이 지원하므로 문제가 발생하지 않을 가능성이 높아요.
NiloToon은 카메라 이름에 Planar, Reflection, Mirror 키워드가 포함되면 자동으로 문제를 해결해요.
자동 해결이 실패한 경우, reflection 카메라 스크립트의 RenderSingleCamera 호출 전후에 다음 코드를 추가해 주세요:
NiloToon.NiloToonURP.NiloToonPlanarReflectionHelper.BeginPlanarReflectionCameraRender();
UniversalRenderPipeline.RenderSingleCamera(context, reflectionCamera);
NiloToon.NiloToonURP.NiloToonPlanarReflectionHelper.EndPlanarReflectionCameraRender();
PIDI : Planar Reflections 6 사용 시 설정:
- Reflection Depth = Disabled (Unity Editor 재시작 후에도 RenderGraph 에러가 발생하는 경우에만)
- PostFX Support = Disabled (대부분 Disabled가 더 나은 결과)
Debug UV8 (smoothed normal) 확인 방법
NiloToon의 Debug Window에서 UV8을 색상으로 디버그할 때, 캐릭터가 연한 파란색과 보라색(노말맵 같은 색상)으로 렌더링되면 .fbx의 smoothed normal이 mesh의 UV8에 올바르게 생성/저장된 것이에요. 캐릭터 머티리얼의 Classic Outline 그룹에서 HQ continuous outline이 올바르게 작동해요.

SSAO에 의해 캐릭터가 어두워집니다

SSAO의 After Opaque를 비활성화해 보세요. After Opaque가 활성화되면, SSAO가 Opaque 캐릭터 머티리얼 픽셀 위에 그려져 NPR(Non-photorealistic rendering) shader에서 어둡고 더러워 보이에요.
높은 채도의 캐릭터 Bloom을 만들고 싶습니다
NiloToon Bloom Volume에서 Saturation Boost를 높이면 흰색 bloom 대신 더 화려한 bloom을 얻을 수 있어요. 피부에 붉은 빛의 bloom을 만들기 위해 이 기능이 중요해요.
- NiloToonBloom을 활성화해요
- Character BaseColor Multiplier로 캐릭터 입력 밝기를 조절하여 additive bloom으로 인한 과도한 밝기를 상쇄해요
- Bloom의 Saturation Boost를 증가시켜 캐릭터 피부(보통 핑크~오렌지 hue)에서 흰색 대신 붉은 bloom 색상을 생성해요
카메라에서 캐릭터 alpha를 출력하려면 어떻게 해야 합니까?
게임 UI용 Render Texture, .png/.mov 출력, OBS 투명 오버레이 등에서 캐릭터의 alpha channel이 필요한 경우:
URP (Unity2022.3 이하) 카메라 설정:
- Post Processing을 비활성화해요
- HDR을 비활성화해요
- Environment > Background color의 alpha를 0으로 설정해요 (많은 사용자가 이 단계를 놓쳐요!)
Unity6
Unity6에서는 새로운 Alpha Preservation 옵션이 추가되어, post process를 비활성화하는 위 설정을 건너뛸 수 있어요.
어두운 환경에서 캐릭터를 밝게 하려면 어떻게 해야 합니까?
NiloToonCharRenderingControlVolume에서 조정해요:
- Char Indirect Light Multiplier 값을 높이에요
- Char Indirect Light Min Color를 더 밝은 간접광 색상으로 설정해요
또는 NiloToonShadowControlVolume에서 Average Shadow를 완전히 비활성화해요.
Spot/Point Light를 rim light로 사용하려면 어떻게 해야 합니까?
Volume에서 NiloCinematicRimLightVolume을 사용해 주세요. 이 볼륨은 모든 additional light(spot light / point light / additional directional light)를 NiloToonCharacter 머티리얼용 rim light로 전환하고, additional light의 최대 기여도를 해제하여 rim light가 매우 밝아질 수 있어요.
NiloToon의 bloom과 결합하면, 다양한 색상, 위치, 방향의 additional light를 사용하여 훌륭한 rim light 결과를 만들 수 있어요.
Render Texture의 alpha에 쓰기를 방지하려면 어떻게 해야 합니까?
Color Buffer 그룹에서 머티리얼의 Color Mask를 A가 없는 값으로 설정해요 (예: RGB).
아웃라인 문제¶
재임포트 또는 플랫폼 전환 시 아웃라인이 사라집니다
캐릭터의 NiloToonPerCharacterRenderController 스크립트를 클릭하여 rebake를 트리거해 보세요.
또는 Window > NiloToonURP > Model label > Re-fix whole project!을 클릭하여 프로젝트의 모든 캐릭터 prefab을 rebake해요 (매우 느림). 빌드 머신에서 게임을 한 번도 플레이하지 않은 경우, 빌드 전에 이 버튼을 클릭하면 "빌드에서 아웃라인이 사라짐" 문제를 해결할 수 있어요.
Screen Space Outline이 Scene Window에서 깜빡이에요
알려진 버그이에요. 마우스를 움직이면 GUI 업데이트가 트리거되어 Scene Window의 screen space outline이 깜빡이에요.
Allow Render Screen Space Outline in Scene View를 비활성화해 보세요.

Screen Space Outline이 Game Window 크기나 RenderScale에 영향을 받습니다
Screen space outline 방식의 알려진 제한사항이에요. 이 동작을 방지하는 방법을 찾고 있어요.
얼굴 아웃라인을 개선하려면 어떻게 해야 합니까?
Face 머티리얼에서 Is Face?를 활성화하면, 기본 outline ZOffset _OutlineZOffsetForFaceArea(0.02)가 적용되어 눈과 입 주변의 대부분의 못생긴 아웃라인을 제거해요. 하지만 얼굴 형태 아웃라인도 제거될 수 있어요.
솔루션 A: _OutlineZOffsetForFaceArea를 낮춰요. 눈과 입 주변의 못생긴 아웃라인이 다시 나타날 수 있으므로, OutlineWidth map 또는 vertex color로 수정해야 해요.
솔루션 B: _OutlineZOffsetForFaceArea를 충분히 높게 유지하고, _UseOutlineZOffsetTex를 활성화한 후, _OutlineZOffsetMask를 그려서 못생긴 아웃라인 영역(눈/입)에만 ZOffset을 적용해요.
투명 머티리얼에서 아웃라인이 작동하지 않아요
- Opaque 머티리얼: Surface Type = Opaque/Outline 또는 Opaque(Alpha)/Outline 사용
- Transparent 머티리얼: Surface Type = Transparent(ZWrite)/Outline 사용
이렇게 하면 아웃라인이 함께 작동해요.
MagicaCloth가 아웃라인을 깨뜨립니다
MagicaCloth/MagicaCloth2에서 Update Normal And Tangent Per Frame을 활성화해 주세요.
기본값인 Update Normal Per Frame에서는 tangent가 업데이트되지 않지만, NiloToon은 아웃라인 계산에 tangent 데이터를 사용하므로 잘못된 아웃라인이 발생해요.

Deformer 설정을 Update Normal And Tangent Per Frame으로 변경하면, Cloth 시뮬레이션과 NiloToon이 올바르게 함께 작동해요.

그림자 문제¶
단면 메시에서 Shadow Acne이 발생해요
NiloToonShadowCasterPass의 RenderFace를 Front/Both에서 Back으로 변경해 보세요.

위 방법으로 해결되지 않으면, 머티리얼별 shadow bias를 편집해 보세요.
얼굴과 바디 머티리얼 사이에 그림자 분리선이 보이에요
Face 머티리얼에 Is Face를 켜면, face와 body 머티리얼의 그림자가 다르게 처리되어 분리선이 보일 수 있어요.
해결 방법: body 머티리얼에서도 Is Face를 켜고, _UseFaceMaskMap도 활성화한 후, _FaceMaskMap을 그려서 목 위쪽 부분만 Is Face가 되도록 해요. 이렇게 하면 Is Face(목 위쪽)에서 not Is Face(목 아래쪽)로의 부드러운 그라디언트가 생겨 더 자연스러운 결과를 얻을 수 있어요.
빌드 & 호환성¶
Asset Bundle 빌드 후 shader variant가 누락돼요
빌드한 Asset Bundle에 NiloToonCharacter 머티리얼의 필수 shader variant가 포함되지 않으면, AssetBundle 로드 시 렌더링 결과가 잘못돼요.
권장 솔루션 - "Shader Variant Collection" 사용:
- Asset Bundle 빌드에 사용하는 프로젝트를 엽니다
- 빌드해야 하는 모든 캐릭터 prefab을 씬에 배치해요
- 게임 카메라가 모든 캐릭터를 볼 수 있는지 확인해요
- Play Mode에 한 번 진입해요
- ProjectSettings > Graphics > Shader Loading > Save to asset을 클릭해요
- 새로 저장된 Shader Variant Collection asset의 AssetBundle 태그를 NiloToonCharacter shader와 동일한 태그로 설정해요
- 모든 Asset Bundle을 다시 빌드해요
- 게임에서 새 AssetBundle을 로드하면 누락 variant 문제가 해결돼요
누락 variant 확인
Unity 2022.2 이상에서 Edit > Project Settings > Player > Other Settings > Strict shader variant matching을 활성화하면, 런타임에 누락된 shader variant 사용 시 핑크색 에러 shader를 표시해요.
VertExmotion을 지원하나요?
NiloToonCharacter_ExtendDefinesForExternalAsset.hlsl을 엽니다- 해당 에셋 지원 설정을 활성화해요 (0을 1로 변경)
지원 목록에 없는 에셋은 개발팀에 문의해 주세요!
Terrain이 Unity를 크래시시킵니다
RenderGraph 모드에서는 이 섹션을 무시할 수 있어요.
NiloToonAllInOneRendererFeature에서 Perfect Culling For Shadow Casters를 비활성화해 주세요. 비활성화하면 shadow caster가 화면에 보이지 않을 때 그림자 컬링이 제대로 동작하지 않을 수 있어요.
VLB SRP Batcher 버그
RenderGraph 모드에서는 이 섹션을 무시할 수 있어요.
NiloToon renderer feature의 High Quality Culling을 비활성화해 주세요. VLB의 SRP Batcher 모드와 충돌해요.
Parallel Import가 prefab을 손상시킵니다
NiloToonURP의 모델(fbx) 임포트는 단일 스레드를 필요로 해요 (아웃라인용 smoothed normal 계산을 위해 새 임시 .fbx 에셋을 생성하기 때문). Parallel Import가 에러를 발생시키거나 prefab 손상/누락을 초래하면 Parallel Import를 꺼 주세요:
Project > Editor > Asset Pipeline > Parallel Import = off

비활성화 후, 손상된 prefab을 수정하려면 fbx를 수동으로 reimport 해야 해요.
성능 & 최적화¶
GPU Timeout으로 Unity가 크래시돼요
lilToon 같은 큰 shader를 컴파일하거나, Recorder로 큰 이미지/영상을 렌더링할 때 GPU가 timeout으로 크래시/재시작될 수 있어요 (기본값은 2초).
레지스트리 값을 편집하여 해결해요:
경고
레지스트리를 잘못 편집하면 심각한 결과를 초래할 수 있어요. Windows 업데이트나 GPU 드라이버 업데이트로 이 값이 리셋될 수 있어요.
- Win + R을 누르고 regedit를 입력해요
- GraphicsDrivers 폴더로 이동해요:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers - TdrDelay 값을 추가하거나 편집해요 (기본 2초 -> 60초(Decimal))
- TdrDdiDelay 값을 추가하거나 편집해요 (기본 5초 -> 60초(Decimal))
| Name | Type | Data |
|---|---|---|
| TdrDelay | REG_DWORD | 0x0000003c (60) |
| TdrDdiDelay | REG_DWORD | 0x0000003c (60) |
- 재시작하면 60초 이상의 프레임이 아닌 한 GPU 크래시가 발생하지 않아요
되돌리려면: TdrDelay를 2초, TdrDdiDelay를 5초로 설정하거나, 레지스트리에서 해당 키를 삭제해요.
머티리얼별 Pass를 비활성화할 수 있습니까?
머티리얼의 Pass On/Off 섹션에서 다음을 머티리얼별로 제어할 수 있어요:
- URP shadow 캐스팅 여부
- NiloToon shadow 캐스팅 여부
- Extra thick outline 렌더링 여부
- Depth texture에 그리기 여부
머티리얼 & 텍스처¶
머티리얼 A에서 B로 속성을 복사하려면 어떻게 해야 합니까? (텍스처 제외)
NiloToonCharacter 머티리얼의 toolbar를 사용하여 복사된 값의 일부를 붙여넣을 수 있어요.
- 머티리얼을 복사해요
- 대상 머티리얼에서 우클릭하여 텍스처를 제외한 모든 옵션을 붙여넣어요
특정 그룹만 복사/붙여넣기하려면, 해당 그룹을 우클릭하여 복사 및 붙여넣기해요 (이 경우 텍스처도 포함돼요).
Play Mode에서 머티리얼 편집을 유지하려면 어떻게 해야 합니까?
솔루션 A: Play Mode에서 머티리얼을 복사하고 종료 후 Project Window의 머티리얼 에셋에 붙여넣기해요.
솔루션 B (권장): Play Mode 진입 전에 Keep PlayMode mat edit?를 활성화해요. 활성화하면 Play Mode에서 머티리얼이 material instance가 되지 않아, 변경 사항이 Play Mode 종료 후에도 유지돼요. 다만 SRP batching이 작동하지 않아 CPU 렌더링 비용이 높아져요.
VRM 머티리얼이 MToon으로 리셋돼요
Library 폴더 삭제, Reimport All, 또는 .unitypackage로 새 프로젝트에 내보내기 후 모든 VRM 머티리얼이 MToon 원본으로 리셋되는 경우:
솔루션 A (권장): Non-destructive workflow를 사용해요. Windows > NiloToon > Create prefab variant and materials를 클릭해요. 이 방법은 머티리얼을 복제하고, NiloToon으로 변경하고, prefab variant를 생성하여, UniVRM이 원본 머티리얼을 어떻게 수정하든 prefab variant에 영향을 미치지 않아요.
솔루션 B: UniVRM 1.0으로 업그레이드해요. .vrm 파일을 .fbx처럼 사용할 수 있어요.
솔루션 C: .vrm 확장자를 다른 것으로 변경해요 (예: character.vrmDisabled).
머티리얼 UI에서 검색/필터 기능이 있습니까?
NiloToonCharacter 머티리얼의 검색 바에서 찾고 있는 그룹이나 속성을 입력하면 (예: ShadowColor, Outline, rim light, specular), 해당하는 그룹/속성만 필터링하여 표시해요.
- Group 검색 모드: 그룹 검색
- Property 검색 모드: 속성 검색
- 기본적으로 그룹을 먼저 검색하고, 일치하는 항목이 없으면 속성을 검색해요
모델에 Tangent가 없다는 에러가 발생해요
콘솔에 다음과 같은 빨간 에러가 표시되는 경우:
[Error] NiloToon can't bake smooth normal, because _____ don't have tangents...
모델 메시에 normal 또는 tangent가 없기 때문이에요.
해결 방법: .fbx를 클릭하고 Tangents = Calculate Mikktspace 또는 다른 calculate 옵션으로 설정해요.
임포트 시 임시 .fbx 파일이 생성돼요
NiloToonEditor_AssetLabelAssetPostProcessor.cs에 의해 생성되는 임시 .fbx 파일이에요. 언제든지 안전하게 삭제할 수 있어요. NiloToon은 보통 임포트 직후 정리하므로, Unity가 정리 전에 크래시되지 않는 한 버전 관리에서 이 파일을 보지 않을 것이에요.
Light Probe & 조명¶
Light Probe를 무시하려면 어떻게 해야 합니까?
NiloToonCharRenderingControlVolume에서:
- Intensity = 0
- Min = black
- Max = black
이렇게 하면 NiloToon 캐릭터가 light probe의 영향을 받지 않아요.
런타임¶
런타임에 캐릭터 렌더러를 전환하려면 어떻게 해야 합니까? (머리카락, 옷 교체)
새 렌더러가 NiloToonPerCharacterRenderController의 AllRenderers 리스트에 포함되지 않은 경우:
렌더러 전환 후, NiloToonPerCharacterRenderController의 allRenderers count를 0으로 설정해 주세요. 이렇게 하면 스크립트가 자동으로 모든 최신 렌더러를 다시 찾아요.
NiloToonPerCharacterRenderController의 AllRenderers 리스트를 자동 업데이트하려면?
세 가지 방법이 있어요:
(방법 A): "Auto setup this character" 버튼을 클릭해요. 자동 업데이트가 한 번 트리거돼요.
(방법 B): "Auto refill AllRenderers list" 버튼을 클릭해요.
(방법 C): All Renderers list의 count를 0으로 설정해요. 자동으로 모든 렌더러를 다시 찾아요.
기타¶
Windows에서 파일 경로가 너무 깁니다 (260자 제한)
Windows Long Path 활성화¶
- Win + R을 누르고 regedit를 입력해요
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem으로 이동해요- LongPathsEnabled 값을 찾거나 생성해요 (DWORD 32-bit)
- 값을 1로 설정해요
- 시스템을 재시작해요
주의
레지스트리 편집에는 관리자 권한이 필요해요. Windows 업데이트로 이 키가 리셋될 수 있어요.
Git Long Path 활성화¶
GitBash에서 다음을 입력해요:
위 방법이 모두 실패하면¶
Unity 프로젝트를 더 짧은 경로에 배치해요:
C:\MyUnityProjectName(권장)- ~~
C:\Users\YourName\Documents\Projects\Unity\Year2024\MyVeryLongProjectNameRootFolder\MyVeryLongProjectName~~ (비권장)
자동 입 모양 AIUEO 애니메이션을 만들려면 어떻게 해야 합니까?
MV 영상 제작 시 오디오를 입력으로 사용하여 캐릭터의 입 모양 애니메이션을 생성할 수 있어요:
- AI를 사용하여 "보컬 전용" mp3를 추출해요:
- uLipSync를 사용하여 "보컬 전용" 오디오를 uLipSync의 입 모양 데이터로 bake해요
- uLipSync의 MonoBehaviour 및 Timeline track을 사용하여 MV/컷씬/대화에서 입 모양 애니메이션을 재생해요