Frequently Asked Questions (FAQ)¶
Common issues and solutions organized by category for NiloToon users.
Rendering Issues¶
Face 2D shadow is not visible
Select all URP 3D Renderers (search for t:UniversalRendererData in the Project Window). Set Depth Priming Mode to Disabled. When this setting is enabled, face materials using the NiloToon_Character shader cannot render 2D shadows on the face.

Shadow Color has hue artifacts
This issue occurs when the Base Map has low saturation (white/gray tones). The hue is not well-defined in the texture, and when NiloToon shader applies saturation boost to shadow areas, random hues become more visible.
Solutions:
- Select the color texture (Base Map) and use high quality compression or None compression
- Lower the Saturation Boost in the NiloToon material's Shadow Color section (the default 0.2 may be too high)
- (Not recommended) Set a Low Saturation Fallback Color
- If the issue persists, in the Shadow Color Style section:
- HueOffset = 0
- SaturationBoost = 0
- Value Multiply = 1
- Low Saturation Fallback Color alpha = 0
Parts of the model disappear in Planar Reflection
When rendering NiloToon shaders with a planar reflection camera, parts of the model may disappear.
If using PIDI : Planar Reflections 6, NiloToon supports it, so the issue is unlikely to occur.
NiloToon automatically resolves the issue when the camera name contains the keywords Planar, Reflection, or Mirror.
If automatic resolution fails, add the following code before and after the RenderSingleCamera call in the reflection camera script:
NiloToon.NiloToonURP.NiloToonPlanarReflectionHelper.BeginPlanarReflectionCameraRender();
UniversalRenderPipeline.RenderSingleCamera(context, reflectionCamera);
NiloToon.NiloToonURP.NiloToonPlanarReflectionHelper.EndPlanarReflectionCameraRender();
When using PIDI : Planar Reflections 6:
- Reflection Depth = Disabled (only if RenderGraph errors persist after restarting Unity Editor)
- PostFX Support = Disabled (Disabled usually produces better results)
How to verify Debug UV8 (smoothed normal)
When debugging UV8 as color in NiloToon's Debug Window, if the character renders in light blue and purple colors (similar to a normal map), the smoothed normals have been correctly generated/stored in the mesh's UV8. The HQ continuous outline in the Classic Outline group of the character material will work correctly.

SSAO darkens the character

Try disabling SSAO's After Opaque. When After Opaque is enabled, SSAO draws over opaque character material pixels, making them look dark and dirty in NPR (Non-photorealistic rendering) shaders.
How to create high-saturation character Bloom
Increase Saturation Boost in NiloToon Bloom Volume to get more vivid bloom instead of white bloom. This is important for creating reddish bloom on skin.
- Enable NiloToonBloom
- Adjust Character BaseColor Multiplier to offset excessive brightness from additive bloom
- Increase Bloom's Saturation Boost to produce reddish bloom colors on character skin (typically pink~orange hue) instead of white
How to output character alpha from camera
When you need the character's alpha channel for game UI Render Textures, .png/.mov output, OBS transparent overlays, etc.:
URP (Unity2022.3 and earlier) camera settings:
- Disable Post Processing
- Disable HDR
- Set Environment > Background color alpha to 0 (many users miss this step!)
Unity6
Unity6 introduces a new Alpha Preservation option, allowing you to skip the above post-process disabling settings.
How to brighten characters in dark environments
Adjust in NiloToonCharRenderingControlVolume:
- Increase Char Indirect Light Multiplier value
- Set Char Indirect Light Min Color to a brighter indirect light color
Or completely disable Average Shadow in NiloToonShadowControlVolume.
How to use Spot/Point Light as rim light
Use NiloCinematicRimLightVolume in Volume. This volume converts all additional lights (spot light / point light / additional directional light) into rim lights for NiloToonCharacter materials, and unlocks the maximum contribution of additional lights so rim lights can become very bright.
Combined with NiloToon's bloom, you can create excellent rim light results using additional lights of various colors, positions, and directions.
How to prevent writing to Render Texture alpha
In the Color Buffer group, set the material's Color Mask to a value without A (e.g., RGB).
Outline Issues¶
Outlines disappear after reimport or platform switch
Click the character's NiloToonPerCharacterRenderController script to trigger a rebake.
Or click Window > NiloToonURP > Model label > Re-fix whole project! to rebake all character prefabs in the project (very slow). If the game has never been played on the build machine, clicking this button before building can fix the "outlines disappear in build" issue.
Screen Space Outline flickers in Scene Window
This is a known bug. Mouse movement triggers GUI updates, causing screen space outlines to flicker in the Scene Window.
Try disabling Allow Render Screen Space Outline in Scene View.

Screen Space Outline is affected by Game Window size or RenderScale
This is a known limitation of the screen space outline method. We are looking for ways to prevent this behavior.
How to improve face outline
Enable Is Face? on the face material. This applies the default outline ZOffset _OutlineZOffsetForFaceArea (0.02), which removes most ugly outlines around eyes and mouth. However, it may also remove the face shape outline.
Solution A: Lower _OutlineZOffsetForFaceArea. Ugly outlines around eyes and mouth may reappear, requiring correction with OutlineWidth map or vertex color.
Solution B: Keep _OutlineZOffsetForFaceArea high enough, enable _UseOutlineZOffsetTex, and paint _OutlineZOffsetMask to apply ZOffset only to ugly outline areas (eyes/mouth).
Outlines don't work on transparent materials
- Opaque materials: Use Surface Type = Opaque/Outline or Opaque(Alpha)/Outline
- Transparent materials: Use Surface Type = Transparent(ZWrite)/Outline
This enables outlines to work together.
MagicaCloth breaks outlines
Enable Update Normal And Tangent Per Frame in MagicaCloth/MagicaCloth2.
The default Update Normal Per Frame does not update tangents, but NiloToon uses tangent data for outline calculations, resulting in incorrect outlines.

Changing the Deformer setting to Update Normal And Tangent Per Frame makes Cloth simulation and NiloToon work correctly together.

Shadow Issues¶
Shadow Acne on single-sided meshes
Try changing NiloToonShadowCasterPass's RenderFace from Front/Both to Back.

If this doesn't resolve it, try editing the per-material shadow bias.
Visible shadow separation line between face and body materials
Enabling Is Face on the face material causes face and body material shadows to be processed differently, creating a visible separation line.
Solution: Enable Is Face on the body material as well, also enable _UseFaceMaskMap, and paint a _FaceMaskMap so that only the area above the neck is treated as Is Face. This creates a smooth gradient from Is Face (above neck) to not Is Face (below neck), producing a more natural result.
Build & Compatibility¶
Missing shader variants after Asset Bundle build
If the built Asset Bundle doesn't include required shader variants for NiloToonCharacter materials, rendering results will be incorrect when loading the AssetBundle.
Recommended Solution - Use "Shader Variant Collection":
- Open the project used for Asset Bundle builds
- Place all character prefabs that need to be built into the scene
- Ensure the game camera can see all characters
- Enter Play Mode once
- Click ProjectSettings > Graphics > Shader Loading > Save to asset
- Set the AssetBundle tag of the newly saved Shader Variant Collection asset to the same tag as the NiloToonCharacter shader
- Rebuild all Asset Bundles
- Loading the new AssetBundle in the game will resolve the missing variant issue
Checking Missing Variants
In Unity 2022.2+, enable Edit > Project Settings > Player > Other Settings > Strict shader variant matching to display a pink error shader at runtime when a missing shader variant is used.
Does NiloToon support VertExmotion?
- Open
NiloToonCharacter_ExtendDefinesForExternalAsset.hlsl - Enable the asset support setting (change 0 to 1)
For assets not on the support list, contact the development team!
Terrain crashes Unity
You can ignore this section in RenderGraph mode.
Disable Perfect Culling For Shadow Casters in NiloToonAllInOneRendererFeature. When disabled, shadow caster culling may not always be correct when shadow casters are off-screen.
VLB SRP Batcher bug
You can ignore this section in RenderGraph mode.
Disable High Quality Culling in NiloToon renderer feature. It conflicts with VLB's SRP Batcher mode.
Parallel Import corrupts prefabs
NiloToonURP's model (fbx) import requires single-threaded processing (because smoothed normal calculation for outlines creates new temporary .fbx assets). If Parallel Import causes errors or prefab corruption/loss, turn off Parallel Import:
Project > Editor > Asset Pipeline > Parallel Import = off

After disabling, you must manually reimport the fbx to fix corrupted prefabs.
Performance & Optimization¶
Unity crashes due to GPU Timeout
When compiling large shaders like lilToon, or rendering large images/videos with Recorder, the GPU may crash/restart due to timeout (default is 2 seconds).
Resolve by editing registry values:
Warning
Editing the registry incorrectly can cause serious issues. Windows updates or GPU driver updates may reset these values.
- Press Win + R and type regedit
- Navigate to the GraphicsDrivers folder:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers - Add or edit the TdrDelay value (default 2 seconds -> 60 seconds (Decimal))
- Add or edit the TdrDdiDelay value (default 5 seconds -> 60 seconds (Decimal))
| Name | Type | Data |
|---|---|---|
| TdrDelay | REG_DWORD | 0x0000003c (60) |
| TdrDdiDelay | REG_DWORD | 0x0000003c (60) |
- After restart, GPU crashes will not occur unless a single frame takes more than 60 seconds
To revert: Set TdrDelay to 2 seconds and TdrDdiDelay to 5 seconds, or delete the keys from the registry.
Can I disable per-material Passes?
In the material's Pass On/Off section, you can control per-material:
- Whether to cast URP shadows
- Whether to cast NiloToon shadows
- Whether to render extra thick outlines
- Whether to write to the depth texture
Material & Texture¶
How to copy properties from Material A to B (excluding textures)
Use the NiloToonCharacter material toolbar to paste a subset of copied values.
- Copy the material
- Right-click on the target material to paste all options excluding textures
To copy/paste specific groups only, right-click the group to copy and paste (this includes textures).
How to keep material edits from Play Mode
Solution A: Copy the material during Play Mode and paste it onto the material asset in the Project Window after exiting.
Solution B (Recommended): Enable Keep PlayMode mat edit? before entering Play Mode. When enabled, materials do not become material instances in Play Mode, so changes persist after exiting. However, SRP batching will not work, increasing CPU rendering cost.
VRM materials reset to MToon
After deleting the Library folder, Reimport All, or exporting to a new project via .unitypackage, all VRM materials reset to their original MToon:
Solution A (Recommended): Use the non-destructive workflow. Click Windows > NiloToon > Create prefab variant and materials. This method duplicates materials, changes them to NiloToon, and creates a prefab variant, so UniVRM's modifications to original materials don't affect the prefab variant.
Solution B: Upgrade to UniVRM 1.0. You can use .vrm files like .fbx.
Solution C: Change the .vrm extension to something else (e.g., character.vrmDisabled).
Is there a search/filter feature in the material UI?
In the NiloToonCharacter material's search bar, type the group or property you're looking for (e.g., ShadowColor, Outline, rim light, specular), and only matching groups/properties will be displayed.
- Group search mode: searches groups
- Property search mode: searches properties
- By default, groups are searched first; if no match, properties are searched
Error saying model has no Tangents
If the console shows the following red error:
[Error] NiloToon can't bake smooth normal, because _____ don't have tangents...
This is because the model mesh has no normals or tangents.
Solution: Click the .fbx and set Tangents = Calculate Mikktspace or another calculate option.
Temporary .fbx files created during import
These are temporary .fbx files created by NiloToonEditor_AssetLabelAssetPostProcessor.cs. They can be safely deleted at any time. NiloToon usually cleans them up immediately after import, so you typically won't see them in version control unless Unity crashes before cleanup.
Light Probe & Lighting¶
How to ignore Light Probes
In NiloToonCharRenderingControlVolume:
- Intensity = 0
- Min = black
- Max = black
This prevents NiloToon characters from being affected by light probes.
Runtime¶
How to switch character renderers at runtime (hair, clothing swap)
If the new renderer is not included in NiloToonPerCharacterRenderController's AllRenderers list:
After switching renderers, set NiloToonPerCharacterRenderController's allRenderers count to 0. This causes the script to automatically find all current renderers again.
How to auto-update NiloToonPerCharacterRenderController's AllRenderers list
Three methods:
(Method A): Click the "Auto setup this character" button. Triggers a one-time auto-update.
(Method B): Click the "Auto refill AllRenderers list" button.
(Method C): Set All Renderers list count to 0. It automatically finds all renderers again.
Miscellaneous¶
File path is too long on Windows (260 character limit)
Enable Windows Long Path¶
- Press Win + R and type regedit
- Navigate to
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem - Find or create the LongPathsEnabled value (DWORD 32-bit)
- Set the value to 1
- Restart the system
Note
Editing the registry requires administrator privileges. Windows updates may reset this key.
Enable Git Long Path¶
In GitBash, enter:
If All Above Methods Fail¶
Place the Unity project at a shorter path:
C:\MyUnityProjectName(recommended)- ~~
C:\Users\YourName\Documents\Projects\Unity\Year2024\MyVeryLongProjectNameRootFolder\MyVeryLongProjectName~~ (not recommended)
How to create automatic mouth AIUEO animation
You can generate character mouth shape animations using audio as input for MV video production:
- Use AI to extract a "vocal only" mp3:
- Use uLipSync to bake the "vocal only" audio into uLipSync's mouth shape data
- Use uLipSync's MonoBehaviour and Timeline track to play mouth shape animations in MV/cutscene/dialogue