by dkwroot » Wed Jul 26, 2017 4:06 am
Thanks for sharing this, Victor. I'm looking into it and I've developed some theories. I'm breaking this down in a technical way in case some folks might get an idea of how to script some of this for quick automation.
If we have two smart bones (S1,S2) and one corrective smartbone (C), then if we want to experiment with this method we only need to play attention to the following details:
For smartbones S1,S2, you only need to care about how much they rotate smartbone C. Let S1 rotate C by X degrees and S2 rotate C by Y degrees.
For smartbone C, if the total action frame range is some number N, then the action should begin at some frame Q where Q<N. Keep in mind that the smaller the Q, the sooner the action will begin.
The total bone rotation(R) for C, should be R=X+Y
I would estimate that we could get a good result if we used a smaller Q (maybe Q=N/1.8 or Q=N/1.5). This way, there is a little wiggle room at the two extremes without activating the corrective action. Also, the smartbones S1,S2 could have their rotations of smartbone C skewed using the graph editor so that they ease into the rotations slowly. I think this should make the blending more smooth and feel like a smooth gradient instead a of sudden boolean trigger.
From what I can tell, there is no need to mess around with frame interpolation rates for the corrective smartbone. In fact, it's probably best to just use linear interpolation for everything in the corrective action since all of the easing would be best controlled by how S1,S2 rotate the corrective bone.
So to recap:
- Use Linear Interpolation for all keyframes in the Corrective Action
- Use keyframe interpolation for rotation of control bone by smartbone actions S1,S2 to make corrective action smooth (suggest ease in)
- In the corrective action, if the action is of total frame length N, then start the action at frame N/1.8 or so. (This means copy keyframes at frame 0 to frame N/1.8 )
- smartbones S1,S2 should rotate the corrective smartbone by some values X and Y, such that X+Y=R where R is the total rotation to activate the corrective bone. Keep in mind that X is inversely proportional to Y. The larger a value for one of the weights, the more that specific bone will control the corrective action. It's best to leave it at X=0.5R, Y=0.5R
After everything is set, you should only need to mess with the interpolation of the corrective bone rotation by S1,S2 to get the result you want.