November 2022
Posted 2 years ago
For this hack week, I experimented with something I had suspected might be possible entirely in Animgraph, given how the character has been set up thus far: changing the height of the character. (And for bonus points, you can combine this with scaling the entity itself!)

We tend to think of animation as a series of changes from a strictly-defined base skeleton, but really, there is nothing that says you can't change relative positions to your heart's content. In a sense, the body parts aren't getting scaled up/down; they're getting longer or shorter.

attribute 'contenteditable' not allowedattribute 'blocktype' not allowed

So there's a new "scale_height" float parameter, which is, by default, clamped to values between 0.8 and 1.2. The theoretical bounds are 0.5-2.0, and things might start looking a bit too odd beyond the range which I've decided should be "officially" "supported" — but there's nothing that prevents you from creating your own copy of the animgraph and setting the default value to 2.0 if you wanted to create a "Slenderman"-style character, for example.

The input delta sequences are inherently changing the height of the pelvis; that effect is countered when ducking, and nullified while sitting.

There are also a few new procedural constraints that take advantage of the twist helpers on "lower limbs" (forearms, calves), keeping their position further down the limb, helping the model retain a better shape. This is unfortunately not possible right now on "upper limbs" (biceps, thighs), barring a minor rig rework and (most likely) a lot of tedious work going around all existing clothing assets.

The upper body compositing for "holdtypes" has only been using model-space rotation + parent-space blending modes, so things worked out reasonably well right away; however, an arm might overextend here and there if it's using IK while the character is shorter.
attribute 'contenteditable' not allowedattribute 'blocktype' not allowedattribute 'title' not allowed
As for the feet, because they use IK by default, there's no problem with ground contact... but to keep the original animation look (kind of) intact, and reduce the likelihood of overextended IK pops, I put a system in place that effectively scales the position of the IK targets from center. This shortens or lengthens each "stride" and therefore induces foot skating, so the move_* values fed to the graph need to be counter-scaled accordingly... maybe I'll try to figure that out for the next hack week!