UnityEQ Pivot Painter Lab
Troubleshooting
Symptom first. Each entry gives the likely cause and the fix.
Start here
Section titled “Start here”Run Bake Doctor. It runs the same checks as the hard pre-bake gate, reports offender counts, and lets you click straight to the elements at fault. Most of what follows is faster to diagnose there than by eye.
Read the bake report. Every bake writes a JSON report under
Assets/EQPivotPainterLab_Generated/Reports. It records element counts, level
distribution, triangle coverage, warnings and which solver path ran.
The bake refuses to run
Section titled “The bake refuses to run”The gate refuses rather than writing data that would produce broken motion. Each refusal names the offending elements.
| Message | Cause | Fix |
|---|---|---|
| Triangles owned by more than one element | Detection assigned the same triangle twice | Re-detect; if it persists, change detection mode |
| Coverage below 98% | Some triangles belong to no element | Re-detect, or use Split By Island on the leftovers |
| Hierarchy cycle | An element is its own ancestor, usually after manual re-parenting | Select the named elements and Clear Overrides, then re-solve |
| Self-parenting | An element was parented to itself | Same as above |
| Chain deeper than the shader replays | Manual re-parenting built a chain longer than 3 hops | Re-parent the named element closer to the root |
| More than 30,000 elements | The mesh partitioned into too many pieces | Use a coarser detection mode, or raise the minimum element size |
This is deliberate. A refused bake is the tool declining to produce a subtly broken result. Do not work around it by relaxing settings until it passes — fix what it named.
Motion problems
Section titled “Motion problems”The whole tree moves as one rigid piece
Section titled “The whole tree moves as one rigid piece”Detection produced a single element. Check the element list — if it shows 1, detection did not split anything. Try a different detection mode; for a dense one-mesh tree use Skeleton First (RGS-PA).
Motion is uniform and mushy, with no sense of branches
Section titled “Motion is uniform and mushy, with no sense of branches”Most elements landed on the same hierarchy level, so they all share one wind tier. Check the level distribution in the report. On dense disconnected foliage the spatial scaffold should produce a spread across levels — if nearly everything is on the deepest level, re-detect with Skeleton First.
Leaves swim, stretch, or pivot from thin air
Section titled “Leaves swim, stretch, or pivot from thin air”A pivot is sitting off the geometry. Select the element and use Pivot Parent Edge so it pivots from where it attaches rather than its centre. Pivot Base and Pivot Center cover the other common cases.
One branch whips much harder than its neighbours
Section titled “One branch whips much harder than its neighbours”Its extent — the physical swing arm — is longer than it should be, usually because the forward axis points oddly. Select it and set Axis X/Y/Z to the sensible direction, or set an explicit Extent override.
Moss, bark or a fixed attachment flutters
Section titled “Moss, bark or a fixed attachment flutters”It should be static. Select it and click Static. Static elements follow their parent’s motion but add none of their own. Use Freeze To Active to pin it to a specific support element.
Painted wind buckets or manual fixes disappear after a re-bake
Section titled “Painted wind buckets or manual fixes disappear after a re-bake”Auto Detect On Bake is re-running detection and discarding manual state. Turn it off in the preset once you start hand-authoring. Locked parents and locked buckets survive regardless.
A whole forest moves in perfect unison
Section titled “A whole forest moves in perfect unison”Add per-renderer wind variation so each instance gets its own phase and strength offset. Without it, identical materials animate identically.
Appearance problems
Section titled “Appearance problems”Materials are pink / magenta
Section titled “Materials are pink / magenta”Magenta means no valid shader. In order of likelihood:
- Wrong pipeline shader. Check that the material uses the hero shader matching your active pipeline. The Built-In, URP and HDRP variants are separate shaders.
- Shader compile error. Select the shader asset and read the inspector.
- Stripped in a build but fine in the editor. The editor compiles variants on demand and cannot reproduce this by construction. Check shader stripping in Graphics settings, and in URP the stripping toggles on the URP asset.
Normal maps have no visible effect
Section titled “Normal maps have no visible effect”The mesh needs tangents. Check the model importer has Calculate Tangents (or
imported tangents) enabled. Also confirm Normal Scale is not 0.
The packed mask map reads wrong — AO in the wrong channel, odd roughness
Section titled “The packed mask map reads wrong — AO in the wrong channel, odd roughness”Set Packed Mask Layout to match your texture: Unity MaskMap, ORM, ORT, or AO/Rough/Height. The tool does not guess destructively; it reads the channels you tell it to. Use the ORM packer if you have separate AO/Roughness/Metallic maps.
Textures were auto-assigned to the wrong slots
Section titled “Textures were auto-assigned to the wrong slots”The resolver classifies by filename token. Open the per-slot review panel and
override any slot it got wrong. Renaming your source textures to conventional
suffixes (_D, _N, _ORM) makes it right first time.
Foliage does not receive ambient occlusion in URP
Section titled “Foliage does not receive ambient occlusion in URP”SSAO must be in Depth Normals mode to use the DepthNormals pass. Confirm in
the Frame Debugger that foliage appears in _CameraNormalsTexture.
HDRP foliage ignores my point lights and spotlights
Section titled “HDRP foliage ignores my point lights and spotlights”Expected and documented. The HDRP hero shader is lit by the main directional
light plus spherical-harmonics environment; additional punctual and area lights
do not reach it. For a richer rig, wrap EQPivotPainterDeformFoliage in a Shader
Graph and shade with HDRP’s Lit master node.
Motion looks smeared in HDRP with TAA
Section titled “Motion looks smeared in HDRP with TAA”The HDRP hero shader writes zero motion vectors, so wind motion is not represented to TAA. Whole-object movement is unaffected. Documented limitation.
Source vertex colours are gone on the baked mesh
Section titled “Source vertex colours are gone on the baked mesh”Baked meshes use vertex colour alpha to carry the per-element material family, so source vertex colours are not preserved. Documented limitation.
Workflow problems
Section titled “Workflow problems”The tool baked into the wrong folder
Section titled “The tool baked into the wrong folder”Output goes to Assets/EQPivotPainterLab_Generated by default — next to the tool
folder, not inside it, so reinstalling an update cannot delete your bakes.
Projects that already baked into the older in-folder location keep using it.
Re-baking produced different files
Section titled “Re-baking produced different files”It should not. Bakes are deterministic: the same input mesh and settings produce byte-identical textures and UVs. If output changed, something in the asset, preset or source mesh changed. Compare the two JSON reports.
Two elements share vertices and detection keeps merging them
Section titled “Two elements share vertices and detection keeps merging them”That is welded geometry — they genuinely share vertices. Use SmartCut to split on sharp creases, or Split By Submesh if materials separate them.
SmartCut is not splitting a sharp edge
Section titled “SmartCut is not splitting a sharp edge”Very small pieces are folded back into their neighbour to avoid confetti. If each side of the crease is only a triangle or two, that is the fold-back working as intended. Lower the minimum element size, or check the crease angle is actually below the SmartCut angle.
The impostor card looks wrong at distance
Section titled “The impostor card looks wrong at distance”Re-capture the impostor after any change to the source mesh or materials — the atlas is a snapshot. Check the LODGroup transition distances.
A model imported at a different scale solves differently
Section titled “A model imported at a different scale solves differently”It should not — detection and repair thresholds derive from the mesh diagonal, so 0.01×, 1× and 100× partition identically. If you see a difference, check that the importer scale factor is applied rather than a scaled parent transform.
Getting help
Section titled “Getting help”Include with any support request:
- The tool version (see
Release_Notes.mdandpackage.json) - Your Unity version and render pipeline
- The JSON bake report for the asset
- The Bake Doctor verdict
Those four make almost every issue diagnosable without a repro project.
Opens our feedback form in a new tab with the tool name pre-filled.