I know how to “pick up” an object by animating the Child Of value on the object to be picked up, but setting it down at a different place is giving me issues. Once I animate the value to go back to 0, it wants to jump right back to the place where it started when I originally picked it up. Does anyone know how to fix this?
seeing how Blender handles constraints (the contrained object’s transforms do not change even when it is moved around through its parent), what you need to do is use visual keying. What it does is key the observed position (or rot or scale) instead of the one displayed in the transform panel. Refer to this tutorial : http://www.harkyman.com/2009/10/23/how-to-pick-up-and-drop-an-object-in-blender/
Example scene : http://www.pasteall.org/blend/23493
Use several “Child Of” constraints. At least, a second one with a bone at the New Position where the object must be dropped.
You start with both constraints at 0. When the object is picked up, you set the constraint to the Hand at 1. And to drop, you switch. Hand to 0 and New Position to 1.
That’s the same principle used to make a character give an object to another character. Or, in other words, to make a bone jump from one armature to another.
I use Hadriscus’s method if I’m just moving the object around. Kaluura’s method works when passing the object from one character to another.
When using Hadriscus’s method, on the frame before you want the constraint switched off, keyframe the constraint influence, and copy the objects loc/rot/scale keys from before the object was constrained to the character to this frame. The original starting position of the object, that is. Then on the frame the object is released, in this order: insert visual loc/rot keys, turn the constraint off, and keyframe that. The switch needs to take place over the course of 1 frame, if it doesn’t then blender’s default bezier animation curves can cause weird problems. You need square animation curves, see attached file.
Same thing goes for Kaluura’s method.
25_ChildOf.blend (370 KB)
I tried using Kaluura’s technique but ended up seeing my object jump back to its original position. How can I make it work ?
If you managed to pick item up that is the half of the battle. You are almost there. This tutorial explains how to release it. It basically shows what revolt_randy explained:
Wow thank you for all the replies. I don’t have time right now to look at the tutorials but I definitely will when I do.
Can somebody explain to me again what Visual Loc/Rot/Scale is?
If you key any transform value of an object while this object is being constrained, it is likely that what you’ll key is not what you’re seeing, since constraints don’t change anything to the transform values of the constrained object, and standard keying operates on these raw transform values (try moving an object around through a child of constraint, you’ll see the slave object’s transform values stay the same).
Visual keying on the other hand takes into account transformation inherited from constraints as well, so keying an object after any transformation inherited from a constraint will hold it in place.
I still don’t understand Kaluura’s approach though. It seems I am missing something subtle.
@Hadriscus: Let’s try to explain differently.
You have 2 armatures. Each armature has a bone where to attach your object. (“Grab” and “NewPos”, for example.) You use 2 “Child Of” constraints, one for each attachment point. In theory, you start with both influences at zero so that your object is not attached to anything. You animate the armature so that “Grab” comes to the object. To pick up, you set the influence of “Grab” to 1. (“New Pos” still at zero.) You keep on animating to move your object until it reaches “NewPos”. To drop, you invert the influences: “Grab” at zero and “NewPos” at 1. You keep on animating, “Grab” moves away but the object stays at “NewPos”.
That’s the theory. In reality, there’s is a subtlety… It doesn’t work. Well, picking up works but dropping fails. The object jumps back into its original position. That’s where the “Visual LocRotScale” keyframes are supposed to help you.
I watched the tutorial, found the whole thing tortuous and checked what I did in an old blend file. I didn’t use any “Child Of” constraint. I used “Copy Location” and “Copy Rotation” and I keyframed only their influences. Nothing else.
I tried to redo everything from scratch with only keyframes on the influences. It’s easy. You just add the “Copy Loc” and “Copy Rot” constraints and touch nothing but the influences. It just works… but it’s tricky in a different way because of the “Copy Rotation”. I had to scratch my head a little to find the right rotation for the “Grab” and “NewPos” bones but I made this:
(Let’s hope YouTube won’t suppress it too quickly. I forgot to disable the audio.)
The blend file: Anim Grab+Drop.blend (107 KB)
The last time I played with the Childof constrain with multible goals I didn’t have to lower the first constrain influence, I only had to put the next constain influence to one. Can’t check it now, writing from a tablet.
So basicly with three Child of:
Frame 1: 0,0,0
Frame 11: 1,0,0
Frame 21: 1,1,0
Frame 31: 1,1,1
The Child of constrain doesn’t mix, it just overwrites.
The way with the Visual Transform is also good, I normaly use it for apply IK transformation of arms and legs to It’s FK rig
@Kaluura, thanks for your explanation !