swing animation tutorial
First i checked "swing set physics" videos at youtube.com
this one has the advantage of showing us an almost lateral view
I sat Amy and placed her hands grabbing the chains almost at the height of her shoulders
note this swing's hinge location is correctly positioned
if this was not the case you could use a script like "Move Origin"
http://www.4shared.com/dir/722776/10801f63/DS_Scripts.html#dir=Gl1KlH4s
to change the location of the "origin".
i parented Amy to the chains & seat prop named "swing2"
by drag & dropping the 'Amy' node onto the 'Swing2' node in the scene tab
these are the 6 keyframes i extracted from the youtube video
one loop lasts 2.4 seconds
if we use an animation rate of 30 fps, that's 12 frames between keyframes
At frame 0 i X-Rotated the swing about +26 degrees
At frame 36 ( mid swing ) i X-Rotated the swing -26 degrees
At frame 72 ( loop point ) i X-Rotated the swing +26 degrees
since Amy's current pose corresponds to the 4th pose from our reference video
i keyframed her pose at frame 36 by selecting her, then going in the parameters tab
and doing a "memorize figure pose" followed by a "restore figure pose"
next i posed Amy at frames 0, 12, 24, 36, 48, 60 and 72 according to the 6 poses from the youtube video
note that the pose at frame 0 must be copy-pasted to frame 72 ( it'a a loop )
We pose Amy's abdomen, chest, head, hip and legs but we don't touch the arms
Each time i complete a pose i do a "memorize figure pose" followed by a "restore figure pose" to keyframe every joint
Now we have our six poses and the movements look good
But only pose 4 ( frame 36 ) has Amy's hamd holding on to the swing's chains
i moved Daz Studio's timeline to frame 36
i selected Amy's 2 hands ( easier to do using the Scene tab )
i ran/executed the mcjMakeTargets script found here : https://sites.google.com/site/mcasualsdazscripts/mcjmaketarget
this created two Null nodes at the very precise position of Amy's hand joints
we'll camm them the hand targets
one is labeled "lHand_target" the other is labeled "rHand_target"
we want Amy's hands to remain at this position, relative to the chains
so we parented the hand targets to the swing/chains
Using mcjAutoLimb to make the hands stick to the targets
This was done in Daz Studio's Scene Tab :
1 Selected the left hand target ( lHand_target )
2 Selected Amy's left hand ( held down the CTRL key to add to the selection )
I launched the mcjAutoLimb script ( found here : https://sites.google.com/site/mcasualsdazscripts/mcjautolimb )
mcjAutoLimb can be hard to figure out, but it can save hours of work and you get very steady animations
Here i started with the default settings "limb spin angle" was set to zero degrees , and the "range to be processed" option was set to "current frame only"
using that setting, after i clicked the "DoIt" button, Amy's arm was extended away from the target node
which is not what we want -- this means mcjAutoLimb was unable to find an arm position that meets the target
so i changed "limb spin angle " to 30 degrees, clicked the "doit" buttom ... another miss
by trial and error i found that a "limb spin angle " of 116 degrees brings the hand to the position of the hand-target and the arm is not twisted in an impossible position
i changed the "range to be processed option to "Animation Range Frames 0 to 72" and clicked the "Do it" button
Now if we review our 72 animation frames we can see that mcjAutoLimb did what it could
but was not always able to keep the hand at the location of the hand target
this is most probably due to the fact that the shoulder joint's limits don't allow the needed pose
one way to fix this would be to help autoLimb
in the image above we see frame 45, so at frame 48 ( one of our 6 keyframes ) we could pull back Amy's collar bone
make sure this did not change the collar pose at frames 36 and 60
this is the situation at frame 60
mcjAutoLimb was able to reach the target but the arm intersects the chain
one way to fix this is to use the collarbone to pull back the arm
another way would be to try other values for "limb spin angle "
we're still at frame 60 and fixed the problem by doing
- select hand target and hand
- start mcjAutoLimb
- "range to be processed" option was set to "current frame only"
- find a value for "limb spin angle not too far from the earlier guess of 116 degrees
in this case a value of 80 degrees
change "range to be processed" to "Animation Range Frames 0 to 72" and click the "Do it" button
then review the 72 animation frames looking for things to fix
----
this may seem tedious and difficult, but if you did this manually ( and it needs to be done ! )
it would take you a lot of time and achieving non-jittery arm movements would be difficult
--
other important tip about mcjAutoLimb
if you turn off the limits for the Shoulder and ForeArm joints, mcjAutoLimb stands better chances of finding arm positions that meet the taget
the drawback is that the arm may become visibly over-twisted
Using mcjHoldon
Now that the positions pf the hands joints are stabilized relative to the chains
we need to stabilize the rotation of the grip/fingers relative to the chain
and that's the purpose of mcjHoldon
which can be found here https://sites.google.com/site/mcasualsdazscripts2/mcjholdo
Here we are at frame 60
i chose this one because that's the point of the movement where that hand's "side-side" joint it at its maximum
i repositioned the hand so that hamy has a good grip
the following is done in the Scene tab
Select Amy's left hand
without de-selecting it ( press and hold the Ctrl key ),
Select the swing/chain
launch mcjHoldon
in the above you can see that the hand position at frame 60 ( the current frame ) will be used as the reference
step = 1 means the hand will be keyframes for the 72 frames
you can also see that, after i pressed the "Do it" button, mcjHoldOn warns me that mcjHoldOn
takes for granted that the hand is what will be the holder and the swing is what will be held on to
if this was wrong .... danger danger ... i would click "cancel", close mcjHoldOn and re-select the 2 nodes in the correct order
and ... we;re done ! :)