Emotion output bindings
Reference for the Emotion module's remaining output binding, now that the slot-list facial output path has been removed as a breaking change.
Output bindings are the optional extra stage of the Emotion pipeline, for effects beyond the face itself. Facial expression is not authored through a binding — it is written automatically through the shared facial compositor. This page covers MaterialPropertyEmotionBinding, the one output binding a profile can still author, and the migration for profiles that used the removed slot-list path.
Breaking change in SDK 4.5.0. The slot-list facial output path is removed from the Emotion module: EmotionSlotBinding, BlendshapeEmotionBinding, AnimatorParameterEmotionBinding, RealisticEmotionSlots, NeutralAlternator, and the profile's SemanticExpressionsEnabled/NeutralAlternationEnabled switches and CreateBlendshapeRuntimeBinding/CreateAnimatorRuntimeBinding factories are all gone. See Migrate from the slot-list facial path below.
Why the slot-list path was removed
The slot-list path was a second facial output system whose data the runtime discarded whenever semantic expressions were active — which was every shipped profile. Its authored slots, the per-rig tooling that built them, and the neutral alternator they fed were dead weight presented as live configuration. Expression recipes replace it and need no per-rig authoring at all: a recipe names what should move in semantic terms, and the runtime resolves that against whichever blendshapes the character's mesh actually has. A profile that carried authored slots loses only data that was never read — nothing needs porting.
Shader-property output is unaffected and is now the one remaining output binding a profile authors directly.
How facial expression reaches the face now
Emotion writes facial output through the shared facial compositor rather than through a directly-authored binding. Expression recipes are compiled once, resolved against the character's rig, and submitted to the compositor's emotion layers alongside LipSync and the micro-expression life layer. See Facial composition for the compositor's layer model, blend modes, and the LipSync-over-Emotion priority rule.
MaterialPropertyEmotionBinding
MaterialPropertyEmotionBinding drives arbitrary shader float properties — blush, tear glisten, sweat sheen, or any other custom shader effect — from composed emotion scores, with no built-in shader knowledge in the SDK. It is authored in the Material Binding field on ConvaiEmotionProfile, as a list of MaterialPropertyEmotionSlot entries.
MaterialPropertyEmotionSlot fields
emotionLabel
string
—
The canonical taxonomy label that drives this effect (e.g. "anger").
propertyName
string
—
The shader's exposed float property name (e.g. "_EmotionBlush"). Leave empty to skip this slot.
minValue
float
0
Property value written at zero composed intensity.
maxValue
float
1
Property value written at full (1.0) composed intensity.
How it resolves and writes
Target renderers are resolved the same way the facial expression output is: the rig's facial meshes, falling back to a
SkinnedMeshRendererscan under the character root.Writes go through a per-renderer
MaterialPropertyBlock(get-modify-set), so the shared material asset is never mutated and any other system's own property-block writes on the same renderer are preserved.Max-combine rule. When two or more slots target the same property on the same renderer — for example both
angerand anembarrassment-labeled custom entry driving_EmotionBlush— their composed intensities are compared each frame and the strongest slot's[minValue, maxValue]range wins, independent of authoring order.Rest on unbind. Disabling the controller or swapping profiles writes each touched property back to its slot's
minValuerather than leaving the last emotional value stuck.Whether a resolved facial mesh's material actually declares the authored property does not block the write — an unsupported
MaterialPropertyBlockfloat write is inert, never an error, and shader variance across meshes on the same character is normal.A profile whose only authored output is material-property slots still counts as active output; it does not trigger the "no facial output resolved" diagnostic warning covered in Troubleshoot emotion.
If none of the authored property names are found on any target material, the binding logs one warning per bind: [MaterialPropertyEmotionBinding] '<name>' has authored material-property slot(s) but none of the authored shader properties (<names>) were found on any target material. Per-slot misses on some meshes but not others stay silent, since shader variance across meshes is normal.
Example
Migrate from the slot-list facial path
If your profile authored BlendshapeEmotionBinding or AnimatorParameterEmotionBinding slots for facial expression, that authored data is not read in SDK 4.5.0 and does not need to be re-entered:
Open the affected
ConvaiEmotionProfileasset. Any slot lists from the removed bindings are gone from the Inspector — there is nothing to delete by hand.Confirm the character still expresses correctly: expression recipes drive the face automatically, with no per-rig authoring. Leave the profile's Expression Recipes field empty to use Convai's production-safe defaults, or author your own recipes for character-specific art direction.
If you used
RealisticEmotionSlots.Build(RigConvention)from code to generate slots, remove that call — the type no longer exists, and its job is done automatically by expression recipe resolution.If you relied on Neutral Alternation to keep a sustained expression from reading as frozen, enable Micro Expressions Enabled on the profile instead. It produces idle drift and speech-coupled accents procedurally and composes additively, so it can never suppress the expression underneath. See Micro-expression life.
If you authored
isMouthShaperouting on a slot to keep an emotion-driven mouth shape from fighting LipSync, no action is needed — the shared facial compositor now owns that priority (LipSync over Emotion) for every character automatically.Any
materialBindingslots you authored for shader effects are unaffected and require no changes.
Re-point the shared sample taxonomy and profile
The shared sample assets also changed in this release, separately from the slot-list removal: ConvaiSamplesShared_EmotionTaxonomy.asset was rebuilt with a new asset identifier, and ConvaiSamplesShared_EmotionProfile.asset was removed entirely, replaced by four named personality assets (Warm, Composed, Energetic, Reserved). Unity cannot carry a reference across an asset identifier change, so a character or profile that pointed at either shared asset reports a missing reference after upgrading.
Open each affected character and re-point its Taxonomy field at
SamplesShared/Profiles/Embodiment/Modules/Emotion/ConvaiSamplesShared_EmotionTaxonomy.asset.Re-point its Profile field at whichever of the four named personality assets fits the character, or build your own with character type presets.
A character left with no taxonomy still runs, but every emotion dropdown that reads one comes up empty — this reads as a broken Inspector rather than as a missing reference, so check for it explicitly rather than waiting for a console warning.
If you had edited either shared asset from inside the package, copy your version into your own
Assets/folder before upgrading; anything left inside the package is replaced by the SDK update.
Next steps
Emotion profileFacial compositionLast updated
Was this helpful?