Emphasizer Emotes


Emphasizer emotes are emotes configured to be triggered by audio analysis timings from the SALSA engine. SALSA computes a successful trigger based on analysis data and makes a call to a linked EmoteR reference, passing the amount of trigger excess. An emphasizer emote is expected to provide additional synchronized facial movement to a character while speaking. This feature gives a character a huge amount of additional expression and life. Since the expressions are triggered based on the audio analysis, it is far more realistic than simple random expression calls.


Initially we thought setting the emphasizer trigger to a higher value was better, since it corresponded to a more energetic speech pattern. The logic seemed sound. However, we have changed our view and prefer a much lower trigger value (between 0.1f and 0.2f) with a relatively high chance for successful triggering (~0.75f). The result is a much more natural, always alive face that simply gets more energetic as the analysis indicates.

SALSA Emphasizer Emote Settings
(SALSA Emphasizer Emote Settings)

EmoteR Emphasizer Emote Settings
(EmoteR Emphasizer Settings)

NOTE: The Emphasis Chance setting is available for adjustment in both SALSA and EmoteR, adjusting one affects the other (it is the same setting).

How it Works

Emphasizer emotes must be marked as being such (isEmphasizer) in their configuration, before Awake is called at runtime. Otherwise, they can be added programatically to the Emoter.lipsyncEmphasisEmotes list.

Enabling Emphasizer Emote
(EmoteR: Enabling an emote for SALSA-linked emphasis)

Emotes configured as emphasizers are triggered by SALSA during the LateUpdate loop. SALSA first checks to see if an EmoteR is linked and if so, checks the analyzed audio value against the emphasis trigger. If the trigger point is reached, SALSA lets the linked EmoteR know and passes the calculated emphasisAmount (the magnitude of how far the trigger was surpassed).

EmoteR then calculates a chance of firing an emphasis emote. The calculation always has a chance of firing an emote, even if the emphasizer chance is set to 0. The calculation is:

lipsyncEmphasisChance + ((1 - chance) * emphasisAmount)

Assume chance is 30% and the emphasisAmount is 62%. The chance of firing is then calculated as:

.3 + ((1 - .3) * .6) = 0.72 (72% chance)

Therefore, even if chance is 0, there could be a 100% chance the emote will fire (assuming the emphasisAmount is 1.0f). Setting chance to 0 puts the chance to fire completely in control of the emphasisAmount passed from SALSA. Increasing chance simply increases the bias opportunity that an emphasis emote will fire, allowing more chance if the emphasisAmount is very small.

In addition to being chance-driven, emphasizer emotes are also dynamically "sized" based on the emphasisAmount passed from SALSA. Therefore, if SALSA's emphasis trigger is barely breached, an emphasis emote has a very low chance of being fired and will subsequently be very subtle or small. However, if the emphasis trigger is breached fully with a max analysis value (1f), the chance will be 100% and the emote will be full on.

Emphasizer-configured emotes are also round-trip animations, meaning they are animated on, held for a duration, and finally animated off. This setting cannot be overridden and is by-design. However, you can configure an emote for EmoteR that can be used manually (or fully randomly) that is also configured as an emphasizer. In this case, when the emote is triggered manually or randomly, it will adhere to its configured handler value (Expression.ExpressionHandler.OneWay or Expression.ExpressionHandler.RoundTrip). See Expression documentation for information on animation handlers.