Hi Everyone,
We have an update in the works to remove the clamping of blendshape weights to the current range of 0-100. This change will allow you to animate beyond that range so that blendshapes continue to deform at negative values and at values greater than 100, allowing you to get more motion with fewer blendshape targets.
This change is being made in response to user feedback and suggestions such as this one:
https://feedback.unity3d.com/suggestions/blendshapes-over-and-under-morph-disable-0-100-limitation?page=1#comments
While this change will be great for new content, it may have a visible (and potentially undesirable) impact on existing content. There will be adverse effects if keyframes or curve interpolations inadvertently go outside the 0-100 range. Likewise, if code increments blendshape weight values outside that range, it may now need to clamp weight values manually to achieve the same effect as before.
This change could result in some broken looking facial animation if your content was made to depend on the old clamping behavior. Because our own testing has revealed these side-effects in a few randomly sampled Asset Store packages, we want to be careful about how to release this update in order to minimize regressions in existing Unity projects.
There are a couple of things we can do to help users updating existing projects. We would like to ask for your feedback on what would be most useful:
Mitigation #1:
Provide an Editor script to modify animation curves to fit within the 0-100 range.
Users could execute this script on-demand to repair desired animation clips with animated blendshape weight values. It would set new keyframes and modify tangents to ensure that animation curves always stay within the previous 0-100 range. We wouldn’t want to run this automatically in case the out-of-range animation was intentional.
Mitigation #2:
Add an import setting for 3d models to clamp blend shape curves within the 0-100 range.
This option could be added as a supplement to the Editor script above, easing the transition for users whose projects contain animations obtained from the Asset Store. With this option, you could upgrade animation clips that would otherwise be read-only, even if you do not have software that can modify the source file from which the animation clip came. In this case, upgraded content would have the option enabled, while new content would allow blendshape weight animation curves to be in any range.
Mitigation #3:
Provide a setting to switch back to the old code-path with blendshape clamping on.
In some cases it may make sense to keep the clamping how it currently works to preserve functionality of existing projects. This could either be a project-wide setting or an option on each individual SkinnedMeshRenderer. New content would have this option off by default, while content created in older versions of Unity would have it turned on when upgrading in order to keep it working the same. However, this approach can complicate the interface, so we want to see if it would be useful before we explore it further.
Thanks, and we look forward to hearing your feedback!