- 수정됨
phase lag / locking child changes against parent?
I've got an body bone animation that goes up and down to simulate movement, via a translation. This body bone is parent to a head bone. I'd like to introduce some phase lag between them... so, as the body goes up, the head follows that motion and goes up a few frames later, but doesn't reach it's peak until the body is already on its way down. In other words, I want to get some phase lag going on.
Is there an easy way to do this easily in spine? I thought I could define the keyframes of the head bone for each body bone keyframe
and then just select all the head bone keyframes and shift them over in the dopesheet. That just recalculates the head bone position after I do the shift. I thought the compensate setting would help me, but that looks like it locks the child against any changes done to the parent.
For clarity, here's what I tried:
1) Defined 6 keyframes for the body translation.
2) Adjusted the body translation to go up and down between the keyframes.
3) Defined 6 keyframes for the head translation, coinciding with the ones for the body.
4) Selected all 6 keyframes for the head.
5) Shifted these right by one keyframe.
I expected the shift to retain the original positions of the head translation. Instead, the position after the shift compensated against the parent position, so the net effect was nothing. To get the effect I wanted, I had to copy down the position of the head for each keyframe and then manually enter in the translation for the -next- frame. It worked, but there's gotta be an easier way to do this.
Thanks,
tim
If I understand correctly what you want can be achieved relatively simply the following way.
- Key the body bones translation
- Select the head bone.
- For each translation key of the body, you place a key translation key for the head, just click the key button next to translation and it will key its current value which it will be getting from the body (relative to its offset)
- Select all the translation keys of the head and open the graph editor.
- Set the keys to bezier.
- flatten out the start of the curve slightly
Play with the graph editor until you have something you like, keep in mind you might want to offset the keys slightly as you were doing already at the same time.
Shiu,
I think I understand what you are conveying and that makes sense. I'm tripping up though
steps 4-6 don't introduce any interpolations. The dopesheet does not show any 'interpolation' lines or whatever they are called between the head bone translation keyframes, even after I mess around with the bezier curve.
tim
if there is no line between the keys, it means the values don't change and then switching to bezier won't change anything. I can record a small video for you and upload it, it will be rough though, since I'm a tad bit busy right now Give me a couple of minutes.
Shiu, note the head bone is a child of the body bone.
When you animate the position of the body bone up and down, the head bone's local position doesn't actually change because it is defined relative to the body bone. You'll need to translate the head bone down some to counteract some of the movement from the body bone moving up.
I think the easy way to do this is to first animate your body bone up and down. Next, key the head on the first frame, then go to the frame where you want the head bone to be at its highest point (since you want some lag, this is somewhere just after the body bone reaches its highest point). At that frame, translate the head to where you want it and set a key. Do this again where you want the head to be at its lowest point.
Here you go - https://dl.dropboxusercontent.com/u/188 ... motion.mp4 Took a little while to get the dropbox link working. Windows 8 and Dropbox is terrible, no more right clicking and copying the public link. :S
I'll take a look. Thanks.
Here's a quick youtube demo I whipped up showing my current method.
tim
One way to maybe make it a little easier to do is to let it copy global key values, when global is set as the transform mode, that way you could copy the global value and paste it in as global as well. This might be confusing to some users though, so there would need to be a setting to enable/disable it.
Cool video Shiu, that's a great way to do it!