Blendshape Synchronization
BlendshapeSynchronizer copies blendshape weights from the character body mesh to equipped item meshes at runtime.

Typical use case:
Body has
CDG_BODY_FULL.breast_smallerOutfit has
SUIT.breast_smallerChanging the body blendshape also updates the equipped outfit blendshape
Important: Configuration Ownership (Current Workflow)
Most blendshape matching behavior is now configured per equipment item in EquipmentManager.
BlendshapeSynchronizer is primarily the runtime sync engine.
Where to Configure What
BlendshapeSynchronizer component
Source body renderer and sync timing/runtime behavior
EquipmentManager -> Equipment Prefabs -> Blendshape Matching
Per-item enable/disable, match mode, threshold, and custom mappings
What It Solves
When equipment is equipped at runtime, those meshes are created dynamically. BlendshapeSynchronizer auto-registers runtime equipment renderers (through EquipmentManager) and keeps them in sync with the source body.
Requirements
BlendshapeSynchronizerandEquipmentManageron the same GameObjectBlendshapeSynchronizer.sourceRendererassigned to the character bodySkinnedMeshRenderertarget/equipment meshes contain compatible blendshape names (or explicit custom mappings)
One-Click Setup
Use: Tools/Character Creator/Character Creator Setup Wizard
The wizard configures:
BlendshapeSynchronizercomponentsourceRendererfrom your selected Source Body Mesh
EquipmentManager Per-Item Settings (Primary)
In each equipment entry (EquipmentManager -> Equipment Prefabs), use:
Enable Blendshape Syncexcludes this equipment from runtime sync when disabled
Blendshape Match ModeSmartMapping(default): exact first, fuzzy fallback

CustomMapped: explicit target->source mapping rows
Match Threshold(shown forSmartMapping)higher = stricter fuzzy matching
Custom Mappings+Auto-Populate Blendshape Mappings(shown forCustomMapped)

ExactandFuzzyremain in enum for backward compatibility but are hidden in the inspector dropdown.
BlendshapeSynchronizer Component Settings (Secondary)
On the BlendshapeSynchronizer component:
sourceRenderer(required)syncIntervalsyncOnRegisternoiseWords(global fuzzy token cleanup)debugMatching(verbose matching logs)
These are shared runtime settings, while actual matching strategy is item-specific in EquipmentManager.
Cross-Rig / Re-Skinned Behavior
For cross-rig baked assets, sync may be intentionally skipped unless explicitly configured:
Bake Re-Skinned Prefab (Experimental)setsEnable Blendshape Sync = falseon the updated equipment entry by default.

Runtime safety check also skips sync when all of these are true:
skipRuntimeRootAlignment = trueblendshapeMatchMode = SmartMappingno custom blendshape mappings
This prevents aggressive auto-matches from deforming cross-rig equipment.
If you want sync on a baked cross-rig item, enable sync explicitly and prefer CustomMapped with validated mappings.
Custom Mapping Workflow
When an equipment entry uses CustomMapped:
Expand that equipment entry in the
EquipmentManagerinspector.In
Blendshape Matching, add mapping rows:left: target/equipment blendshape
right: source/body blendshape
Use
Auto-Populate Blendshape Mappingsas a starting point.Manually validate and correct problematic rows.
Runtime Behavior
Sync runs every
syncInterval.On equip:
equipment renderers are registered automatically (if allowed by per-item settings/safety checks)
optional immediate push via
syncOnRegisterSyncNow()is triggered after equipment changes
On unequip:
equipment renderers are unregistered
This is event-driven via EquipmentManager.EquipmentChanged.
Runtime API (Common)
SyncNow()- force immediate full sync passRegisterTarget(...)/RegisterTargets(...)- manually add target renderer(s)UnregisterTarget(...)/UnregisterTargets(...)- manually remove target renderer(s)RegisterCurrentlyEquippedTargets(syncImmediately)- safety re-register passAutoPopulateCustomMappings(replaceExisting)- generate custom mapping entries
Troubleshooting
Equipment blendshapes do not react
sourceRenderer missing or wrong
Assign body mesh as sourceRenderer
Nothing syncs on equip
BlendshapeSynchronizer missing or not on same object as EquipmentManager
Put both on same character root
One specific item does not sync
Enable Blendshape Sync disabled on that equipment entry
Enable it in the item's Blendshape Matching section
Baked cross-rig item does not sync
Safety skip condition active, or bake disabled per-item sync
Enable sync and use CustomMapped mappings for that item
Wrong auto-match deformation
SmartMapping matched unrelated names
Use CustomMapped and validate mappings manually
CustomMapped appears to do nothing
Mapping list empty/incorrect
Auto-populate mappings, then verify row-by-row
Sync feels delayed
syncInterval too high
Lower syncInterval or call SyncNow()
Last updated