- Home /
Blendshapes values < 0 or > 100
I have several imported morphs (blendshapes) from an FBX character. These work but only between values of 0 and 100.
Which isn't very useful because many of the morphs require over morphing or under morphing for example open and close eyes requires negative morph numbers.
Am I missing an option to turn limits off and allow over-morphing?
I would really like an answer to this as well!
reputation to low to vote right now, I'll come back with an upvote later
I have several morphs that require the use of negative values also.
Yeah, would make live a lot easier of blendshape weights could go beyond 0-100
Actually it is interesting that the Script Reference says "At weight 0 BlendShape has no influence, at weight 1 BlendShape is fully active, but weight is not limited to [0; 1] range." - but there is no effect outside that range (which actually should be [0;100])...
2019, this is still a valid request
co$$anonymous$$g from all other animation packages I have experience with, they allow both over and negative blends
Answer by Bunny83 · Feb 04, 2019 at 12:22 PM
This isn't possible and can't be implemented that easy. The blendshapes are called "morph targets". Since a single morph can have several intermediate frames, extrapolating the delta of the last frame / first frame would most likely result in a total mess. The blendshape weigths just control how far the blendshape has been "played". It's literally just a percentage / normalized time. If you need some sort of over / undershooting you have to create them as seperate frames in the blendshape animation.
Keep in mind that Unity is not an animation tool. It just interpolates the given animation data. See AddBlendShapeFrame for more insight. So if you want a blendshape animation that first undershoots and then blends towards the target frame and overshoots at the end before it settles at the target, you have to use at least 4 frames
0 - Initial position
10 - undershoot position
90 - overshoot position
100 - target position
Now when you "play" this animation it first undershoots and at the target it overshoots. Just like bone animations they never extrapolate over the defined animations. If you need an over / undershoot in your animation it need to be animated like this. Unity only controls the "time" of the animation and only interpolates between the animation data.
Answer by tobemayr · Feb 04, 2019 at 01:08 PM
Hi,
Thanks for your answer. Obviously I have no understanding of the technical implementations, so most of your elaborate answer goes over my head.
I was hoping that morph targets are represented by individual deltas of XYZ position per vertex, and that the blendshape value simply takes a 0-100 fraction of the delta and applies it to each vertex postion.
Hence my assumption this delta could be high than 100% and negative, as it would 'simply' increase the positional delta.