Skip to content

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.

Disable Depth Priming

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:

  1. Select the color texture (Base Map) and use high quality compression or None compression
  2. Lower the Saturation Boost in the NiloToon material's Shadow Color section (the default 0.2 may be too high)
  3. (Not recommended) Set a Low Saturation Fallback Color
  4. 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.

UV8 Debug Result

SSAO darkens the character

SSAO Issue

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.

  1. Enable NiloToonBloom
  2. Adjust Character BaseColor Multiplier to offset excessive brightness from additive bloom
  3. 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 Setting

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.

Incorrect MagicaCloth Setting

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

Correct MagicaCloth Setting


Shadow Issues

Shadow Acne on single-sided meshes

Try changing NiloToonShadowCasterPass's RenderFace from Front/Both to Back.

Shadow Acne Fix

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":

  1. Open the project used for Asset Bundle builds
  2. Place all character prefabs that need to be built into the scene
  3. Ensure the game camera can see all characters
  4. Enter Play Mode once
  5. Click ProjectSettings > Graphics > Shader Loading > Save to asset
  6. Set the AssetBundle tag of the newly saved Shader Variant Collection asset to the same tag as the NiloToonCharacter shader
  7. Rebuild all Asset Bundles
  8. 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?
  1. Open NiloToonCharacter_ExtendDefinesForExternalAsset.hlsl
  2. 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

Disable Parallel Import

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.

  1. Press Win + R and type regedit
  2. Navigate to the GraphicsDrivers folder: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers
  3. Add or edit the TdrDelay value (default 2 seconds -> 60 seconds (Decimal))
  4. 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)
  1. 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.

  1. Copy the material
  2. 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

  1. Press Win + R and type regedit
  2. Navigate to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
  3. Find or create the LongPathsEnabled value (DWORD 32-bit)
  4. Set the value to 1
  5. Restart the system

Note

Editing the registry requires administrator privileges. Windows updates may reset this key.

Enable Git Long Path

In GitBash, enter:

git config --global core.longpaths true

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:

  1. Use AI to extract a "vocal only" mp3:
  2. Use uLipSync to bake the "vocal only" audio into uLipSync's mouth shape data
  3. Use uLipSync's MonoBehaviour and Timeline track to play mouth shape animations in MV/cutscene/dialogue