SALSA LipSync Logo

Release Notes

Check below to track all Adds, Changes, and Fixes for each version release.

Buy SALSA on the Asset Store

1.5.1 Release notes (submitted)
    Adds, Changes, Fixes

  • [RandomEyes2D] 
    • Chg - Blink and random look timers start with random future value.
  • [RandomEyes3D]
    • Chg - Blink and random look timers start with random future value.  
  • [Salsa2D] 
    • Chg - Removed hard AudioSource component requirement to allow remote AudioSource.
    • Fix - Fixed bug where lip-sync would not restart after disabling/enabling a character GameObject.
  • [Salsa3D] 
    • Chg - Removed hard AudioSource component requirement to allow remote AudioSource.
    • Fix - Fixed bug where lip-sync would not restart after disabling/enabling a character GameObject.
  • [General] 

1.5.0 Release notes
    Adds, Changes, Fixes

  • [RandomEyes2D] 
    • Chg - Removed the +/- layer adjustment buttons for Character, Eyes, and Eyelids in favor of a value update fields.
    • Chg - [Look Target] now stays fixed to whatever it's set to. When the character is using [Target Affinity] and loses affinity for the target, the new [Current Target] field will display what's happening with target tracking.
    • Chg - Replaced random eye movement quadrants with more natural movement generated vectors withing a cone [Range of Motion].
    • Chg - Removed eye look status changed broadcast events since they only applied to the old quadrant system.
    • Chg - RandomEyes2D.blink property renamed to RandomEyes2D.randomBlink for clarity.
    • Fix - Moved processing to LateUpdate to address Mecanim compatibility issues.
  • [RandomEyes3D]
    • Chg - [Look Target] now stays fixed to whatever it's set to. When a target moves behind the character (with [Track Behind] disabled), or the character is using [Target Affinity] and loses affinity for the target, the new [Current Target] field will display what's happening with target tracking.
    • Chg - [Track Behind] now defaults to true.
    • Chg - [Custom Shapes] that are set to [Override] during design-time are maintained at run-time.
    • Chg - Replaced random eye movement quadrants with more natural movement generated vectors withing a cone [Range of Motion].
    • Chg - Removed eye look status changed broadcast events since they only applied to the old quadrant system.
    • Chg - RandomEyes3D.blink property renamed to RandomEyes3D.randomBlink for clarityl
    • Fix - [Reset All] in the [Groups] section now disables in editor preview on all groups.
    • Fix - Moved processing to LateUpdate to address Mecanim compatibility issues.    
  • [Salsa2D] 
    • Chg - Exposed AudioSource in the inspector to make custom setups easier.
    • Chg - Removed hard SpriteRenderer component dependency in favor of a soft link to make custom setups easier.
    • Chg - Removed the +/- layer adjustment buttons in favor of a value update field.
    • Fix - Minimized garbage collection during sample retrieval.
    • Fix - Fixed a bug from 1.4.0 that enabled direct access to the sample average, but also introduced a bug that could prevent SALSA from returning to rest.
    • Fix - Moved processing to LateUpdate to address Mecanim compatibility issues.
  • [Salsa3D] 
    • Chg - Exposed AudioSource in the inspector to make custom setups easier.
    • Chg - Improved access to drive lipsync from an external source, enabled write changes to the Salsa3D.average field. 
    • Fix - Minimized garbage collection during sample retrieval.
    • Fix - Fixed a bug from 1.4.0 that enabled direct access to the sample average, but also introduced a bug that could prevent SALSA from returning to rest.
    • Fix - Moved processing to LateUpdate to address Mecanim compatibility issues.
  • [General] 

1.4.0 Release notes
    Adds, Changes, Fixes

  • [RandomEyes2D]
  • [RandomEyes3D]
    • Add - Custom shape groups
      • Allows users to build complex multi-shape expressions from the list of custom shapes and either toggle them on or off, or on for a specified duration using the user defined group name.
        • public void SetGroup(string groupName, float duration)
        • public void SetGroup(string groupName, bool status)
    • Add - Look sensitivity
      • Allows you to adjust how much the eyes move when tracking a target. Human eyes don't move much when tracking a target that is far away. This slider allows you to exaggerate the movement. It's a sensitivity multiplier.
  • [Salsa2D]
    • Chg - Public float average
      • This property holds the fully processed and normalized mouth shape trigger value, and was previously written continuously. Now it's written  only when the associated AudioSource is playing. This opens new opportunities to drive mouth movement.
  • [Salsa3D]
    • Add - Public void SetBlendSpeed(float blendSpeed)
      • A public function to set blendSpeed at runtime.
    • Chg - Public float average
      • This property holds the fully processed and normalized mouth shape trigger value, and was previously written continuously. Now it's written only when the associated AudioSource is playing. This opens new opportunities to drive mouth movement. 
  • [General]

1.3.3 Release notes
    Adds, Changes, Fixes

  • [RandomEyes2D]
  • [RandomEyes3D]
    • Add - Clickable select/deselect all function to Custom Shapes [!Rand] field in the inspector.
    • Add - public void SetCustomShapesAllNotRandom(bool status)
      • Set the not random (!Rand) status of all custom shapes. On Fuse, Autodesk, or Daz characters where the models have tons of BlendShapes, it's often easier to set all custom shapes to not random, then add only those you wish back to random selection by unchecking the [!Rand] field. You can call the method from the API, or in the inspector by clicking on the [!Rand] label above the custom shapes table.  
    • Chg - Moved FindOrCreateEyePositionGizmo() from the editor to the plugin and made it a public function. 
                  It also now includes an attempt to auto position based on the existance of left and right eye bones.  
  • [Salsa2D]
    • Add - Salsa2D.LoadAudioClip(string clipName);
      • Sets the Salsa2D.audioClip by loading a clip by name from a Resources folder.
    • Chg - To provide greater flexabiliy across implementations.
      • We have relaxed the clip syncronization link between the Salsa2D.audioClip and the associated AudioSource.clip. You can now set an AudioSource.clip and use AudioSource.Play() directly. If Salsa2D is on the same GameObject, it will still perform lip synchronization. However, this means that if you are setting the AudioSource.clip directly, the Salsa2D inspector Audio Clip field will not reflect the change. However, changes to Salsa2D will propagate to the AudioSource.
        • Salsa2D.SetAudioClip(AudioClip audioClip);
        • Salsa2D.Play();
        • AudioSource.clip = audioClip;
        • AudioSource.Play();
  • [Salsa3D]
    • Add - Salsa3D.LoadAudioClip(string clipName);
      • Sets the Salsa3D.audioClip by loading a clip by name from a Resources folder.
    • Chg - To provide greater flexabiliy across implementations. 
      • We have relaxed the clip syncronization link between the Salsa3D.audioClip and the associated AudioSource.clip. You can now set an AudioSource.clip and use AudioSource.Play() directly. If Salsa3D is on the same GameObject, it will still perform lip synchronization. However, this means that if you are setting the AudioSource.clip directly, the Salsa3D inspector Audio Clip field will not reflect the change. However, changes to Salsa3D will propagate to the AudioSource.
        • Salsa3D.LoadAudioClip(AudioClip audioClip);
        • Salsa3D.Play();
        • AudioSource.clip = audioClip;
        • AudioSource.Play();
  • [General]


1.3.2 Release notes
    Adds, Changes, Fixes

  • [RandomEyes2D]
  • [RandomEyes3D]
  • [Salsa2D]
    • Chg - Removed debug section 
    • Fix - OnEnable now initializes the component
  • [Salsa3D]
    • Chg - Removed debug section 
    • Fix - OnEnable now initializes the component
  • [General]

1.3.1 Release notes
    Adds, Changes, Fixes

  • [RandomEyes2D]
    • Add - A [X] remove look target button in the inspector, next to Look Target.
    • Fix - A few bugs fixed in look target tracking and target affinity.
  • [RandomEyes3D]
    • Add - A [X] remove look target button in the inspector, next to Look Target.
    • Fix - A few bugs fixed in look target tracking and target affinity.
  • [Salsa2D]
  • [Salsa3D]
  • [General]

1.3.0 Release notes
    Adds, Changes, Fixes

  • [RandomEyes2D]
    • Chg - When using target affinity, the transition between look target tracking and random look is now interpolated smoothly using the existing blendSpeed parameter.
    • Chg - Removed all error log output, left blue highlighted fields that indicate an issue or missing component.
    • Chg - Removed hierarchy icons due to editor performance issues in extremely dense scenes
  • [RandomEyes3D]
    • Add - Auto-link Shapes: Custom Shapes auto-link button automatically adds BlendShapes from the SkinnedMeshRenderer to the custom shapes list.
    • Add - Auto-link Exclude eye shapes: Option to attempt auto exclusion of eye shapes from the custom shapes auto-link.
    • Add - Auto-link Exclude mouth shapes: Link a Salsa3D component to attempt auto exclusion of mouth shapes from the custom shapes auto-link.
    • Add - Use Custom Shapes Only: Option to disable eye control to use RandomEyes for custom shapes only.
    • Add - Delete button on each custom shape allows individual custom shape deletes.
    • Add - Delete button on each custom shape includes index ID in hover tip.
    • Add - CustomShape functions
      • public void SetCustomShape(int shapeIndex)
        • Set a custom shape by shape index
      • public void SetCustomShape(int shapeIndex, float duration)
        • Set a custom shape for a specified duration using a shape index
      • public void SetCustomShapeOverride(int shapeIndex, bool overrideOn)
        • Set Override on a custom shape to on or off using shape index
      • public void SetCustomShapeOverride(int shapeIndex, float duration)
        • Override a custom shape for a specified duration using shape index
      • public void SetCustomShapeOverride(string shapeName, float blendSpeed, float rangeOfMotion, bool overrideOn)
        • Set Override on a custom shape to on or off, and set the blendSpeed and rangeOfMotion using shape name
      • public void SetCustomShapeOverride(int shapeIndex, float blendSpeed, float rangeOfMotion, bool overrideOn)
        • Set Override on a custom shape to on or off, and set the blendSpeed and rangeOfMotion using shape index
      • public void SetCustomShapeOverride(string shapeName, float blendSpeed, float rangeOfMotion, float duration)            
        • Override a custom shape for a specified duration, and set the blendSpeed and rangeOfMotion using shape name
      • public void SetCustomShapeOverride(int shapeIndex, float blendSpeed, float rangeOfMotion, float duration)
        • Override a custom shape for a specified duration, and set the blendSpeed and rangeOfMotion using a shape index
      • public void SetCustomShapeBlendSpeed(int shapeIndex, float blend)
        • Set a custom shape property: blend, using a shape index
      • public void SetCustomShapeRangeOfMotion(int shapeIndex, float range)
        • Set a custom shape property: range, using a shape index
      • public void AutoLinkCustomShapes(bool excludeEyeShapes, Salsa3D excludeSalsaShapes)
        • Auto-Link all BlendShapes from the SkinnedMeshRenderer.
        • Be sure to link the RandomEyes3D.skinnedMeshRenderer field prior to using this function, or nothing will be linked.
    • Add - Track Behind boolean added to Target Tracking. When unchecked eye tracking will drop into random look when target is behind character.
    • Add - Added a public property [lookAmount] of type RandomEyesBlendAmounts, that contains the lookUp, lookDown, lookLeft, lookRight, and blink live BlendShape values.
      • These are updated even when no SkinnedMeshRenderer is linked, which allows implementers to use RandomEyes3D as a eye movement and tracking engine in custom integrations.
    • Chg - Target tracking has been re-written and is much more accurate now.
    • Chg - When using target affinity, the transition between look target tracking and random look is now interpolated smoothly using the existing blendSpeed parameter.
    • Chg - Custom Shape Count: Replaced with Add Custom Shape button, adds one new shape per click.
    • Chg - Current Custom Shape: Now defaults to None when adding or removing custom shapes.
    • Chg - Removed hierarchy icons due to editor performance issues in extremely dense scenes
    • Chg - The [Look Increments] property, and inspector control, have been removed. No longer needed
    • Chg - Auto-Link eye search now matches against:
      • (case-insensative)
      • looku* = lookUp, lookd* = lookDown, lookl* = lookLeft, lookr = lookRight, blink = blink
    • Chg - Removed all error log output, left blue highlighted fields that indicate an issue or missing component.
    • Chg - Custom Shape [Blend] and [Range] parameters are now greyed out when in random mode to clarify they are intended to be used during manual control. Selecting [Not Rand] un-greys the fields the selected custom shape only.
    • Fix - Fixed a couple of bugs that were preventing 100% runtime setup.
  • [Salsa2D]
    • Add - Public sayIndex integer indicates which mouth shape is active at any given time.
      • This addition makes it easier for integrators who whish to use Salsa2D's lip sync engine, but want to implement their own Sprite management.
      • 0 = Rest, 1 = Small, 2 = Medium, 3 = Large            
    • Chg - Public say string is now updated even when not in debug mode.
      • Rest, Small, Medium, Large            
    • Chg - Removed all error log output, left blue highlighted fields that indicate an issue or missing component.
    • Chg - Removed hierarchy icons due to editor performance issues in extremely dense scenes.
  • [Salsa3D]
    • Add - Public sayIndex integer indicates which mouth shape is active at any given time:
      • 0 = Rest, 1 = Small, 2 = Medium, 3 = Large
    • Add - Added a public property [sayAmount] of type SalsaBlendAmounts, that contains the saySmall, sayMedium, and sayLarge live BlendShape values.
      • These are updated even when no SkinnedMeshRenderer is linked, which allows implementers to use Salsa3D as a real-time lip sync engine in custom integrations.
    • Chg - Public say string is now updated even when not in debug mode.
      • Rest, Small, Medium, Large        
    • Chg - Removed all error log output, left blue highlighted fields that indicate an issue or missing component.
    • Chg - Auto-Link search now matches against:
      • (case-insensative)
      • says* = saySmall, saym* = sayMedium, sayl* = sayLarge
    • Chg - Removed hierarchy icons due to editor performance issues in extremely dense scenes.
  • [General]
    • Add - The SalsaUtility.cs class now includes a SalsaBlendAmounts class and a RandomEyesBlendAmounts class that are used to store and expose Salsa and RandomEyes live BlendShape values.
    • Add - CM_RuntimeSetupExample.cs/js - Scripts that demonstrates a full Salsa3D and RandomEyes3D setup and configure during runtime.    
    • Fix - Unity version 5 compatible.

1.2.1 Release notes
    Adds, Changes, Fixes

  • [RandomEyes2D]
    • Add - Public range of motion function SetRangeOfMotion(float range)
    • Add - Public blend speed function SetBlendSpeed(float speed)
    • Add - Public blink duration function SetBlinkDuration(float duration)
  • [RandomEyes3D] 
    • Add - Public range of motion function SetRangeOfMotion(float range)
    • Add - Public blend speed function SetBlendSpeed(float speed)        
  • [Salsa2D]
    • Chg - Debug log errors when missing an audio clip are now log entries
  • [Salsa3D]
    • Chg - SetRangeOfMotion function parameter from int to float
    • Chg - Debug log errors when missing an audio clip are now log entries
  • [General]
    • Fix - Modified code in all the editors to address a Windows Apps/Windows Phone incompatibility.

1.2.0 Release notes
    Adds, Changes, Fixes

  • [RandomEyes2D]
    • Add - Target Affinity, added to the Target Tracking system, mixes target tracking with random eye movement using the affinity percentage slider to determine bias.
    • Add - Affinity Percentage, visible when Target Affinity is enabled, effects the lookTarget bias versus random eye movement
  • [RandomEyes3D]
    • Add - Auto-Link attempts to automatically link eye shapes (lookUp, lookDown, lookLeft, lookRight, blink) to the BlendShape of the same name from the skinned mesh renderer (case-insensitive)
    • Add - Target Affinity, added to the Target Tracking system, mixes target tracking with random eye movement using the affinity percentage slider to determine bias.
    • Add - Affinity Percentage, visible when Target Affinity is enabled, effects the lookTarget bias versus random eye movement
    • Add - Blink Speed, controls how fast the eye lids close and open. Now allows smooth blinks.
    • Add - Close Amount, allows you to set a minimum close, and maximum close. This of minimum close as maximum open. When min/max values are changed, the eyes smooth blend to the new min/max.
    • Add - Custom Shapes "Not Rand" (notRandom) checkbox allows you to exclude custom shapes from the random shape selection process.
    • Chg - lookUp index field now uses a select box that is populated with all available BlendShapes
    • Chg - lookDown index field now uses a select box that is populated with all available BlendShapes
    • Chg - lookLeft index field now uses a select box that is populated with all available BlendShapes
    • Chg - lookRight index field now uses a select box that is populated with all available BlendShapes
    • Chg - blink index field now uses a select box that is populated with all available BlendShapes
    • Chg - Custom Shapes shapeIndex field now uses a select box that is populated with all available BlendShapes
    • Chg - Custom Shapes shapeName field auto populates with the actual BlendShape name. If you enter a custom name, your name will be retained. To go back to the auto-name, clear the field and hit enter.
    • Chg - [Max Random Interval] label renamed to [Max Random Eye Interval]
    • Chg - [Blink] label renamed to [Random Blink]
    • Chg - [Max Blink Interval] label renamed to [Max Random Blink Interval]
  • [Salsa2D]
  • [Salsa3D]
    • Add - Auto-Link attempts to automatically link mouth shapes (saySmall, sayMedium, sayLarge) to the BlendShape of the same name from the skinned mesh renderer (case-insensitive)         
    • Chg - saySmall index field now uses a select box that is populated with all available BlendShapes
    • Chg - sayMedium index field now uses a select box that is populated with all available BlendShapes
    • Chg - sayLarge index field now uses a select box that is populated with all available BlendShapes
  • [General]
    • Renamed [Readme_first.txt] to [Release Notes.txt] and moved it from [Crazy Minnow Studio] to [Crazy Minnow Studio/Documentation].

1.1.0 Release notes
    Adds, Changes, Fixes

  • [RandomEyes2D]
    • Add - Collapsible section header for [Broadcast Eye Events]            
    • Add - Broadcast events for eyes [RandomEyes_OnLookStatusChanged]
    • Add - Collapsible section header for [Broadcast Eye Events]
    • Chg - All Blue section headers are now section collapsible panels
    • Chg - Renamed Blue section headers:
      • RandomEyes2D Properties > Sprites & Layers
      • General Properties > Eye Properties                
    • Chg - Blend Speed moved under [Proportional Movement]
    • Chg - Blend Speed is now a slider
    • Chg - Blink Speed renamed to [Blink Duration]
    • Chg - Blink Duration moved under [Blend Speed] slider
  • [RandomEyes3D]
    • Add - Broadcast events for eyes [RandomEyes_OnLookStatusChanged]
    • Add - Collapsible section header for [Broadcast Eye Events]
    • Add - Unlimited number of custom shapes, drop down inspector control similar to [Current Look Position]
    • Add - Random custom shapes with adjustments for [Max Random Interval], and random ranges for blend speed, range of motion, and duration
    • Add - Public custom shape functions
      • SetCustomShapeRandom(bool status)
      • SetCustomShape(string shapeName)
      • SetCustomShape(string shapeName, float duration)        
      • SetCustomShapeOverride(string shapeName, bool overrideOn)
      • SetCustomShapeOverride(string shapeName, float duration)
      • SetCustomShapeBlendSpeed(string shapeName, float blend)
      • SetCustomShapeRangeOfMotion(string shapeName, int range)
    • Add - Broadcast events for custom shapes [RandomEyes_OnCustomShapeChanged]
    • Add - Collapsible section header for [Broadcast Custom Shape Events]        
    • Chg - All Blue section headers are now section collapsible panels
    • Chg - Renamed Blue section headers:
      • RandomEyes3D Properties > Eye Shape Indexes
      • General Properties > Eye Properties
    • Chg - rangeOfMotion data type from int to float
    • Chg - Blink Speed renamed to [Blink Duration]
    • Chg - Reset default look/blink indexes to 3, 4, 5, 6, and 7 after removing sayRest from Salsa3D
    • Fix - Setting the [rangeOfMotion] to a lower value programatically will now blend the shape gradually back down to the new [rangeOfMotion]
      • This also applies to individual custom shape [rangeOfMotion] values
  • [Salsa2D]
    • Add - Collapsible section header for [Broadcast]
    • Chg - All Blue section headers are now section collapsible panels
    • Chg - Renamed Blue section headers:
      • Salsa2D Properties > Mouth Sprites & Audio
      • General Properties > Speech Properties
  • [Salsa3D]
    • Add - Collapsible section header for [Broadcast]
    • Chg - All Blue section headers are now section collapsible panels
    • Chg - Renamed Blue section headers:
      • Salsa3D Properties > Mouth Shape Indexes & Audio
      • General Properties > Speech Properties
    • Chg - Removed [SayRest Index]. The BlendShape sayRest position is the base (all shapes turned off) so it doesn't need a slot
    • Chg - Reset default say shape indexes to 0, 1, and 2 after removing sayRest
    • Fix - Bug fixed in the handling of the sayRest position, it was being treated as an incremental shape and not a base position
    • Fix - Setting the [rangeOfMotion] to a lower value programatically will now blend the shape gradually back down to the new [rangeOfMotion]
  • [General]
    • Add - Sample scripts
      • CM_RandomEyesBroadcastEventTester.cs (CSharp event listener form new RandomEyes events)
      • CM_RandomEyesBroadcastEventTester.js (Javascript event listener form new RandomEyes events)
      • CM_RandomEyesCustomShapeIterator.cs (CSharp event listener for custom shapes, iterates through all available)
      • CM_RandomEyesCustomShapeIterator.js (Javascript event listener for custom shapes, iterates through all available)
    • Add - Scene, RandomEyes3D_CustomShapes (Demo new custom shape features)            
    • Add - Scene, Demo_Ethan_CSharp (CSharp demo of a scripted character with eye movement, look tracking, random and triggered custom shapes)
    • Add - Scene, Demo_Ethan_JavaScript (JavaScript demo of a scripted character with eye movement, look tracking, random and triggered custom shapes)
    • Add - Model, ethan (Contains 4 custom expression shapes in addition to the look and say shapes)
    • Add - [Mocap] folder under the [Examples] folder. Contains a motion capture file used in the Demo_Ethan_CSharp and Demo_Ethan_JavaScript scenes
    • Add - Model, toonBoxHead (Contains 11 custom expression shapes in addition to the look and say shapes)
    • Chg - Updated the manuals to reflect all changes